// Copyright 2017 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package config
import (
"bytes"
"encoding/base64"
"encoding/json"
"flag"
"fmt"
"math"
"os"
"os/user"
"path/filepath"
"sort"
"strings"
"sync"
"sync/atomic"
"time"
"github.com/BurntSushi/toml"
"github.com/pingcap/errors"
zaplog "github.com/pingcap/log"
"github.com/pingcap/tidb/pkg/config/deploymode"
"github.com/pingcap/tidb/pkg/config/kerneltype"
"github.com/pingcap/tidb/pkg/parser/terror"
"github.com/pingcap/tidb/pkg/util/intest"
"github.com/pingcap/tidb/pkg/util/logutil"
"github.com/pingcap/tidb/pkg/util/naming"
"github.com/pingcap/tidb/pkg/util/tikvutil"
"github.com/pingcap/tidb/pkg/util/versioninfo"
tikvcfg "github.com/tikv/client-go/v2/config"
tracing "github.com/uber/jaeger-client-go/config"
atomicutil "go.uber.org/atomic"
"go.uber.org/zap"
)
// Config number limitations
const (
MaxLogFileSize = 4096 // MB
// MaxTxnEntrySize is the max value of TxnEntrySizeLimit.
MaxTxnEntrySizeLimit = 120 * 1024 * 1024 // 120MB
// MaxPluginAuditLogBufferSize is the max buffer size for plugin audit log.
MaxPluginAuditLogBufferSize = 100 * 1024 * 1024
// MaxPluginAuditLogFlushInterval is the max time interval to flush plugin audit log.
MaxPluginAuditLogFlushInterval = 3600
// DefTxnEntrySizeLimit is the default value of TxnEntrySizeLimit.
DefTxnEntrySizeLimit = 6 * 1024 * 1024
// DefTxnTotalSizeLimit is the default value of TxnTxnTotalSizeLimit.
DefTxnTotalSizeLimit = 100 * 1024 * 1024
SuperLargeTxnSize uint64 = 100 * 1024 * 1024 * 1024 * 1024 // 100T, we expect a txn can never be this large
// DefMaxIndexLength is the maximum index length(in bytes). This value is consistent with MySQL.
DefMaxIndexLength = 3072
// DefMaxOfMaxIndexLength is the maximum index length(in bytes) for TiDB v3.0.7 and previous version.
DefMaxOfMaxIndexLength = 3072 * 4
// DefIndexLimit is the limitation of index on a single table. This value is consistent with MySQL.
DefIndexLimit = 64
// DefMaxOfIndexLimit is the maximum limitation of index on a single table for TiDB.
DefMaxOfIndexLimit = 64 * 8
// DefPort is the default port of TiDB
DefPort = 4000
// DefStatusPort is the default status port of TiDB
DefStatusPort = 10080
// DefHost is the default host of TiDB
DefHost = "0.0.0.0"
// DefStatusHost is the default status host of TiDB
DefStatusHost = "0.0.0.0"
// DefTableColumnCountLimit is limit of the number of columns in a table
DefTableColumnCountLimit = 1017
// DefMaxOfTableColumnCountLimit is maximum limitation of the number of columns in a table
DefMaxOfTableColumnCountLimit = 4096
// DefStatsLoadConcurrencyLimit is limit of the concurrency of stats-load. When it is set to 0, it will be set by syncload.GetSyncLoadConcurrencyByCPU.
DefStatsLoadConcurrencyLimit = 0
// DefMaxOfStatsLoadConcurrencyLimit is maximum limitation of the concurrency of stats-load
DefMaxOfStatsLoadConcurrencyLimit = 128
// DefStatsLoadQueueSizeLimit is limit of the size of stats-load request queue
DefStatsLoadQueueSizeLimit = 1
// DefMaxOfStatsLoadQueueSizeLimit is maximum limitation of the size of stats-load request queue
DefMaxOfStatsLoadQueueSizeLimit = 100000
// DefDDLSlowOprThreshold sets log DDL operations whose execution time exceeds the threshold value.
DefDDLSlowOprThreshold = 300
// DefExpensiveQueryTimeThreshold indicates the time threshold of expensive query.
DefExpensiveQueryTimeThreshold = 60
// DefExpensiveTxnTimeThreshold indicates the time threshold of expensive txn.
DefExpensiveTxnTimeThreshold = 600
// DefMemoryUsageAlarmRatio is the threshold triggering an alarm which the memory usage of tidb-server instance exceeds.
DefMemoryUsageAlarmRatio = 0.8
// DefDXFResourceLimit is the default resource percentage available for DXF.
DefDXFResourceLimit = 100
// MinDXFResourceLimit is the minimum resource percentage available for DXF.
// Keep it at 10 while mysql.dist_framework_meta.cpu_count changes from total
// node CPU to usable DXF CPU, so the stored value stays non-zero.
MinDXFResourceLimit = 10
// MaxDXFResourceLimit is the maximum resource percentage available for DXF.
MaxDXFResourceLimit = 100
// DefTempDir is the default temporary directory path for TiDB.
DefTempDir = "/tmp/tidb"
// DefPluginAuditLogBufferSize is the default buffer size for plugin audit log.
DefPluginAuditLogBufferSize = 0
// DefPluginAuditLogFlushInterval is the default time interval to flush plugin audit log.
DefPluginAuditLogFlushInterval = 30
// DefAuthTokenRefreshInterval is the default time interval to refresh tidb auth token.
DefAuthTokenRefreshInterval = time.Hour
// EnvVarKeyspaceName is the system env name for keyspace name.
EnvVarKeyspaceName = "KEYSPACE_NAME"
// EnvClusterCA is the system env name for cluster CA path.
EnvClusterCA = "CLUSTER_CA"
// EnvClusterCert is the system env name for cluster cert path.
EnvClusterCert = "CLUSTER_CERT"
// EnvClusterKey is the system env name for cluster key path.
EnvClusterKey = "CLUSTER_KEY"
// EnvSQLCA is the system env name for SQL CA path.
EnvSQLCA = "SQL_CA"
// EnvSQLCert is the system env name for SQL cert path.
EnvSQLCert = "SQL_CERT"
// EnvSQLKey is the system env name for SQL key path.
EnvSQLKey = "SQL_KEY"
// MaxTokenLimit is the max token limit value.
MaxTokenLimit = 1024 * 1024
DefSchemaLease = 45 * time.Second
// max_allowed_packet must be in [1024, 1073741824] and a multiple of 1024.
maxAllowedPacketUnit = 1024
minMaxAllowedPacket = maxAllowedPacketUnit
maxOfMaxAllowedPacket = 1 << 30
// DefMaxAllowedPacket is the default value of max_allowed_packet.
DefMaxAllowedPacket = 64 << 20
UnavailableIP = "<nil>"
)
// Valid config maps
var (
// CheckTableBeforeDrop enable to execute `admin check table` before `drop table`.
CheckTableBeforeDrop = false
// checkBeforeDropLDFlag is a go build flag.
checkBeforeDropLDFlag = "None"
// tempStorageDirName is the default temporary storage dir name by base64 encoding a string `port/statusPort`
tempStorageDirName = encodeDefTempStorageDir(os.TempDir(), DefHost, DefStatusHost, DefPort, DefStatusPort)
)
// InstanceConfigSection indicates a config session that has options moved to [instance] session.
type InstanceConfigSection struct {
// SectionName indicates the origin section name.
SectionName string
// NameMappings maps the origin name to the name in [instance].
NameMappings map[string]string
}
var (
// sectionMovedToInstance records all config section and options that should be moved to [instance].
sectionMovedToInstance = []InstanceConfigSection{
{
"",
map[string]string{
"check-mb4-value-in-utf8": "tidb_check_mb4_value_in_utf8",
"enable-collect-execution-info": "tidb_enable_collect_execution_info",
"max-server-connections": "max_connections",
"run-ddl": "tidb_enable_ddl",
},
},
{
"log",
map[string]string{
"enable-slow-log": "tidb_enable_slow_log",
"slow-threshold": "tidb_slow_log_threshold",
"record-plan-in-slow-log": "tidb_record_plan_in_slow_log",
},
},
{
"performance",
map[string]string{
"force-priority": "tidb_force_priority",
"memory-usage-alarm-ratio": "tidb_memory_usage_alarm_ratio",
},
},
{
"plugin",
map[string]string{
"load": "plugin_load",
"dir": "plugin_dir",
},
},
}
// ConflictOptions indicates the conflict config options existing in both [instance] and other sections in config file.
ConflictOptions []InstanceConfigSection
// DeprecatedOptions indicates the config options existing in some other sections in config file.
// They should be moved to [instance] section.
DeprecatedOptions []InstanceConfigSection
// TikvConfigLock protects against concurrent tikv config refresh
TikvConfigLock sync.Mutex
)
// Config contains configuration options.
type Config struct {
Host string `toml:"host" json:"host"`
AdvertiseAddress string `toml:"advertise-address" json:"advertise-address"`
Port uint `toml:"port" json:"port"`
Cors string `toml:"cors" json:"cors"`
Store StoreType `toml:"store" json:"store"`
Path string `toml:"path" json:"path"`
Socket string `toml:"socket" json:"socket"`
Lease string `toml:"lease" json:"lease"`
SplitTable bool `toml:"split-table" json:"split-table"`
TokenLimit uint `toml:"token-limit" json:"token-limit"`
// MaxAllowedPacket is the configured default for max_allowed_packet in starter deployment mode.
MaxAllowedPacket uint64 `toml:"max-allowed-packet" json:"max-allowed-packet"`
TempDir string `toml:"temp-dir" json:"temp-dir"`
TempStoragePath string `toml:"tmp-storage-path" json:"tmp-storage-path"`
// TempStorageQuota describe the temporary storage Quota during query exector when TiDBEnableTmpStorageOnOOM is enabled
// If the quota exceed the capacity of the TempStoragePath, the tidb-server would exit with fatal error
TempStorageQuota int64 `toml:"tmp-storage-quota" json:"tmp-storage-quota"` // Bytes
TxnLocalLatches tikvcfg.TxnLocalLatches `toml:"-" json:"-"`
ServerVersion string `toml:"server-version" json:"server-version"`
VersionComment string `toml:"version-comment" json:"version-comment"`
TiDBEdition string `toml:"tidb-edition" json:"tidb-edition"`
TiDBReleaseVersion string `toml:"tidb-release-version" json:"tidb-release-version"`
DeployMode deploymode.Mode `toml:"deploy-mode" json:"deploy-mode"`
DXFResourceLimit int `toml:"dxf-resource-limit" json:"dxf-resource-limit"`
KeyspaceName string `toml:"keyspace-name" json:"keyspace-name"`
TiKVWorkerURL string `toml:"tikv-worker-url" json:"tikv-worker-url"`
Log Log `toml:"log" json:"log"`
Instance Instance `toml:"instance" json:"instance"`
Security Security `toml:"security" json:"security"`
Status Status `toml:"status" json:"status"`
Performance Performance `toml:"performance" json:"performance"`
PreparedPlanCache PreparedPlanCache `toml:"prepared-plan-cache" json:"prepared-plan-cache"`
OpenTracing OpenTracing `toml:"opentracing" json:"opentracing"`
ProxyProtocol ProxyProtocol `toml:"proxy-protocol" json:"proxy-protocol"`
PDClient tikvcfg.PDClient `toml:"pd-client" json:"pd-client"`
TiKVClient tikvcfg.TiKVClient `toml:"tikv-client" json:"tikv-client"`
RUV2 RUV2Config `toml:"ru-v2" json:"ru-v2"`
CompatibleKillQuery bool `toml:"compatible-kill-query" json:"compatible-kill-query"`
PessimisticTxn PessimisticTxn `toml:"pessimistic-txn" json:"pessimistic-txn"`
MaxIndexLength int `toml:"max-index-length" json:"max-index-length"`
IndexLimit int `toml:"index-limit" json:"index-limit"`
TableColumnCountLimit uint32 `toml:"table-column-count-limit" json:"table-column-count-limit"`
GracefulWaitBeforeShutdown int `toml:"graceful-wait-before-shutdown" json:"graceful-wait-before-shutdown"`
// AlterPrimaryKey is used to control alter primary key feature.
AlterPrimaryKey bool `toml:"alter-primary-key" json:"alter-primary-key"`
// TreatOldVersionUTF8AsUTF8MB4 is use to treat old version table/column UTF8 charset as UTF8MB4. This is for compatibility.
// Currently not support dynamic modify, because this need to reload all old version schema.
TreatOldVersionUTF8AsUTF8MB4 bool `toml:"treat-old-version-utf8-as-utf8mb4" json:"treat-old-version-utf8-as-utf8mb4"`
// EnableTableLock indicate whether enable table lock.
// TODO: remove this after table lock features stable.
EnableTableLock bool `toml:"enable-table-lock" json:"enable-table-lock"`
DelayCleanTableLock uint64 `toml:"delay-clean-table-lock" json:"delay-clean-table-lock"`
SplitRegionMaxNum uint64 `toml:"split-region-max-num" json:"split-region-max-num"`
TopSQL TopSQL `toml:"top-sql" json:"top-sql"`
// RepairMode indicates that the TiDB is in the repair mode for table meta.
RepairMode bool `toml:"repair-mode" json:"repair-mode"`
RepairTableList []string `toml:"repair-table-list" json:"repair-table-list"`
// IsolationRead indicates that the TiDB reads data from which isolation level(engine and label).
IsolationRead IsolationRead `toml:"isolation-read" json:"isolation-read"`
// NewCollationsEnabledOnFirstBootstrap indicates if the new collations are enabled, it effects only when a TiDB cluster bootstrapped on the first time.
NewCollationsEnabledOnFirstBootstrap bool `toml:"new_collations_enabled_on_first_bootstrap" json:"new_collations_enabled_on_first_bootstrap"`
// Experimental contains parameters for experimental features.
Experimental Experimental `toml:"experimental" json:"experimental"`
// SkipRegisterToDashboard tells TiDB don't register itself to the dashboard.
SkipRegisterToDashboard bool `toml:"skip-register-to-dashboard" json:"skip-register-to-dashboard"`
// EnableTelemetry enables the usage data print to log.
EnableTelemetry bool `toml:"enable-telemetry" json:"enable-telemetry"`
// Labels indicates the labels set for the tidb server. The labels describe some specific properties for the tidb
// server like `zone`/`rack`/`host`. Currently, labels won't affect the tidb server except for some special
// label keys. Now we have following special keys:
// 1. 'group' is a special label key which should be automatically set by tidb-operator. We don't suggest
// users to set 'group' in labels.
// 2. 'zone' is a special key that indicates the DC location of this tidb-server. If it is set, the value for this
// key will be the default value of the session variable `txn_scope` for this tidb-server.
Labels map[string]string `toml:"labels" json:"labels"`
// EnableGlobalIndex is deprecated.
EnableGlobalIndex bool `toml:"enable-global-index" json:"enable-global-index"`
// DeprecateIntegerDisplayWidth indicates whether deprecating the max display length for integer.
DeprecateIntegerDisplayWidth bool `toml:"deprecate-integer-display-length" json:"deprecate-integer-display-length"`
// EnableEnumLengthLimit indicates whether the enum/set element length is limited.
// According to MySQL 8.0 Refman:
// The maximum supported length of an individual SET element is M <= 255 and (M x w) <= 1020,
// where M is the element literal length and w is the number of bytes required for the maximum-length character in the character set.
// See https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html for more details.
EnableEnumLengthLimit bool `toml:"enable-enum-length-limit" json:"enable-enum-length-limit"`
// StoresRefreshInterval indicates the interval of refreshing stores info, the unit is second.
StoresRefreshInterval uint64 `toml:"stores-refresh-interval" json:"stores-refresh-interval"`
// EnableTCP4Only enables net.Listen("tcp4",...)
// Note that: it can make lvs with toa work and thus tidb can get real client ip.
EnableTCP4Only bool `toml:"enable-tcp4-only" json:"enable-tcp4-only"`
// The client will forward the requests through the follower
// if one of the following conditions happens:
// 1. there is a network partition problem between TiDB and PD leader.
// 2. there is a network partition problem between TiDB and TiKV leader.
EnableForwarding bool `toml:"enable-forwarding" json:"enable-forwarding"`
// MaxBallastObjectSize set the max size of the ballast object, the unit is byte.
// The default value is the smallest of the following two values: 2GB or
// one quarter of the total physical memory in the current system.
MaxBallastObjectSize int `toml:"max-ballast-object-size" json:"max-ballast-object-size"`
// BallastObjectSize set the initial size of the ballast object, the unit is byte.
BallastObjectSize int `toml:"ballast-object-size" json:"ballast-object-size"`
TrxSummary TrxSummary `toml:"transaction-summary" json:"transaction-summary"`
// EnableGlobalKill indicates whether to enable global kill.
EnableGlobalKill bool `toml:"enable-global-kill" json:"enable-global-kill"`
// Enable32BitsConnectionID indicates whether to enable 32bits connection ID for global kill.
Enable32BitsConnectionID bool `toml:"enable-32bits-connection-id" json:"enable-32bits-connection-id"`
// InitializeSQLFile is a file that will be executed after first bootstrap only.
// It can be used to set GLOBAL system variable values
InitializeSQLFile string `toml:"initialize-sql-file" json:"initialize-sql-file"`
// Standby is the config for standby mode.
Standby Standby `toml:"standby" json:"standby"`
// The following items are deprecated. We need to keep them here temporarily
// to support the upgrade process. They can be removed in future.
// EnableBatchDML, MemQuotaQuery, OOMAction unused since bootstrap v90
EnableBatchDML bool `toml:"enable-batch-dml" json:"enable-batch-dml"`
MemQuotaQuery int64 `toml:"mem-quota-query" json:"mem-quota-query"`
OOMAction string `toml:"oom-action" json:"oom-action"`
// OOMUseTmpStorage unused since bootstrap v93
OOMUseTmpStorage bool `toml:"oom-use-tmp-storage" json:"oom-use-tmp-storage"`
// These items are deprecated because they are turned into instance system variables.
CheckMb4ValueInUTF8 AtomicBool `toml:"check-mb4-value-in-utf8" json:"check-mb4-value-in-utf8"`
EnableCollectExecutionInfo bool `toml:"enable-collect-execution-info" json:"enable-collect-execution-info"`
Plugin Plugin `toml:"plugin" json:"plugin"`
MaxServerConnections uint32 `toml:"max-server-connections" json:"max-server-connections"`
RunDDL bool `toml:"run-ddl" json:"run-ddl"`
// These configs are related to disaggregated-tiflash mode.
DisaggregatedTiFlash bool `toml:"disaggregated-tiflash" json:"disaggregated-tiflash"`
TiFlashComputeAutoScalerType string `toml:"autoscaler-type" json:"autoscaler-type"`
TiFlashComputeAutoScalerAddr string `toml:"autoscaler-addr" json:"autoscaler-addr"`
IsTiFlashComputeFixedPool bool `toml:"is-tiflashcompute-fixed-pool" json:"is-tiflashcompute-fixed-pool"`
AutoScalerClusterID string `toml:"autoscaler-cluster-id" json:"autoscaler-cluster-id"`
UseAutoScaler bool `toml:"use-autoscaler" json:"use-autoscaler"`
// TiDBMaxReuseChunk indicates max cached chunk num
TiDBMaxReuseChunk uint32 `toml:"tidb-max-reuse-chunk" json:"tidb-max-reuse-chunk"`
// TiDBMaxReuseColumn indicates max cached column num
TiDBMaxReuseColumn uint32 `toml:"tidb-max-reuse-column" json:"tidb-max-reuse-column"`
// TiDBEnableExitCheck indicates whether exit-checking in domain for background process
TiDBEnableExitCheck bool `toml:"tidb-enable-exit-check" json:"tidb-enable-exit-check"`
// InMemSlowQueryTopNNum indicates the number of TopN slow queries stored in memory.
InMemSlowQueryTopNNum int `toml:"in-mem-slow-query-topn-num" json:"in-mem-slow-query-topn-num"`
// InMemSlowQueryRecentNum indicates the number of recent slow queries stored in memory.
InMemSlowQueryRecentNum int `toml:"in-mem-slow-query-recent-num" json:"in-mem-slow-query-recent-num"`
// MeteringConfigURI is the URI for metering configuration.
MeteringStorageURI string `toml:"metering-storage-uri" json:"metering-storage-uri"`
}
// RUV2Config is the configuration for RU v2 weight calculation.
// The default values are experimentally fitted so they stay stable under the
// same workload while remaining numerically aligned with RU v1.
type RUV2Config struct {
// RUScale is the scale factor used to convert RU v2 float values into scaled integer values.
// It is intentionally chosen to match legacy RU values for compatibility.
RUScale float64 `toml:"ru-scale" json:"ru-scale"`
// ResultChunkCells is the weight for cells materialized into result chunks.
ResultChunkCells float64 `toml:"result-chunk-cells" json:"result-chunk-cells"`
// ExecutorL1 is the weight for fast-path executors that scale by cells:
// BatchPointGet, PointGet, and Limit.
ExecutorL1 float64 `toml:"executor-l1" json:"executor-l1"`
// ExecutorL2 is the weight for general executors, including HashAgg,
// HashJoin, IndexLookUpJoin, IndexLookUpExecutor, IndexReaderExecutor,
// MemTableReaderExec, SelectionExec, TableDualExec, TableReaderExecutor,
// UnionScanExec, and SelectLockExec.
ExecutorL2 float64 `toml:"executor-l2" json:"executor-l2"`
// ExecutorL3 is the weight for heavier operators: Sort and StreamAgg.
ExecutorL3 float64 `toml:"executor-l3" json:"executor-l3"`
// ExecutorL5InsertRows is the per-row weight for insert work. Level 4 is
// intentionally unused today because only L1/L2/L3 executor groups and this
// insert-specific tier are currently modeled.
ExecutorL5InsertRows float64 `toml:"executor-l5-insert-rows" json:"executor-l5-insert-rows"`
PlanCnt float64 `toml:"plan-cnt" json:"plan-cnt"`
PlanDeriveStatsPaths float64 `toml:"plan-derive-stats-paths" json:"plan-derive-stats-paths"`
ResourceManagerReadCnt float64 `toml:"resource-manager-read-cnt" json:"resource-manager-read-cnt"`
ResourceManagerWriteCnt float64 `toml:"resource-manager-write-cnt" json:"resource-manager-write-cnt"`
SessionParserTotal float64 `toml:"session-parser-total" json:"session-parser-total"`
TxnCnt float64 `toml:"txn-cnt" json:"txn-cnt"`
}
// DefaultRUV2Config returns the default RU v2 configuration.
func DefaultRUV2Config() RUV2Config {
return RUV2Config{
RUScale: 2.01,
ResultChunkCells: 0.00010000,
ExecutorL1: 0.00013278,
ExecutorL2: 0.00000383,
ExecutorL3: 0.00141739,
ExecutorL5InsertRows: 0.00472572,
PlanCnt: 0.15392217,
PlanDeriveStatsPaths: 0.24968182,
ResourceManagerReadCnt: 0.02072003,
ResourceManagerWriteCnt: 0.07179779,
SessionParserTotal: 0.19230499,
TxnCnt: 0.03013709,
}
}
// UpdateTempStoragePath is to update the `TempStoragePath` if port/statusPort was changed
// and the `tmp-storage-path` was not specified in the conf.toml or was specified the same as the default value.
func (c *Config) UpdateTempStoragePath() {
if c.TempStoragePath == tempStorageDirName {
c.TempStoragePath = encodeDefTempStorageDir(os.TempDir(), c.Host, c.Status.StatusHost, c.Port, c.Status.StatusPort)
} else {
c.TempStoragePath = encodeDefTempStorageDir(c.TempStoragePath, c.Host, c.Status.StatusHost, c.Port, c.Status.StatusPort)
}
}
// GetTiKVConfig returns configuration options from tikvcfg
func (c *Config) GetTiKVConfig() *tikvcfg.Config {
return &tikvcfg.Config{
CommitterConcurrency: int(tikvutil.CommitterConcurrency.Load()),
MaxTxnTTL: c.Performance.MaxTxnTTL,
TiKVClient: c.TiKVClient,
Security: c.Security.ClusterSecurity(),
PDClient: c.PDClient,
PessimisticTxn: tikvcfg.PessimisticTxn{MaxRetryCount: c.PessimisticTxn.MaxRetryCount},
TxnLocalLatches: c.TxnLocalLatches,
StoresRefreshInterval: c.StoresRefreshInterval,
OpenTracingEnable: c.OpenTracing.Enable,
Path: c.Path,
EnableForwarding: c.EnableForwarding,
TxnScope: c.Labels["zone"],
ZoneLabel: c.Labels["zone"],
EnableAsyncBatchGet: c.Performance.EnableAsyncBatchGet,
}
}
func encodeDefTempStorageDir(tempDir string, host, statusHost string, port, statusPort uint) string {
dirName := base64.URLEncoding.EncodeToString(fmt.Appendf(nil, "%v:%v/%v:%v", host, port, statusHost, statusPort))
osUID := ""
currentUser, err := user.Current()
if err == nil {
osUID = currentUser.Uid
}
return filepath.Join(tempDir, osUID+"_tidb", dirName, "tmp-storage")
}
// nullableBool defaults unset bool options to unset instead of false, which enables us to know if the user has set 2
// conflict options at the same time.
type nullableBool struct {
IsValid bool
IsTrue bool
}
var (
nbUnset = nullableBool{false, false}
nbFalse = nullableBool{true, false}
nbTrue = nullableBool{true, true}
)
func (b *nullableBool) toBool() bool {
return b.IsValid && b.IsTrue
}
func (b nullableBool) MarshalJSON() ([]byte, error) {
switch b {
case nbTrue:
return json.Marshal(true)
case nbFalse:
return json.Marshal(false)
default:
return json.Marshal(nil)
}
}
func (b *nullableBool) UnmarshalText(text []byte) error {
str := string(text)
switch str {
case "", "null":
*b = nbUnset
return nil
case "true":
*b = nbTrue
case "false":
*b = nbFalse
default:
*b = nbUnset
return errors.New("Invalid value for bool type: " + str)
}
return nil
}
func (b nullableBool) MarshalText() ([]byte, error) {
if !b.IsValid {
return []byte(""), nil
}
if b.IsTrue {
return []byte("true"), nil
}
return []byte("false"), nil
}
func (b *nullableBool) UnmarshalJSON(data []byte) error {
var err error
var v any
if err = json.Unmarshal(data, &v); err != nil {
return err
}
switch raw := v.(type) {
case bool:
*b = nullableBool{true, raw}
default:
*b = nbUnset
}
return err
}
// AtomicBool is a helper type for atomic operations on a boolean value.
type AtomicBool struct {
atomicutil.Bool
}
// NewAtomicBool creates an AtomicBool.
func NewAtomicBool(v bool) *AtomicBool {
return &AtomicBool{*atomicutil.NewBool(v)}
}
// MarshalText implements the encoding.TextMarshaler interface.
func (b AtomicBool) MarshalText() ([]byte, error) {
if b.Load() {
return []byte("true"), nil
}
return []byte("false"), nil
}
// UnmarshalText implements the encoding.TextUnmarshaler interface.
func (b *AtomicBool) UnmarshalText(text []byte) error {
str := string(text)
switch str {
case "", "null":
*b = AtomicBool{*atomicutil.NewBool(false)}
case "true":
*b = AtomicBool{*atomicutil.NewBool(true)}
case "false":
*b = AtomicBool{*atomicutil.NewBool(false)}
default:
*b = AtomicBool{*atomicutil.NewBool(false)}
return errors.New("Invalid value for bool type: " + str)
}
return nil
}
// Log is the log section of config.
type Log struct {
// Log level.
Level string `toml:"level" json:"level"`
// Log format, one of json or text.
Format string `toml:"format" json:"format"`
// Disable automatic timestamps in output. Deprecated: use EnableTimestamp instead.
DisableTimestamp nullableBool `toml:"disable-timestamp" json:"disable-timestamp"`
// EnableTimestamp enables automatic timestamps in log output.
EnableTimestamp nullableBool `toml:"enable-timestamp" json:"enable-timestamp"`
// DisableErrorStack stops annotating logs with the full stack error
// message. Deprecated: use EnableErrorStack instead.
DisableErrorStack nullableBool `toml:"disable-error-stack" json:"disable-error-stack"`
// EnableErrorStack enables annotating logs with the full stack error
// message.
EnableErrorStack nullableBool `toml:"enable-error-stack" json:"enable-error-stack"`
// File log config.
File logutil.FileLogConfig `toml:"file" json:"file"`
SlowQueryFile string `toml:"slow-query-file" json:"slow-query-file"`
// ExpensiveThreshold is deprecated.
ExpensiveThreshold uint `toml:"expensive-threshold" json:"expensive-threshold"`
GeneralLogFile string `toml:"general-log-file" json:"general-log-file"`
// The following items are deprecated. We need to keep them here temporarily
// to support the upgrade process. They can be removed in future.
// QueryLogMaxLen unused since bootstrap v90
QueryLogMaxLen uint64 `toml:"query-log-max-len" json:"query-log-max-len"`
// EnableSlowLog, SlowThreshold, RecordPlanInSlowLog are deprecated.
EnableSlowLog AtomicBool `toml:"enable-slow-log" json:"enable-slow-log"`
SlowThreshold uint64 `toml:"slow-threshold" json:"slow-threshold"`
RecordPlanInSlowLog uint32 `toml:"record-plan-in-slow-log" json:"record-plan-in-slow-log"`
// Make tidb panic if write log operation hang in `Timeout` seconds
Timeout int `toml:"timeout" json:"timeout"`
}
// Instance is the section of instance scope system variables.
type Instance struct {
// These variables only exist in [instance] section.
// TiDBGeneralLog is used to log every query in the server in info level.
TiDBGeneralLog bool `toml:"tidb_general_log" json:"tidb_general_log"`
// EnablePProfSQLCPU is used to add label sql label to pprof result.
EnablePProfSQLCPU bool `toml:"tidb_pprof_sql_cpu" json:"tidb_pprof_sql_cpu"`
// DDLSlowOprThreshold sets log DDL operations whose execution time exceeds the threshold value.
DDLSlowOprThreshold uint32 `toml:"ddl_slow_threshold" json:"ddl_slow_threshold"`
// ExpensiveQueryTimeThreshold indicates the time threshold of expensive query.
ExpensiveQueryTimeThreshold uint64 `toml:"tidb_expensive_query_time_threshold" json:"tidb_expensive_query_time_threshold"`
// ExpensiveTxnTimeThreshold indicates the time threshold of expensive transaction.
ExpensiveTxnTimeThreshold uint64 `toml:"tidb_expensive_txn_time_threshold" json:"tidb_expensive_txn_time_threshold"`
// StmtSummaryEnablePersistent indicates whether to enable file persistence for stmtsummary.
StmtSummaryEnablePersistent bool `toml:"tidb_stmt_summary_enable_persistent" json:"tidb_stmt_summary_enable_persistent"`
// StmtSummaryFilename indicates the file name written by stmtsummary
// when StmtSummaryEnablePersistent is true.
StmtSummaryFilename string `toml:"tidb_stmt_summary_filename" json:"tidb_stmt_summary_filename"`
// StmtSummaryFileMaxDays indicates how many days the files written by
// stmtsummary will be kept when StmtSummaryEnablePersistent is true.
StmtSummaryFileMaxDays int `toml:"tidb_stmt_summary_file_max_days" json:"tidb_stmt_summary_file_max_days"`
// StmtSummaryFileMaxSize indicates the maximum size (in mb) of a single file
// written by stmtsummary when StmtSummaryEnablePersistent is true.
StmtSummaryFileMaxSize int `toml:"tidb_stmt_summary_file_max_size" json:"tidb_stmt_summary_file_max_size"`
// StmtSummaryFileMaxBackups indicates the maximum number of files written
// by stmtsummary when StmtSummaryEnablePersistent is true.
StmtSummaryFileMaxBackups int `toml:"tidb_stmt_summary_file_max_backups" json:"tidb_stmt_summary_file_max_backups"`
// StmtSummaryMaxStmtCount indicates the max number of statements kept in memory.
StmtSummaryMaxStmtCount uint64 `toml:"tidb_stmt_summary_max_stmt_count" json:"tidb_stmt_summary_max_stmt_count"`
// ServerMemoryLimit indicates the memory limit of the tidb-server instance.
ServerMemoryLimit string `toml:"tidb_server_memory_limit" json:"tidb_server_memory_limit"`
// MemArbitratorMode indicates the work mode of the global memory arbitrator of the tidb-server instance.
MemArbitratorMode string `toml:"tidb_mem_arbitrator_mode" json:"tidb_mem_arbitrator_mode"`
// MemArbitratorSoftLimit indicates the memory resource soft limit of the tidb-server instance.
MemArbitratorSoftLimit string `toml:"tidb_mem_arbitrator_soft_limit" json:"tidb_mem_arbitrator_soft_limit"`
// ServerMemoryLimitGCTrigger indicates the gc percentage of the ServerMemoryLimit.
ServerMemoryLimitGCTrigger string `toml:"tidb_server_memory_limit_gc_trigger" json:"tidb_server_memory_limit_gc_trigger"`
// InstancePlanCacheMaxMemSize indicates the maximum memory size of instance plan cache.
InstancePlanCacheMaxMemSize string `toml:"tidb_instance_plan_cache_max_size" json:"tidb_instance_plan_cache_max_size"`
// StatsCacheMemQuota records stats cache quota.
StatsCacheMemQuota uint64 `toml:"tidb_stats_cache_mem_quota" json:"tidb_stats_cache_mem_quota"`
// MemQuotaBindingCache indicates the memory quota for the bind cache.
MemQuotaBindingCache uint64 `toml:"tidb_mem_quota_binding_cache" json:"tidb_mem_quota_binding_cache"`
// SchemaCacheSize indicates the size of infoschema meta data which are cached in V2 implementation.
SchemaCacheSize string `toml:"tidb_schema_cache_size" json:"tidb_schema_cache_size"`
// These variables exist in both 'instance' section and another place.
// The configuration in 'instance' section takes precedence.
EnableSlowLog AtomicBool `toml:"tidb_enable_slow_log" json:"tidb_enable_slow_log"`
SlowThreshold uint64 `toml:"tidb_slow_log_threshold" json:"tidb_slow_log_threshold"`
RecordPlanInSlowLog uint32 `toml:"tidb_record_plan_in_slow_log" json:"tidb_record_plan_in_slow_log"`
CheckMb4ValueInUTF8 AtomicBool `toml:"tidb_check_mb4_value_in_utf8" json:"tidb_check_mb4_value_in_utf8"`
ForcePriority string `toml:"tidb_force_priority" json:"tidb_force_priority"`
MemoryUsageAlarmRatio float64 `toml:"tidb_memory_usage_alarm_ratio" json:"tidb_memory_usage_alarm_ratio"`
// EnableCollectExecutionInfo enables the TiDB to collect execution info.
EnableCollectExecutionInfo AtomicBool `toml:"tidb_enable_collect_execution_info" json:"tidb_enable_collect_execution_info"`
PluginDir string `toml:"plugin_dir" json:"plugin_dir"`
PluginLoad string `toml:"plugin_load" json:"plugin_load"`
// PluginAuditLogBufferSize is the buffer size (in bytes) of plugin audit log, default is 0(buffer disabled)
PluginAuditLogBufferSize int `toml:"plugin_audit_log_buffer_size" json:"plugin_audit_log_buffer_size"`
// PluginAuditLogFlushInterval is the flush interval (in seconds) of plugin audit log, it works only when PluginAuditLogBufferSize is greater than 0.
PluginAuditLogFlushInterval int `toml:"plugin_audit_log_flush_interval" json:"plugin_audit_log_flush_interval"`
// MaxConnections is the maximum permitted number of simultaneous client connections.
MaxConnections uint32 `toml:"max_connections" json:"max_connections"`
TiDBEnableDDL AtomicBool `toml:"tidb_enable_ddl" json:"tidb_enable_ddl"`
TiDBEnableStatsOwner AtomicBool `toml:"tidb_enable_stats_owner" json:"tidb_enable_stats_owner"`
TiDBRCReadCheckTS bool `toml:"tidb_rc_read_check_ts" json:"tidb_rc_read_check_ts"`
// TiDBServiceScope indicates the role for tidb for distributed task framework.
TiDBServiceScope string `toml:"tidb_service_scope" json:"tidb_service_scope"`
}
func (l *Log) getDisableTimestamp() bool {
if l.EnableTimestamp == nbUnset && l.DisableTimestamp == nbUnset {
return false
}
if l.EnableTimestamp == nbUnset {
return l.DisableTimestamp.toBool()
}
return !l.EnableTimestamp.toBool()
}
func (l *Log) getDisableErrorStack() bool {
if l.EnableErrorStack == nbUnset && l.DisableErrorStack == nbUnset {
return true
}
if l.EnableErrorStack == nbUnset {
return l.DisableErrorStack.toBool()
}
return !l.EnableErrorStack.toBool()
}
// The following constants represents the valid action configurations for Security.SpilledFileEncryptionMethod.
// "plaintext" means encryption is disabled.
// NOTE: Although the values is case insensitive, we should use lower-case
// strings because the configuration value will be transformed to lower-case
// string and compared with these constants in the further usage.
const (
SpilledFileEncryptionMethodPlaintext = "plaintext"
SpilledFileEncryptionMethodAES128CTR = "aes128-ctr"
)
// Security is the security section of the config.
type Security struct {
SkipGrantTable bool `toml:"skip-grant-table" json:"skip-grant-table"`
SSLCA string `toml:"ssl-ca" json:"ssl-ca"`
SSLCert string `toml:"ssl-cert" json:"ssl-cert"`
SSLKey string `toml:"ssl-key" json:"ssl-key"`
ClusterSSLCA string `toml:"cluster-ssl-ca" json:"cluster-ssl-ca"`
ClusterSSLCert string `toml:"cluster-ssl-cert" json:"cluster-ssl-cert"`
ClusterSSLKey string `toml:"cluster-ssl-key" json:"cluster-ssl-key"`
ClusterVerifyCN []string `toml:"cluster-verify-cn" json:"cluster-verify-cn"`
// Used for auth plugin `tidb_session_token`.
SessionTokenSigningCert string `toml:"session-token-signing-cert" json:"session-token-signing-cert"`
SessionTokenSigningKey string `toml:"session-token-signing-key" json:"session-token-signing-key"`
// If set to "plaintext", the spilled files will not be encrypted.
SpilledFileEncryptionMethod string `toml:"spilled-file-encryption-method" json:"spilled-file-encryption-method"`
// EnableSEM prevents SUPER users from having full access.
EnableSEM bool `toml:"enable-sem" json:"enable-sem"`
// SEMConfig represents the path to the SEM configuration file.
SEMConfig string `toml:"sem-config" json:"sem-config"`
// Allow automatic TLS certificate generation
AutoTLS bool `toml:"auto-tls" json:"auto-tls"`
MinTLSVersion string `toml:"tls-version" json:"tls-version"`
RSAKeySize int `toml:"rsa-key-size" json:"rsa-key-size"`
SecureBootstrap bool `toml:"secure-bootstrap" json:"secure-bootstrap"`
// The path of the JWKS for tidb_auth_token authentication
AuthTokenJWKS string `toml:"auth-token-jwks" json:"auth-token-jwks"`
// The refresh time interval of JWKS
AuthTokenRefreshInterval string `toml:"auth-token-refresh-interval" json:"auth-token-refresh-interval"`
// Disconnect directly when the password is expired
DisconnectOnExpiredPassword bool `toml:"disconnect-on-expired-password" json:"disconnect-on-expired-password"`
}
// The ErrConfigValidationFailed error is used so that external callers can do a type assertion
// to defer handling of this specific error when someone does not want strict type checking.
// This is needed only because logging hasn't been set up at the time we parse the config file.
// This should all be ripped out once strict config checking is made the default behavior.
type ErrConfigValidationFailed struct {
confFile string
UndecodedItems []string
}
func (e *ErrConfigValidationFailed) Error() string {
return fmt.Sprintf("config file %s contained invalid configuration options: %s; check "+
"TiDB manual to make sure this option has not been deprecated and removed from your TiDB "+
"version if the option does not appear to be a typo", e.confFile, strings.Join(
e.UndecodedItems, ", "))
}
// ErrConfigInstanceSection error is used to warning the user
// which config options should be moved to 'instance'.
type ErrConfigInstanceSection struct {
confFile string
configSections *[]InstanceConfigSection
deprecatedSections *[]InstanceConfigSection
}
func (e *ErrConfigInstanceSection) Error() string {
var builder strings.Builder
if len(*e.configSections) > 0 {
builder.WriteString("Conflict configuration options exists on both [instance] section and some other sections. ")
}
if len(*e.deprecatedSections) > 0 {
builder.WriteString("Some configuration options should be moved to [instance] section. ")
}
builder.WriteString("Please use the latter config options in [instance] instead: ")
for _, configSection := range *e.configSections {
for oldName, newName := range configSection.NameMappings {
builder.WriteString(fmt.Sprintf(" (%s, %s)", oldName, newName))
}
}
for _, configSection := range *e.deprecatedSections {
for oldName, newName := range configSection.NameMappings {
builder.WriteString(fmt.Sprintf(" (%s, %s)", oldName, newName))
}
}
builder.WriteString(".")
return builder.String()
}
// ClusterSecurity returns Security info for cluster
func (s *Security) ClusterSecurity() tikvcfg.Security {
return tikvcfg.NewSecurity(s.ClusterSSLCA, s.ClusterSSLCert, s.ClusterSSLKey, s.ClusterVerifyCN)
}
// Status is the status section of the config.
type Status struct {
StatusHost string `toml:"status-host" json:"status-host"`
MetricsAddr string `toml:"metrics-addr" json:"metrics-addr"`
StatusPort uint `toml:"status-port" json:"status-port"`
MetricsInterval uint `toml:"metrics-interval" json:"metrics-interval"`
ReportStatus bool `toml:"report-status" json:"report-status"`
RecordQPSbyDB bool `toml:"record-db-qps" json:"record-db-qps"`
RecordDBLabel bool `toml:"record-db-label" json:"record-db-label"`
// After a duration of this time in seconds if the server doesn't see any activity it pings
// the client to see if the transport is still alive.
GRPCKeepAliveTime uint `toml:"grpc-keepalive-time" json:"grpc-keepalive-time"`
// After having pinged for keepalive check, the server waits for a duration of timeout in seconds
// and if no activity is seen even after that the connection is closed.
GRPCKeepAliveTimeout uint `toml:"grpc-keepalive-timeout" json:"grpc-keepalive-timeout"`
// The number of max concurrent streams/requests on a client connection.
GRPCConcurrentStreams uint `toml:"grpc-concurrent-streams" json:"grpc-concurrent-streams"`
// Sets window size for stream. The default value is 2MB.
GRPCInitialWindowSize int `toml:"grpc-initial-window-size" json:"grpc-initial-window-size"`
// Set maximum message length in bytes that gRPC can send. `-1` means unlimited. The default value is 10MB.
GRPCMaxSendMsgSize int `toml:"grpc-max-send-msg-size" json:"grpc-max-send-msg-size"`
}
// Performance is the performance section of the config.
type Performance struct {
MaxProcs uint `toml:"max-procs" json:"max-procs"`
// Deprecated: use ServerMemoryQuota instead
MaxMemory uint64 `toml:"max-memory" json:"max-memory"`
ServerMemoryQuota uint64 `toml:"server-memory-quota" json:"server-memory-quota"`
StatsLease string `toml:"stats-lease" json:"stats-lease"`
// Deprecated: transaction auto retry is deprecated.
StmtCountLimit uint `toml:"stmt-count-limit" json:"stmt-count-limit"`
PseudoEstimateRatio float64 `toml:"pseudo-estimate-ratio" json:"pseudo-estimate-ratio"`
BindInfoLease string `toml:"bind-info-lease" json:"bind-info-lease"`
TxnEntrySizeLimit uint64 `toml:"txn-entry-size-limit" json:"txn-entry-size-limit"`
TxnTotalSizeLimit uint64 `toml:"txn-total-size-limit" json:"txn-total-size-limit"`
TCPKeepAlive bool `toml:"tcp-keep-alive" json:"tcp-keep-alive"`
TCPNoDelay bool `toml:"tcp-no-delay" json:"tcp-no-delay"`
CrossJoin bool `toml:"cross-join" json:"cross-join"`
DistinctAggPushDown bool `toml:"distinct-agg-push-down" json:"distinct-agg-push-down"`
MaxTxnTTL uint64 `toml:"max-txn-ttl" json:"max-txn-ttl"`
// Deprecated
MemProfileInterval string `toml:"-" json:"-"`
// Deprecated: this config will not have any effect
IndexUsageSyncLease string `toml:"index-usage-sync-lease" json:"index-usage-sync-lease"`
PlanReplayerGCLease string `toml:"plan-replayer-gc-lease" json:"plan-replayer-gc-lease"`
GOGC int `toml:"gogc" json:"gogc"`
EnforceMPP bool `toml:"enforce-mpp" json:"enforce-mpp"`
StatsLoadConcurrency int `toml:"stats-load-concurrency" json:"stats-load-concurrency"`
StatsLoadQueueSize uint `toml:"stats-load-queue-size" json:"stats-load-queue-size"`
// Deprecated: this config has been deprecated. It has no effect.
AnalyzePartitionConcurrencyQuota uint `toml:"analyze-partition-concurrency-quota" json:"analyze-partition-concurrency-quota"`
PlanReplayerDumpWorkerConcurrency uint `toml:"plan-replayer-dump-worker-concurrency" json:"plan-replayer-dump-worker-concurrency"`
EnableStatsCacheMemQuota bool `toml:"enable-stats-cache-mem-quota" json:"enable-stats-cache-mem-quota"`
// The following items are deprecated. We need to keep them here temporarily
// to support the upgrade process. They can be removed in future.
// CommitterConcurrency, RunAutoAnalyze unused since bootstrap v90
CommitterConcurrency int `toml:"committer-concurrency" json:"committer-concurrency"`
RunAutoAnalyze bool `toml:"run-auto-analyze" json:"run-auto-analyze"`
// ForcePriority, MemoryUsageAlarmRatio are deprecated.
ForcePriority string `toml:"force-priority" json:"force-priority"`
MemoryUsageAlarmRatio float64 `toml:"memory-usage-alarm-ratio" json:"memory-usage-alarm-ratio"`
// Deprecated: this config has been deprecated. It has no effect.
EnableLoadFMSketch bool `toml:"enable-load-fmsketch" json:"enable-load-fmsketch"`
// SkipInitStats determines whether to skip initializing statistics when TiDB starts.
// It is primarily intended for internal use cases in TiDB Cloud and may cause issues if enabled on a standard cluster.
// See: https://github.com/pingcap/tidb/issues/63103
SkipInitStats bool `toml:"skip-init-stats" json:"skip-init-stats"`
// LiteInitStats indicates whether to use the lite version of stats.
// 1. Basic stats meta data is loaded.(count, modify count, etc.)
// 2. Column/index stats are loaded. (only histogram)
// 3. TopN, Bucket, FMSketch are not loaded.
// The lite version of stats is enabled by default.
LiteInitStats bool `toml:"lite-init-stats" json:"lite-init-stats"`
// If ForceInitStats is true, when tidb starts up, it doesn't provide service until init stats is finished.
// If ForceInitStats is false, tidb can provide service before init stats is finished. Note that during the period
// of init stats the optimizer may make bad decisions due to pseudo stats.
ForceInitStats bool `toml:"force-init-stats" json:"force-init-stats"`
// Deprecated: This setting has no effect, as stats are now always initialized concurrently.
// ConcurrentlyInitStats indicates whether to use concurrency for initializing stats.
ConcurrentlyInitStats bool `toml:"concurrently-init-stats" json:"concurrently-init-stats"`
// Deprecated: this config will not have any effect
ProjectionPushDown bool `toml:"projection-push-down" json:"projection-push-down"`
// EnableAsyncBatchGet indicates whether to use async API when sending batch-get requests.
EnableAsyncBatchGet bool `toml:"enable-async-batch-get" json:"enable-async-batch-get"`
}
// PlanCache is the PlanCache section of the config.
type PlanCache struct {
Enabled bool `toml:"enabled" json:"enabled"`
Capacity uint `toml:"capacity" json:"capacity"`
Shards uint `toml:"shards" json:"shards"`
}
// PreparedPlanCache is the PreparedPlanCache section of the config.
type PreparedPlanCache struct {
Enabled bool `toml:"enabled" json:"enabled"`
Capacity uint `toml:"capacity" json:"capacity"`
MemoryGuardRatio float64 `toml:"memory-guard-ratio" json:"memory-guard-ratio"`
}
// OpenTracing is the opentracing section of the config.
type OpenTracing struct {
Enable bool `toml:"enable" json:"enable"`
RPCMetrics bool `toml:"rpc-metrics" json:"rpc-metrics"`
Sampler OpenTracingSampler `toml:"sampler" json:"sampler"`
Reporter OpenTracingReporter `toml:"reporter" json:"reporter"`
}
// OpenTracingSampler is the config for opentracing sampler.
// See https://godoc.org/github.com/uber/jaeger-client-go/config#SamplerConfig
type OpenTracingSampler struct {
Type string `toml:"type" json:"type"`
Param float64 `toml:"param" json:"param"`
SamplingServerURL string `toml:"sampling-server-url" json:"sampling-server-url"`
MaxOperations int `toml:"max-operations" json:"max-operations"`
SamplingRefreshInterval time.Duration `toml:"sampling-refresh-interval" json:"sampling-refresh-interval"`
}
// OpenTracingReporter is the config for opentracing reporter.
// See https://godoc.org/github.com/uber/jaeger-client-go/config#ReporterConfig
type OpenTracingReporter struct {
QueueSize int `toml:"queue-size" json:"queue-size"`
BufferFlushInterval time.Duration `toml:"buffer-flush-interval" json:"buffer-flush-interval"`
LogSpans bool `toml:"log-spans" json:"log-spans"`
LocalAgentHostPort string `toml:"local-agent-host-port" json:"local-agent-host-port"`
}
// ProxyProtocol is the PROXY protocol section of the config.
type ProxyProtocol struct {
// PROXY protocol acceptable client networks.
// Empty string means disable PROXY protocol,
// * means all networks.
Networks string `toml:"networks" json:"networks"`
// PROXY protocol header read timeout, Unit is second.
HeaderTimeout uint `toml:"header-timeout" json:"header-timeout"`
// PROXY protocol header process fallback-able.
// If set to true and not send PROXY protocol header, connection will return connection's client IP.
Fallbackable bool `toml:"fallbackable" json:"fallbackable"`
}
// PessimisticTxn is the config for pessimistic transaction.
type PessimisticTxn struct {
// The max count of retry for a single statement in a pessimistic transaction.
MaxRetryCount uint `toml:"max-retry-count" json:"max-retry-count"`
// The max count of deadlock events that will be recorded in the information_schema.deadlocks table.
DeadlockHistoryCapacity uint `toml:"deadlock-history-capacity" json:"deadlock-history-capacity"`
// Whether retryable deadlocks (in-statement deadlocks) are collected to the information_schema.deadlocks table.
DeadlockHistoryCollectRetryable bool `toml:"deadlock-history-collect-retryable" json:"deadlock-history-collect-retryable"`
// PessimisticAutoCommit represents if true it means the auto-commit transactions will be in pessimistic mode.
PessimisticAutoCommit AtomicBool `toml:"pessimistic-auto-commit" json:"pessimistic-auto-commit"`
// ConstraintCheckInPlacePessimistic is the default value for the session variable `tidb_constraint_check_in_place_pessimistic`
ConstraintCheckInPlacePessimistic bool `toml:"constraint-check-in-place-pessimistic" json:"constraint-check-in-place-pessimistic"`
}
// TrxSummary is the config for transaction summary collecting.
type TrxSummary struct {
// how many transaction summary in `transaction_summary` each TiDB node should keep.
TransactionSummaryCapacity uint `toml:"transaction-summary-capacity" json:"transaction-summary-capacity"`
// how long a transaction should be executed to make it be recorded in `transaction_id_digest`.
TransactionIDDigestMinDuration uint `toml:"transaction-id-digest-min-duration" json:"transaction-id-digest-min-duration"`
}
// Valid Validatse TrxSummary configs
func (config *TrxSummary) Valid() error {
if config.TransactionSummaryCapacity > 5000 {
return errors.New("transaction-summary.transaction-summary-capacity should not be larger than 5000")
}
return nil
}
// DefaultPessimisticTxn returns the default configuration for PessimisticTxn
func DefaultPessimisticTxn() PessimisticTxn {
pessimisticAutoCommit := false
if kerneltype.IsNextGen() {
pessimisticAutoCommit = true
}
return PessimisticTxn{
MaxRetryCount: 256,
DeadlockHistoryCapacity: 10,
DeadlockHistoryCollectRetryable: false,
PessimisticAutoCommit: *NewAtomicBool(pessimisticAutoCommit),
ConstraintCheckInPlacePessimistic: true,
}
}
// DefaultTrxSummary returns the default configuration for TrxSummary collector
func DefaultTrxSummary() TrxSummary {
// TrxSummary is not enabled by default before GA
return TrxSummary{
TransactionSummaryCapacity: 500,
TransactionIDDigestMinDuration: 2147483647,
}
}
// Plugin is the config for plugin
type Plugin struct {
Dir string `toml:"dir" json:"dir"`
Load string `toml:"load" json:"load"`
}
// TopSQL is the config for TopSQL.
type TopSQL struct {
// The TopSQL's data receiver address.
ReceiverAddress string `toml:"receiver-address" json:"receiver-address"`
}
// IsolationRead is the config for isolation read.
type IsolationRead struct {
// Engines filters tidb-server access paths by engine type.
Engines []string `toml:"engines" json:"engines"`
}
// Experimental controls the features that are still experimental: their semantics, interfaces are subject to change.
// Using these features in the production environment is not recommended.
type Experimental struct {
// Whether enable creating expression index.
AllowsExpressionIndex bool `toml:"allow-expression-index" json:"allow-expression-index"`
// Whether enable charset feature.
EnableNewCharset bool `toml:"enable-new-charset" json:"-"`
}
// Standby is the config for standby mode.
type Standby struct {
// StandByMode indicates whether to enable the standby mode.
StandByMode bool `toml:"standby-mode" json:"standby-mode"`
// MaxIdleSeconds specifies the maximum idle time in seconds before tidb exits.
MaxIdleSeconds uint `toml:"max-idle-seconds" json:"max-idle-seconds"`
// ActivationTimeout specifies the maximum allowed time for tidb to activate from standby mode.
ActivationTimeout uint `toml:"activation-timeout" json:"activation-timeout"`
// EnableZeroBackend is used to control the behavior of standby idle watcher.
// When it is enabled, the idle watcher will not wait for session migration
// and will not consider client interactive connections.
EnableZeroBackend bool `toml:"enable-zero-backend" json:"enable-zero-backend"`
}
var defTiKVCfg = tikvcfg.DefaultConfig()
var defaultConf = Config{
Host: DefHost,
AdvertiseAddress: "",
Port: DefPort,
Socket: "/tmp/tidb-{Port}.sock",
Cors: "",
Store: StoreTypeUniStore,
Path: "/tmp/tidb",
RunDDL: true,
SplitTable: true,
Lease: DefSchemaLease.String(),
TokenLimit: 1000,
MaxAllowedPacket: DefMaxAllowedPacket,
OOMUseTmpStorage: true,
TempDir: DefTempDir,
TempStorageQuota: -1,
TempStoragePath: tempStorageDirName,
MemQuotaQuery: 1 << 30,
OOMAction: "cancel",
EnableBatchDML: false,
CheckMb4ValueInUTF8: *NewAtomicBool(true),
MaxIndexLength: 3072,
IndexLimit: 64,
TableColumnCountLimit: 1017,
AlterPrimaryKey: false,
TreatOldVersionUTF8AsUTF8MB4: true,
EnableTableLock: false,
DelayCleanTableLock: 0,
SplitRegionMaxNum: 1000,
RepairMode: false,
RepairTableList: []string{},
MaxServerConnections: 0,
TxnLocalLatches: defTiKVCfg.TxnLocalLatches,
GracefulWaitBeforeShutdown: 0,
ServerVersion: "",
TiDBEdition: "",
VersionComment: "",
TiDBReleaseVersion: "",
DeployMode: deploymode.Premium,
DXFResourceLimit: DefDXFResourceLimit,
RUV2: DefaultRUV2Config(),
Log: Log{
Level: "info",
Format: "text",
File: logutil.NewFileLogConfig(logutil.DefaultLogMaxSize),
SlowQueryFile: "tidb-slow.log",
SlowThreshold: logutil.DefaultSlowThreshold,
ExpensiveThreshold: 10000, // ExpensiveThreshold is deprecated.
DisableErrorStack: nbUnset,
EnableErrorStack: nbUnset, // If both options are nbUnset, getDisableErrorStack() returns true
EnableTimestamp: nbUnset,
DisableTimestamp: nbUnset, // If both options are nbUnset, getDisableTimestamp() returns false
QueryLogMaxLen: logutil.DefaultQueryLogMaxLen,
RecordPlanInSlowLog: logutil.DefaultRecordPlanInSlowLog,
EnableSlowLog: *NewAtomicBool(logutil.DefaultTiDBEnableSlowLog),
},
Instance: Instance{
TiDBGeneralLog: false,
EnablePProfSQLCPU: false,
DDLSlowOprThreshold: DefDDLSlowOprThreshold,
ExpensiveQueryTimeThreshold: DefExpensiveQueryTimeThreshold,
ExpensiveTxnTimeThreshold: DefExpensiveTxnTimeThreshold,
StmtSummaryEnablePersistent: false,
StmtSummaryFilename: "tidb-statements.log",
StmtSummaryFileMaxDays: 3,
StmtSummaryFileMaxSize: 64,
StmtSummaryFileMaxBackups: 0,
EnableSlowLog: *NewAtomicBool(logutil.DefaultTiDBEnableSlowLog),
SlowThreshold: logutil.DefaultSlowThreshold,
RecordPlanInSlowLog: logutil.DefaultRecordPlanInSlowLog,
CheckMb4ValueInUTF8: *NewAtomicBool(true),
ForcePriority: "NO_PRIORITY",
MemoryUsageAlarmRatio: DefMemoryUsageAlarmRatio,
EnableCollectExecutionInfo: *NewAtomicBool(true),
PluginDir: "/data/deploy/plugin",
PluginLoad: "",
PluginAuditLogBufferSize: 0,
PluginAuditLogFlushInterval: 30,
MaxConnections: 0,
TiDBEnableDDL: *NewAtomicBool(true),
TiDBEnableStatsOwner: *NewAtomicBool(true),
TiDBRCReadCheckTS: false,
TiDBServiceScope: "",
},
Status: Status{
ReportStatus: true,
StatusHost: DefStatusHost,
StatusPort: DefStatusPort,
MetricsInterval: 15,
RecordQPSbyDB: false,
RecordDBLabel: false,
GRPCKeepAliveTime: 10,
GRPCKeepAliveTimeout: 3,
GRPCConcurrentStreams: 1024,
GRPCInitialWindowSize: 2 * 1024 * 1024,
GRPCMaxSendMsgSize: math.MaxInt32,
},
Performance: Performance{
MaxMemory: 0,
ServerMemoryQuota: 0,
MemoryUsageAlarmRatio: DefMemoryUsageAlarmRatio,
TCPKeepAlive: true,
TCPNoDelay: true,
CrossJoin: true,
StatsLease: "3s",
StmtCountLimit: 5000,
PseudoEstimateRatio: 0.8,
ForcePriority: "NO_PRIORITY",
BindInfoLease: "3s",
TxnEntrySizeLimit: DefTxnEntrySizeLimit,
TxnTotalSizeLimit: DefTxnTotalSizeLimit,
DistinctAggPushDown: false,
ProjectionPushDown: true,
CommitterConcurrency: defTiKVCfg.CommitterConcurrency,
MaxTxnTTL: defTiKVCfg.MaxTxnTTL, // 1hour
GOGC: 100,
EnforceMPP: false,
PlanReplayerGCLease: "10m",
StatsLoadConcurrency: 0, // 0 is auto mode.
StatsLoadQueueSize: 1000,
AnalyzePartitionConcurrencyQuota: 16,
PlanReplayerDumpWorkerConcurrency: 1,
EnableStatsCacheMemQuota: true,
RunAutoAnalyze: true,
EnableLoadFMSketch: false,
SkipInitStats: false,
LiteInitStats: true,
ForceInitStats: true,
// Deprecated: Stats are always initialized concurrently.
ConcurrentlyInitStats: true,
EnableAsyncBatchGet: true,
},
ProxyProtocol: ProxyProtocol{
Networks: "",
HeaderTimeout: 5,
Fallbackable: true,
},
PreparedPlanCache: PreparedPlanCache{
Enabled: true,
Capacity: 100,
MemoryGuardRatio: 0.1,
},
OpenTracing: OpenTracing{
Enable: false,
Sampler: OpenTracingSampler{
Type: "const",
Param: 1.0,
},
Reporter: OpenTracingReporter{},
},
PDClient: defTiKVCfg.PDClient,
TiKVClient: defTiKVCfg.TiKVClient,
Plugin: Plugin{
Dir: "/data/deploy/plugin",
Load: "",
},
PessimisticTxn: DefaultPessimisticTxn(),
IsolationRead: IsolationRead{
Engines: []string{"tikv", "tiflash", "tidb"},
},
Experimental: Experimental{},
EnableCollectExecutionInfo: true,
EnableTelemetry: false,
Labels: make(map[string]string),
EnableGlobalIndex: false,
Security: Security{
SpilledFileEncryptionMethod: SpilledFileEncryptionMethodPlaintext,
EnableSEM: false,
SEMConfig: "",
AutoTLS: false,
RSAKeySize: 4096,
AuthTokenJWKS: "",
AuthTokenRefreshInterval: DefAuthTokenRefreshInterval.String(),
DisconnectOnExpiredPassword: true,
},
DeprecateIntegerDisplayWidth: true,
EnableEnumLengthLimit: true,
StoresRefreshInterval: defTiKVCfg.StoresRefreshInterval,
EnableForwarding: defTiKVCfg.EnableForwarding,
NewCollationsEnabledOnFirstBootstrap: true,
EnableGlobalKill: true,
Enable32BitsConnectionID: true,
TrxSummary: DefaultTrxSummary(),
DisaggregatedTiFlash: false,
TiFlashComputeAutoScalerType: DefASStr,
TiFlashComputeAutoScalerAddr: DefAWSAutoScalerAddr,
IsTiFlashComputeFixedPool: false,
AutoScalerClusterID: "",
UseAutoScaler: false,
TiDBMaxReuseChunk: 64,
TiDBMaxReuseColumn: 256,
TiDBEnableExitCheck: false,
InMemSlowQueryTopNNum: 30,
InMemSlowQueryRecentNum: 500,
}
var (
globalConf atomic.Pointer[Config]
)
// NewConfig creates a new config instance with default value.
func NewConfig() *Config {
conf := defaultConf
return &conf
}
// GetGlobalConfig returns the global configuration for this server.
// It should store configuration from command line and configuration file.
// Other parts of the system can read the global configuration use this function.
func GetGlobalConfig() *Config {
return globalConf.Load()
}
// StoreGlobalConfig stores a new config to the globalConf. It mostly uses in the test to avoid some data races.
func StoreGlobalConfig(config *Config) {
globalConf.Store(config)
TikvConfigLock.Lock()
defer TikvConfigLock.Unlock()
cfg := *config.GetTiKVConfig()
tikvcfg.StoreGlobalConfig(&cfg)
}
// removedConfig contains items that are no longer supported.
// they might still be in the config struct to support import,
// but are not actively used.
var removedConfig = map[string]struct{}{
"pessimistic-txn.ttl": {},
"pessimistic-txn.enable": {},
"log.file.log-rotate": {},
"log.log-slow-query": {},
"txn-local-latches": {},
"txn-local-latches.enabled": {},
"txn-local-latches.capacity": {},
"performance.max-memory": {},
"max-txn-time-use": {},
"experimental.allow-auto-random": {},
"enable-redact-log": {}, // use variable tidb_redact_log instead
"enable-streaming": {},
"performance.mem-profile-interval": {},
"security.require-secure-transport": {},
"lower-case-table-names": {},
"stmt-summary": {},
"stmt-summary.enable": {},
"stmt-summary.enable-internal-query": {},
"stmt-summary.max-stmt-count": {},
"stmt-summary.max-sql-length": {},
"stmt-summary.refresh-interval": {},
"stmt-summary.history-size": {},
"enable-batch-dml": {}, // use tidb_enable_batch_dml
"mem-quota-query": {},
"log.query-log-max-len": {},
"performance.committer-concurrency": {},
"experimental.enable-global-kill": {},
"performance.run-auto-analyze": {}, // use tidb_enable_auto_analyze
// use tidb_enable_prepared_plan_cache, tidb_prepared_plan_cache_size and tidb_prepared_plan_cache_memory_guard_ratio
"prepared-plan-cache.enabled": {},
"prepared-plan-cache.capacity": {},
"prepared-plan-cache.memory-guard-ratio": {},
"oom-action": {},
"check-mb4-value-in-utf8": {}, // use tidb_check_mb4_value_in_utf8
"enable-collect-execution-info": {}, // use tidb_enable_collect_execution_info
"log.enable-slow-log": {}, // use tidb_enable_slow_log
"log.slow-threshold": {}, // use tidb_slow_log_threshold
"log.record-plan-in-slow-log": {}, // use tidb_record_plan_in_slow_log
"log.expensive-threshold": {},
"performance.force-priority": {}, // use tidb_force_priority
"performance.memory-usage-alarm-ratio": {}, // use tidb_memory_usage_alarm_ratio
"plugin.load": {}, // use plugin_load
"plugin.dir": {}, // use plugin_dir
"performance.feedback-probability": {}, // This feature is deprecated
"performance.query-feedback-limit": {},
"oom-use-tmp-storage": {}, // use tidb_enable_tmp_storage_on_oom
"max-server-connections": {}, // use sysvar max_connections
"run-ddl": {}, // use sysvar tidb_enable_ddl
"instance.tidb_memory_usage_alarm_ratio": {}, // use sysvar tidb_memory_usage_alarm_ratio
"enable-global-index": {}, // use sysvar tidb_enable_global_index
}
// isAllRemovedConfigItems returns true if all the items that couldn't validate
// belong to the list of removedConfig items.
func isAllRemovedConfigItems(items []string) bool {
for _, item := range items {
if _, ok := removedConfig[item]; !ok {
return false
}
}
return true
}
// InitializeConfig initialize the global config handler.
// The function enforceCmdArgs is used to merge the config file with command arguments:
// For example, if you start TiDB by the command "./tidb-server --port=3000", the port number should be
// overwritten to 3000 and ignore the port number in the config file.
func InitializeConfig(confPath string, configCheck, configStrict bool, enforceCmdArgs func(*Config, *flag.FlagSet), fset *flag.FlagSet) {
cfg := GetGlobalConfig()
var err error
if confPath != "" {
if err = cfg.Load(confPath); err != nil {
// Unused config item error turns to warnings.
if tmp, ok := err.(*ErrConfigValidationFailed); ok {
// This block is to accommodate an interim situation where strict config checking
// is not the default behavior of TiDB. The warning message must be deferred until
// logging has been set up. After strict config checking is the default behavior,
// This should all be removed.
if (!configCheck && !configStrict) || isAllRemovedConfigItems(tmp.UndecodedItems) {
fmt.Fprintln(os.Stderr, err.Error())
err = nil
}
} else if tmp, ok := err.(*ErrConfigInstanceSection); ok {
logutil.BgLogger().Warn(tmp.Error())
err = nil
}
}
// In configCheck we always print out which options in the config file
// have been removed. This helps users upgrade better.
if configCheck {
err = cfg.RemovedVariableCheck(confPath)
if err != nil {
logutil.BgLogger().Warn(err.Error())
err = nil // treat as warning
}
}
terror.MustNil(err)
} else {
// configCheck should have the config file specified.
if configCheck {
fmt.Fprintln(os.Stderr, "config check failed", errors.New("no config file specified for config-check"))
os.Exit(1)
}
}
enforceCmdArgs(cfg, fset)
if err := cfg.Valid(); err != nil {
if !filepath.IsAbs(confPath) {
if tmp, err := filepath.Abs(confPath); err == nil {
confPath = tmp
}
}
fmt.Fprintln(os.Stderr, "load config file:", confPath)
fmt.Fprintln(os.Stderr, "invalid config", err)
os.Exit(1)
}
if err := cfg.AdjustStarterConfig(cfg.DeployMode == deploymode.Starter); err != nil {
fmt.Fprintln(os.Stderr, "invalid security env vars", err)
os.Exit(1)
}
if configCheck {
fmt.Println("config check successful")
os.Exit(0)
}
StoreGlobalConfig(cfg)
}
// AdjustStarterConfig applies starter-only security overrides.
func (c *Config) AdjustStarterConfig(isStarter bool) error {
if !isStarter {
return nil
}
return c.adjustSecurityConfig()
}
func (c *Config) adjustSecurityConfig() error {
clusterCAPath := os.Getenv(EnvClusterCA)
clusterCertPath := os.Getenv(EnvClusterCert)
clusterKeyPath := os.Getenv(EnvClusterKey)
clusterCAOverridden := len(clusterCAPath) > 0
clusterCertOverridden := len(clusterCertPath) > 0
clusterKeyOverridden := len(clusterKeyPath) > 0
if len(clusterCAPath) > 0 {
c.Security.ClusterSSLCA = clusterCAPath
}
if len(clusterCertPath) > 0 {
c.Security.ClusterSSLCert = clusterCertPath
}
if len(clusterKeyPath) > 0 {
c.Security.ClusterSSLKey = clusterKeyPath
}
if clusterCAOverridden || clusterCertOverridden || clusterKeyOverridden {
if clusterCertOverridden != clusterKeyOverridden {
return errors.New("CLUSTER_CERT and CLUSTER_KEY must be set together")
}
if len(c.Security.ClusterSSLCA) > 0 && (len(c.Security.ClusterSSLCert) == 0 || len(c.Security.ClusterSSLKey) == 0) {
return errors.New("both CLUSTER_CERT and CLUSTER_KEY must be set when CLUSTER_CA is set")
}
}
sqlCAPath := os.Getenv(EnvSQLCA)
sqlCertPath := os.Getenv(EnvSQLCert)
sqlKeyPath := os.Getenv(EnvSQLKey)
sqlCAOverridden := len(sqlCAPath) > 0
sqlCertOverridden := len(sqlCertPath) > 0
sqlKeyOverridden := len(sqlKeyPath) > 0
if len(sqlCAPath) > 0 {
c.Security.SSLCA = sqlCAPath
}
if len(sqlCertPath) > 0 {
c.Security.SSLCert = sqlCertPath
}
if len(sqlKeyPath) > 0 {
c.Security.SSLKey = sqlKeyPath
}
if sqlCAOverridden || sqlCertOverridden || sqlKeyOverridden {
if sqlCertOverridden != sqlKeyOverridden {
return errors.New("SQL_CERT and SQL_KEY must be set together")
}
if len(c.Security.SSLCA) > 0 && (len(c.Security.SSLCert) == 0 || len(c.Security.SSLKey) == 0) {
return errors.New("both SQL_CERT and SQL_KEY must be set when SQL_CA is set")
}
}
return nil
}
// RemovedVariableCheck checks if the config file contains any items
// which have been removed. These will not take effect any more.
func (c *Config) RemovedVariableCheck(confFile string) error {
metaData, err := toml.DecodeFile(confFile, c)
if err != nil {
return err
}
var removed []string
for item := range removedConfig {
// We need to split the string to account for the top level
// and the section hierarchy of config.
tmp := strings.Split(item, ".")
if len(tmp) == 2 && metaData.IsDefined(tmp[0], tmp[1]) {
removed = append(removed, item)
} else if len(tmp) == 1 && metaData.IsDefined(tmp[0]) {
removed = append(removed, item)
}
}
if len(removed) > 0 {
sort.Strings(removed) // deterministic for tests
return fmt.Errorf("The following configuration options are no longer supported in this version of TiDB. Check the release notes for more information: %s", strings.Join(removed, ", "))
}
return nil
}
// Load loads config options from a toml file.
func (c *Config) Load(confFile string) error {
metaData, err := toml.DecodeFile(confFile, c)
if err != nil {
return err
}
if !kerneltype.IsNextGen() && metaData.IsDefined("deploy-mode") {
return fmt.Errorf("deploy-mode can only be configured for nextgen TiDB")
}
dxfResourceLimitDefined := metaData.IsDefined("dxf-resource-limit")
if !dxfResourceLimitDefined && c.DXFResourceLimit == 0 {
c.DXFResourceLimit = DefDXFResourceLimit
}
if dxfResourceLimitDefined && c.DeployMode != deploymode.PremiumReserved {
return fmt.Errorf("dxf-resource-limit can only be configured when deploy-mode is premium_reserved")
}
if c.DeployMode == deploymode.Starter && !metaData.IsDefined("standby", "enable-zero-backend") {
c.Standby.EnableZeroBackend = true
}
if c.TokenLimit == 0 {
c.TokenLimit = 1000
} else if c.TokenLimit > MaxTokenLimit {
c.TokenLimit = MaxTokenLimit
}
// If any items in confFile file are not mapped into the Config struct, issue
// an error and stop the server from starting.
undecoded := metaData.Undecoded()
if len(undecoded) > 0 {
var undecodedItems []string
for _, item := range undecoded {
undecodedItems = append(undecodedItems, item.String())
}
err = &ErrConfigValidationFailed{confFile, undecodedItems}
}
for _, section := range sectionMovedToInstance {
newConflictSection := InstanceConfigSection{SectionName: section.SectionName, NameMappings: map[string]string{}}
newDeprecatedSection := InstanceConfigSection{SectionName: section.SectionName, NameMappings: map[string]string{}}
for oldName, newName := range section.NameMappings {
if section.SectionName == "" && metaData.IsDefined(oldName) ||
section.SectionName != "" && metaData.IsDefined(section.SectionName, oldName) {
if metaData.IsDefined("instance", newName) {
newConflictSection.NameMappings[oldName] = newName
} else {
newDeprecatedSection.NameMappings[oldName] = newName
}
}
}
if len(newConflictSection.NameMappings) > 0 {
ConflictOptions = append(ConflictOptions, newConflictSection)
}
if len(newDeprecatedSection.NameMappings) > 0 {
DeprecatedOptions = append(DeprecatedOptions, newDeprecatedSection)
}
}
if len(ConflictOptions) > 0 || len(DeprecatedOptions) > 0 {
// Give a warning that the 'instance' section should be used.
err = &ErrConfigInstanceSection{confFile, &ConflictOptions, &DeprecatedOptions}
}
return err
}
// Valid checks if this config is valid.
func (c *Config) Valid() error {
if err := naming.CheckKeyspaceName(c.KeyspaceName); err != nil {
return errors.Annotate(err, "invalid keyspace name")
}
if c.Log.EnableErrorStack == c.Log.DisableErrorStack && c.Log.EnableErrorStack != nbUnset {
logutil.BgLogger().Warn(fmt.Sprintf("\"enable-error-stack\" (%v) conflicts \"disable-error-stack\" (%v). \"disable-error-stack\" is deprecated, please use \"enable-error-stack\" instead. disable-error-stack is ignored.", c.Log.EnableErrorStack, c.Log.DisableErrorStack))
// if two options conflict, we will use the value of EnableErrorStack
c.Log.DisableErrorStack = nbUnset
}
if c.Log.EnableTimestamp == c.Log.DisableTimestamp && c.Log.EnableTimestamp != nbUnset {
logutil.BgLogger().Warn(fmt.Sprintf("\"enable-timestamp\" (%v) conflicts \"disable-timestamp\" (%v). \"disable-timestamp\" is deprecated, please use \"enable-timestamp\" instead", c.Log.EnableTimestamp, c.Log.DisableTimestamp))
// if two options conflict, we will use the value of EnableTimestamp
c.Log.DisableTimestamp = nbUnset
}
if c.Security.SkipGrantTable && !hasRootPrivilege() {
return fmt.Errorf("TiDB run with skip-grant-table need root privilege")
}
if !c.Store.Valid() {
return fmt.Errorf("invalid store=%s, valid storages=%v", c.Store, StoreTypeList())
}
if !c.DeployMode.Valid() {
return fmt.Errorf("invalid deploy-mode=%s, valid deploy modes=%v", c.DeployMode, deploymode.ModeList())
}
if !kerneltype.IsNextGen() && c.DeployMode != deploymode.Premium {
return fmt.Errorf("deploy-mode can only be configured for nextgen TiDB")
}
if c.DXFResourceLimit < MinDXFResourceLimit || c.DXFResourceLimit > MaxDXFResourceLimit {
return fmt.Errorf("dxf-resource-limit should be between %d and %d", MinDXFResourceLimit, MaxDXFResourceLimit)
}
if c.DXFResourceLimit != DefDXFResourceLimit && c.DeployMode != deploymode.PremiumReserved {
return fmt.Errorf("dxf-resource-limit can only be configured when deploy-mode is premium_reserved")
}
if c.DeployMode == deploymode.Starter && !validMaxAllowedPacket(c.MaxAllowedPacket) {
return fmt.Errorf("max-allowed-packet should be [%d, %d] and a multiple of %d", minMaxAllowedPacket, maxOfMaxAllowedPacket, maxAllowedPacketUnit)
}
if c.Store == StoreTypeMockTiKV && !c.Instance.TiDBEnableDDL.Load() {
return fmt.Errorf("can't disable DDL on mocktikv")
}
if c.MaxIndexLength < DefMaxIndexLength || c.MaxIndexLength > DefMaxOfMaxIndexLength {
return fmt.Errorf("max-index-length should be [%d, %d]", DefMaxIndexLength, DefMaxOfMaxIndexLength)
}
if c.IndexLimit < DefIndexLimit || c.IndexLimit > DefMaxOfIndexLimit {
return fmt.Errorf("index-limit should be [%d, %d]", DefIndexLimit, DefMaxOfIndexLimit)
}
if c.Log.File.MaxSize > MaxLogFileSize {
return fmt.Errorf("invalid max log file size=%v which is larger than max=%v", c.Log.File.MaxSize, MaxLogFileSize)
}
if c.TableColumnCountLimit < DefTableColumnCountLimit || c.TableColumnCountLimit > DefMaxOfTableColumnCountLimit {
return fmt.Errorf("table-column-limit should be [%d, %d]", DefIndexLimit, DefMaxOfTableColumnCountLimit)
}
if c.Instance.PluginAuditLogBufferSize < 0 || c.Instance.PluginAuditLogBufferSize > MaxPluginAuditLogBufferSize {
return fmt.Errorf("plugin-audit-log-buffer-size should be [%d, %d]", 0, MaxPluginAuditLogBufferSize)
}
if c.Instance.PluginAuditLogFlushInterval <= 0 || c.Instance.PluginAuditLogFlushInterval > MaxPluginAuditLogFlushInterval {
return fmt.Errorf("plugin-audit-log-flush-interval should be [%d, %d]", 1, MaxPluginAuditLogFlushInterval)
}
// txn-local-latches
if err := c.TxnLocalLatches.Valid(); err != nil {
return err
}
// pd-client
if err := c.PDClient.Valid(); err != nil {
return err
}
// For tikvclient.
if err := c.TiKVClient.Valid(); err != nil {
return err
}
if err := c.TrxSummary.Valid(); err != nil {
return err
}
if c.Performance.TxnTotalSizeLimit > 1<<40 {
return fmt.Errorf("txn-total-size-limit should be less than %d", 1<<40)
}
if c.Instance.MemoryUsageAlarmRatio > 1 || c.Instance.MemoryUsageAlarmRatio < 0 {
return fmt.Errorf("tidb_memory_usage_alarm_ratio in [Instance] must be greater than or equal to 0 and less than or equal to 1")
}
if len(c.IsolationRead.Engines) < 1 {
return fmt.Errorf("the number of [isolation-read]engines for isolation read should be at least 1")
}
for _, engine := range c.IsolationRead.Engines {
if engine != "tidb" && engine != "tikv" && engine != "tiflash" {
return fmt.Errorf("type of [isolation-read]engines can't be %v should be one of tidb or tikv or tiflash", engine)
}
}
// test security
c.Security.SpilledFileEncryptionMethod = strings.ToLower(c.Security.SpilledFileEncryptionMethod)
switch c.Security.SpilledFileEncryptionMethod {
case SpilledFileEncryptionMethodPlaintext, SpilledFileEncryptionMethodAES128CTR:
default:
return fmt.Errorf("unsupported [security]spilled-file-encryption-method %v, TiDB only supports [%v, %v]",
c.Security.SpilledFileEncryptionMethod, SpilledFileEncryptionMethodPlaintext, SpilledFileEncryptionMethodAES128CTR)
}
// check stats load config
if c.Performance.StatsLoadConcurrency < DefStatsLoadConcurrencyLimit || c.Performance.StatsLoadConcurrency > DefMaxOfStatsLoadConcurrencyLimit {
return fmt.Errorf("stats-load-concurrency should be [%d, %d]", DefStatsLoadConcurrencyLimit, DefMaxOfStatsLoadConcurrencyLimit)
}
if c.Performance.StatsLoadQueueSize < DefStatsLoadQueueSizeLimit || c.Performance.StatsLoadQueueSize > DefMaxOfStatsLoadQueueSizeLimit {
return fmt.Errorf("stats-load-queue-size should be [%d, %d]", DefStatsLoadQueueSizeLimit, DefMaxOfStatsLoadQueueSizeLimit)
}
// Check tiflash_compute topo fetch is valid.
if c.DisaggregatedTiFlash && c.UseAutoScaler {
if !IsValidAutoScalerConfig(c.TiFlashComputeAutoScalerType) {
return fmt.Errorf("invalid AutoScaler type, expect %s, %s or %s, got %s",
MockASStr, AWSASStr, GCPASStr, c.TiFlashComputeAutoScalerType)
}
if c.TiFlashComputeAutoScalerAddr == "" {
return fmt.Errorf("autoscaler-addr cannot be empty when disaggregated-tiflash mode is true")
}
}
// test log level
l := zap.NewAtomicLevel()
return l.UnmarshalText([]byte(c.Log.Level))
}
// UpdateGlobal updates the global config, and provide a restore function that can be used to restore to the original.
func UpdateGlobal(f func(conf *Config)) {
g := GetGlobalConfig()
newConf := *g
f(&newConf)
StoreGlobalConfig(&newConf)
}
// RestoreFunc gets a function that restore the config to the current value.
func RestoreFunc() (restore func()) {
g := GetGlobalConfig()
return func() {
StoreGlobalConfig(g)
}
}
func hasRootPrivilege() bool {
return os.Geteuid() == 0
}
// TableLockEnabled uses to check whether enabled the table lock feature.
func TableLockEnabled() bool {
return GetGlobalConfig().EnableTableLock
}
// TableLockDelayClean uses to get the time of delay clean table lock.
var TableLockDelayClean = func() uint64 {
return GetGlobalConfig().DelayCleanTableLock
}
// ToLogConfig converts *Log to *logutil.LogConfig.
func (l *Log) ToLogConfig() *logutil.LogConfig {
return logutil.NewLogConfig(l.Level, l.Format, l.SlowQueryFile, l.GeneralLogFile, l.File, l.getDisableTimestamp(),
func(config *zaplog.Config) { config.DisableErrorVerbose = l.getDisableErrorStack() },
func(config *zaplog.Config) { config.Timeout = l.Timeout },
)
}
// ToTracingConfig converts *OpenTracing to *tracing.Configuration.
func (t *OpenTracing) ToTracingConfig() *tracing.Configuration {
ret := &tracing.Configuration{
Disabled: !t.Enable,
RPCMetrics: t.RPCMetrics,
Reporter: &tracing.ReporterConfig{},
Sampler: &tracing.SamplerConfig{},
}
ret.Reporter.QueueSize = t.Reporter.QueueSize
ret.Reporter.BufferFlushInterval = t.Reporter.BufferFlushInterval
ret.Reporter.LogSpans = t.Reporter.LogSpans
ret.Reporter.LocalAgentHostPort = t.Reporter.LocalAgentHostPort
ret.Sampler.Type = t.Sampler.Type
ret.Sampler.Param = t.Sampler.Param
ret.Sampler.SamplingServerURL = t.Sampler.SamplingServerURL
ret.Sampler.MaxOperations = t.Sampler.MaxOperations
ret.Sampler.SamplingRefreshInterval = t.Sampler.SamplingRefreshInterval
return ret
}
func init() {
initByLDFlags(versioninfo.TiDBEdition, checkBeforeDropLDFlag)
}
func initByLDFlags(edition, checkBeforeDropLDFlag string) {
conf := defaultConf
if intest.InTest && kerneltype.IsNextGen() {
// In test mode, without reading a config file, we still assume the `GetGlobalConfig()` returns
// a valid config file. However, the "valid" nextgen config file should always have a keyspace name.
// So we set the keyspace name to "SYSTEM" here for test.
//
// Didn't use `keyspace.SYSTEM` to avoid cyclic dependency.
conf.KeyspaceName = "SYSTEM"
}
StoreGlobalConfig(&conf)
if checkBeforeDropLDFlag == "1" {
CheckTableBeforeDrop = true
}
}
// hideConfig is used to filter a single line of config for hiding.
var hideConfig = []string{
"performance.index-usage-sync-lease",
}
// GetJSONConfig returns the config as JSON with hidden items removed
// It replaces the earlier HideConfig() which used strings.Split() in
// an way that didn't work for similarly named items (like enable).
func GetJSONConfig() (string, error) {
j, err := json.Marshal(GetGlobalConfig())
if err != nil {
return "", err
}
jsonValue := make(map[string]any)
err = json.Unmarshal(j, &jsonValue)
if err != nil {
return "", err
}
removedPaths := make([]string, 0, len(removedConfig)+len(hideConfig))
for removedItem := range removedConfig {
removedPaths = append(removedPaths, removedItem)
}
removedPaths = append(removedPaths, hideConfig...)
for _, path := range removedPaths {
s := strings.Split(path, ".")
curValue := jsonValue
for i, key := range s {
if i == len(s)-1 {
delete(curValue, key)
}
if curValue[key] == nil {
break
}
mapValue, ok := curValue[key].(map[string]any)
if !ok {
break
}
curValue = mapValue
}
}
buf, err := json.Marshal(jsonValue)
if err != nil {
return "", err
}
var resBuf bytes.Buffer
if err = json.Indent(&resBuf, buf, "", "\t"); err != nil {
return "", err
}
return resBuf.String(), nil
}
// ContainHiddenConfig checks whether it contains the configuration that needs to be hidden.
func ContainHiddenConfig(s string) bool {
s = strings.ToLower(s)
for _, hc := range hideConfig {
if strings.Contains(s, hc) {
return true
}
}
for dc := range removedConfig {
if strings.Contains(s, dc) {
return true
}
}
return false
}
// GetGlobalKeyspaceName is used to get global keyspace name
// from config file or command line.
func GetGlobalKeyspaceName() string {
return GetGlobalConfig().KeyspaceName
}
// GetMaxAllowedPacket returns the max_allowed_packet value used to initialize sessions.
// The config value is honored only for starter deployment mode.
func GetMaxAllowedPacket() uint64 {
if deploymode.IsStarter() {
if v := GetGlobalConfig().MaxAllowedPacket; validMaxAllowedPacket(v) {
return v
}
}
return DefMaxAllowedPacket
}
func validMaxAllowedPacket(v uint64) bool {
return v >= minMaxAllowedPacket && v <= maxOfMaxAllowedPacket && v%maxAllowedPacketUnit == 0
}
// Copyright 2020 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package config
import (
"encoding/json"
"reflect"
tikvcfg "github.com/tikv/client-go/v2/config"
)
// CloneConf deeply clones this config.
func CloneConf(conf *Config) (*Config, error) {
content, err := json.Marshal(conf)
if err != nil {
return nil, err
}
var clonedConf Config
if err := json.Unmarshal(content, &clonedConf); err != nil {
return nil, err
}
return &clonedConf, nil
}
var (
// dynamicConfigItems contains all config items that can be changed during runtime.
dynamicConfigItems = map[string]struct{}{
"Performance.MaxProcs": {},
"Performance.MaxMemory": {},
"Performance.CrossJoin": {},
"Performance.PseudoEstimateRatio": {},
"Performance.StmtCountLimit": {},
"Performance.TCPKeepAlive": {},
"TiKVClient.StoreLimit": {},
"Log.Level": {},
"Log.ExpensiveThreshold": {},
"Instance.SlowThreshold": {},
"Instance.CheckMb4ValueInUTF8": {},
"TxnLocalLatches.Capacity": {},
"CompatibleKillQuery": {},
"TreatOldVersionUTF8AsUTF8MB4": {},
"OpenTracing.Enable": {},
}
)
// MergeConfigItems overwrites the dynamic config items and leaves the other items unchanged.
func MergeConfigItems(dstConf, newConf *Config) (acceptedItems, rejectedItems []string) {
return mergeConfigItems(reflect.ValueOf(dstConf), reflect.ValueOf(newConf), "")
}
func mergeConfigItems(dstConf, newConf reflect.Value, fieldPath string) (acceptedItems, rejectedItems []string) {
t := dstConf.Type()
if t.Name() == "AtomicBool" {
if reflect.DeepEqual(dstConf.Interface().(AtomicBool), newConf.Interface().(AtomicBool)) {
return
}
if _, ok := dynamicConfigItems[fieldPath]; ok {
dstConf.Set(newConf)
return []string{fieldPath}, nil
}
return nil, []string{fieldPath}
}
if t.Kind() == reflect.Ptr {
t = t.Elem()
dstConf = dstConf.Elem()
newConf = newConf.Elem()
}
if t.Kind() != reflect.Struct {
if reflect.DeepEqual(dstConf.Interface(), newConf.Interface()) {
return
}
if _, ok := dynamicConfigItems[fieldPath]; ok {
dstConf.Set(newConf)
return []string{fieldPath}, nil
}
return nil, []string{fieldPath}
}
for i := range t.NumField() {
fieldName := t.Field(i).Name
if fieldPath != "" {
fieldName = fieldPath + "." + fieldName
}
as, rs := mergeConfigItems(dstConf.Field(i), newConf.Field(i), fieldName)
acceptedItems = append(acceptedItems, as...)
rejectedItems = append(rejectedItems, rs...)
}
return
}
// ConfReloadFunc is used to reload the config to make it work.
type ConfReloadFunc func(oldConf, newConf *Config)
// FlattenConfigItems flatten this config, see more cases in the test.
func FlattenConfigItems(nestedConfig map[string]any) map[string]any {
flatMap := make(map[string]any)
flatten(flatMap, nestedConfig, "")
return flatMap
}
func flatten(flatMap map[string]any, nested any, prefix string) {
switch nested := nested.(type) {
case map[string]any:
for k, v := range nested {
path := k
if prefix != "" {
path = prefix + "." + k
}
flatten(flatMap, v, path)
}
default: // don't flatten arrays
flatMap[prefix] = nested
}
}
// GetTxnScopeFromConfig extracts @@txn_scope value from the config.
func GetTxnScopeFromConfig() string {
return tikvcfg.GetTxnScopeFromConfig()
}
// Copyright 2026 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package deploymode
import (
"encoding/json"
"fmt"
"strings"
"sync/atomic"
"github.com/pingcap/tidb/pkg/config/kerneltype"
)
const (
premiumName = "premium"
premiumReservedName = "premium_reserved"
starterName = "starter"
)
// Mode is the deployment mode of the TiDB instance. It is only allowed when
// kerneltype.IsNextGen returns true.
type Mode int32
const (
// Premium is the default deployment mode.
Premium Mode = iota
// PremiumReserved is the reserved premium deployment mode. In Premium Reserved,
// resources are fixed when the cluster starts. TiDB-worker, TiKV-worker, and
// coprocessor-worker are not scaled on demand.
PremiumReserved
// Starter is for deployments that support a large number of small tenants.
Starter
)
var currentMode atomic.Int32
// Get returns the current deployment mode.
func Get() Mode {
return Mode(currentMode.Load())
}
// IsPremiumReserved returns true if the current deployment mode is PremiumReserved.
func IsPremiumReserved() bool {
return kerneltype.IsNextGen() && Get() == PremiumReserved
}
// IsStarter returns true if the current deployment mode is Starter.
func IsStarter() bool {
return kerneltype.IsNextGen() && Get() == Starter
}
// Set sets the current deployment mode during TiDB startup.
//
// The deployment mode cannot be changed after it is set.
func Set(mode Mode) error {
if !kerneltype.IsNextGen() {
return fmt.Errorf("deploy mode can only be set for nextgen TiDB")
}
if !mode.Valid() {
return fmt.Errorf("invalid deploy mode %d", mode)
}
currentMode.Store(int32(mode))
return nil
}
// Parse returns the deployment mode for the given string.
func Parse(s string) (Mode, error) {
switch strings.ToLower(s) {
case premiumName:
return Premium, nil
case premiumReservedName:
return PremiumReserved, nil
case starterName:
return Starter, nil
default:
return Premium, fmt.Errorf("invalid deploy mode %q", s)
}
}
// String returns the string representation of the deployment mode.
func (m Mode) String() string {
switch m {
case Premium:
return premiumName
case PremiumReserved:
return premiumReservedName
case Starter:
return starterName
default:
return fmt.Sprintf("unknown(%d)", m)
}
}
// Valid returns true if the deployment mode is valid.
func (m Mode) Valid() bool {
switch m {
case Premium, PremiumReserved, Starter:
return true
default:
return false
}
}
// ModeList returns all valid deployment modes.
func ModeList() []Mode {
return []Mode{Premium, PremiumReserved, Starter}
}
// MarshalJSON implements json.Marshaler.
func (m Mode) MarshalJSON() ([]byte, error) {
if !m.Valid() {
return nil, fmt.Errorf("invalid deploy mode %d", m)
}
return json.Marshal(m.String())
}
// UnmarshalJSON implements json.Unmarshaler.
func (m *Mode) UnmarshalJSON(data []byte) error {
var s string
if err := json.Unmarshal(data, &s); err != nil {
return err
}
mode, err := Parse(s)
if err != nil {
return err
}
*m = mode
return nil
}
// UnmarshalTOML implements toml.Unmarshaler.
func (m *Mode) UnmarshalTOML(v any) error {
s, ok := v.(string)
if !ok {
return fmt.Errorf("invalid deploy mode %v", v)
}
mode, err := Parse(s)
if err != nil {
return err
}
*m = mode
return nil
}
// Copyright 2025 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//go:build !nextgen
package kerneltype
// IsNextGen returns true if the current kernel type is NextGen.
// see doc.go for more info.
func IsNextGen() bool {
return false
}
// IsClassic returns true if the current kernel type is Classic.
func IsClassic() bool {
return !IsNextGen()
}
// Copyright 2025 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package kerneltype
const (
classicKernelName = "Classic"
nextgenKernelName = "Next Generation"
)
// IsMatch checks if the given PD kernel type matches current instance.
// PD defines the kernel type name in the same wey as TiDB does, might we can unify
// them in the future. see:
// https://github.com/tikv/pd/blob/29ead019cd0982a3120bc79d4a4d19199dab2279/pkg/versioninfo/kerneltype/nextgen.go#L25
// https://github.com/tikv/pd/blob/29ead019cd0982a3120bc79d4a4d19199dab2279/pkg/versioninfo/kerneltype/classic.go#L25
func IsMatch(pdKernelType string) bool {
if pdKernelType == "" {
// old PD versions do not have kernel type defined, we will take it as classic.
return classicKernelName == Name()
}
return pdKernelType == Name()
}
// Name returns the name of the current kernel type.
func Name() string {
if IsNextGen() {
return nextgenKernelName
}
return classicKernelName
}
// Copyright 2024 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package config
// StoreType is the type of storage.
// TODO maybe put it inside pkg/store, but it introduces a cycle import.
type StoreType string
const (
// StoreTypeTiKV is TiKV type. the underlying storage engines might be one or
// multiple of TiKV/TiFlash/TiDB, see kv.StoreType for more details.
StoreTypeTiKV StoreType = "tikv"
// StoreTypeUniStore is UniStore type which we implemented using badger, for test only.
StoreTypeUniStore StoreType = "unistore"
// StoreTypeMockTiKV is MockTiKV type which we implemented using goleveldb, for test only.
StoreTypeMockTiKV StoreType = "mocktikv"
)
// String implements fmt.Stringer interface.
func (t StoreType) String() string {
return string(t)
}
// Valid returns true if the storage type is valid.
func (t StoreType) Valid() bool {
switch t {
case StoreTypeTiKV, StoreTypeUniStore, StoreTypeMockTiKV:
return true
}
return false
}
// StoreTypeList returns all valid storage types.
func StoreTypeList() []StoreType {
return []StoreType{StoreTypeTiKV, StoreTypeUniStore, StoreTypeMockTiKV}
}
// Copyright 2025 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package config
const (
// MockASStr is string value for mock AutoScaler.
MockASStr = "mock"
// AWSASStr is string value for aws AutoScaler.
AWSASStr = "aws"
// GCPASStr is string value for gcp AutoScaler.
GCPASStr = "gcp"
// TestASStr is string value for test AutoScaler.
TestASStr = "test"
// InvalidASStr is string value for invalid AutoScaler.
InvalidASStr = "invalid"
)
const (
// DefAWSAutoScalerAddr is default address for aws AutoScaler.
DefAWSAutoScalerAddr = "tiflash-autoscale-lb.tiflash-autoscale.svc.cluster.local:8081"
// DefASStr is default AutoScaler.
DefASStr = AWSASStr
)
const (
// MockASType is int value for mock AutoScaler.
MockASType int = iota
// AWSASType is int value for aws AutoScaler.
AWSASType
// GCPASType is int value for gcp AutoScaler.
GCPASType
// TestASType is for local tidb test AutoScaler.
TestASType
// InvalidASType is int value for invalid check.
InvalidASType
)
// IsValidAutoScalerConfig return true if user config of autoscaler type is valid.
func IsValidAutoScalerConfig(typ string) bool {
t := GetAutoScalerType(typ)
return t == MockASType || t == AWSASType || t == GCPASType
}
// GetAutoScalerType return topo fetcher type.
func GetAutoScalerType(typ string) int {
switch typ {
case MockASStr:
return MockASType
case AWSASStr:
return AWSASType
case GCPASStr:
return GCPASType
case TestASStr:
return TestASType
default:
return InvalidASType
}
}
// Copyright 2024 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package dxfmetric
import (
"strconv"
"sync/atomic"
"time"
"github.com/google/uuid"
"github.com/pingcap/tidb/pkg/dxf/framework/proto"
metricscommon "github.com/pingcap/tidb/pkg/metrics/common"
"github.com/pingcap/tidb/pkg/util/intest"
"github.com/prometheus/client_golang/prometheus"
)
// Collector is a custom Prometheus collector for DXF metrics.
// Because the exec_id of a subtask may change, after all tasks
// are successful, subtasks will be migrated from tidb_subtask_background
// to tidb_subtask_background_history. In the above situation,
// the built-in collector of Prometheus needs to delete the previously
// added metrics, which is quite troublesome.
// Therefore, a custom collector is used.
type Collector struct {
subtaskInfo atomic.Pointer[[]*proto.SubtaskBase]
taskInfo atomic.Pointer[[]*proto.TaskBase]
tasks *prometheus.Desc
subtasks *prometheus.Desc
subtaskDuration *prometheus.Desc
}
// NewCollector creates a new Collector.
func NewCollector() *Collector {
var constLabels prometheus.Labels
// we might create multiple domains in the same process in tests, we will
// add an uuid label to avoid conflict.
if intest.InTest {
constLabels = prometheus.Labels{"server_id": uuid.New().String()}
}
return &Collector{
tasks: metricscommon.NewDesc(
"tidb_disttask_task_status",
"Number of tasks.",
[]string{"task_type", "status"}, constLabels,
),
subtasks: metricscommon.NewDesc(
"tidb_disttask_subtasks",
"Number of subtasks.",
[]string{"task_type", "task_id", "status", "exec_id"}, constLabels,
),
subtaskDuration: metricscommon.NewDesc(
"tidb_disttask_subtask_duration",
"Duration of subtasks in different states.",
[]string{"task_type", "task_id", "status", "subtask_id", "exec_id"}, constLabels,
),
}
}
// UpdateInfo updates the task and subtask info in the collector.
func (c *Collector) UpdateInfo(tasks []*proto.TaskBase, subtasks []*proto.SubtaskBase) {
c.taskInfo.Store(&tasks)
c.subtaskInfo.Store(&subtasks)
}
// Describe implements the prometheus.Collector interface.
func (c *Collector) Describe(ch chan<- *prometheus.Desc) {
ch <- c.tasks
ch <- c.subtasks
ch <- c.subtaskDuration
}
// Collect implements the prometheus.Collector interface.
func (c *Collector) Collect(ch chan<- prometheus.Metric) {
c.collectTasks(ch)
c.collectSubtasks(ch)
}
func (c *Collector) collectTasks(ch chan<- prometheus.Metric) {
p := c.taskInfo.Load()
if p == nil {
return
}
tasks := *p
// task type => state => cnt
taskTypeStateCnt := make(map[string]map[string]int)
for _, task := range tasks {
tp := task.Type.String()
if _, ok := taskTypeStateCnt[tp]; !ok {
taskTypeStateCnt[tp] = make(map[string]int)
}
state := task.State.String()
taskTypeStateCnt[tp][state]++
}
for tp, stateCnt := range taskTypeStateCnt {
for state, cnt := range stateCnt {
ch <- prometheus.MustNewConstMetric(c.tasks, prometheus.GaugeValue,
float64(cnt),
tp,
state,
)
}
}
}
func (c *Collector) collectSubtasks(ch chan<- prometheus.Metric) {
p := c.subtaskInfo.Load()
if p == nil {
return
}
subtasks := *p
// taskID => execID => state => cnt
subtaskCnt := make(map[int64]map[string]map[proto.SubtaskState]int)
taskType := make(map[int64]proto.TaskType)
for _, subtask := range subtasks {
if _, ok := subtaskCnt[subtask.TaskID]; !ok {
subtaskCnt[subtask.TaskID] = make(map[string]map[proto.SubtaskState]int)
}
if _, ok := subtaskCnt[subtask.TaskID][subtask.ExecID]; !ok {
subtaskCnt[subtask.TaskID][subtask.ExecID] = make(map[proto.SubtaskState]int)
}
subtaskCnt[subtask.TaskID][subtask.ExecID][subtask.State]++
taskType[subtask.TaskID] = subtask.Type
c.setDistSubtaskDuration(ch, subtask)
}
for taskID, execIDMap := range subtaskCnt {
for execID, stateMap := range execIDMap {
for state, cnt := range stateMap {
ch <- prometheus.MustNewConstMetric(c.subtasks, prometheus.GaugeValue,
float64(cnt),
taskType[taskID].String(),
strconv.Itoa(int(taskID)),
state.String(),
execID,
)
}
}
}
}
func (c *Collector) setDistSubtaskDuration(ch chan<- prometheus.Metric, subtask *proto.SubtaskBase) {
switch subtask.State {
case proto.SubtaskStatePending:
ch <- prometheus.MustNewConstMetric(c.subtaskDuration, prometheus.GaugeValue,
time.Since(subtask.CreateTime).Seconds(),
subtask.Type.String(),
strconv.Itoa(int(subtask.TaskID)),
subtask.State.String(),
strconv.Itoa(int(subtask.ID)),
subtask.ExecID,
)
case proto.SubtaskStateRunning:
ch <- prometheus.MustNewConstMetric(c.subtaskDuration, prometheus.GaugeValue,
time.Since(subtask.StartTime).Seconds(),
subtask.Type.String(),
strconv.Itoa(int(subtask.TaskID)),
subtask.State.String(),
strconv.Itoa(int(subtask.ID)),
subtask.ExecID,
)
}
}
// Copyright 2023 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package dxfmetric
import (
metricscommon "github.com/pingcap/tidb/pkg/metrics/common"
"github.com/prometheus/client_golang/prometheus"
)
const (
namespaceTiDB = "tidb"
subsystemDXF = "dxf"
lblType = "type"
lblEvent = "event"
lblState = "state"
// LblTaskID is the label for task ID.
LblTaskID = "task_id"
)
// event names during schedule and execute
const (
EventSubtaskScheduledAway = "subtask-scheduled-away"
EventSubtaskRerun = "subtask-rerun"
EventSubtaskSlow = "subtask-slow"
EventRetry = "retry"
EventTooManyIdx = "too-many-idx"
EventMergeSort = "merge-sort"
EventCleanupFailed = "cleanup-failed"
EventMeterWriteFailed = "meter-write-failed"
)
// DXF metrics
var (
UsedSlotsGauge *prometheus.GaugeVec
WorkerCount *prometheus.GaugeVec
FinishedTaskCounter *prometheus.CounterVec
ScheduleEventCounter *prometheus.CounterVec
ExecuteEventCounter *prometheus.CounterVec
)
// InitDistTaskMetrics initializes disttask metrics.
func InitDistTaskMetrics() {
UsedSlotsGauge = metricscommon.NewGaugeVec(
prometheus.GaugeOpts{
Namespace: namespaceTiDB,
Subsystem: "disttask",
Name: "used_slots",
Help: "Gauge of used slots on a executor node.",
}, []string{"service_scope"})
WorkerCount = metricscommon.NewGaugeVec(
prometheus.GaugeOpts{
Namespace: namespaceTiDB,
Subsystem: subsystemDXF,
Name: "worker_count",
Help: "Gauge of DXF worker count.",
}, []string{lblType})
FinishedTaskCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: namespaceTiDB,
Subsystem: subsystemDXF,
Name: "finished_task_total",
Help: "Counter of finished DXF tasks.",
}, []string{lblState})
ScheduleEventCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: namespaceTiDB,
Subsystem: subsystemDXF,
Name: "schedule_event_total",
Help: "Counter of DXF schedule events fo tasks.",
}, []string{LblTaskID, lblEvent})
// we use task ID instead of subtask ID to avoid too many lines of metrics.
ExecuteEventCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: namespaceTiDB,
Subsystem: subsystemDXF,
Name: "execute_event_total",
Help: "Counter of DXF execute events fo tasks.",
}, []string{LblTaskID, lblEvent})
}
// Register registers DXF metrics.
func Register(register prometheus.Registerer) {
register.MustRegister(UsedSlotsGauge)
register.MustRegister(WorkerCount)
register.MustRegister(FinishedTaskCounter)
register.MustRegister(ScheduleEventCounter)
register.MustRegister(ExecuteEventCounter)
}
// Copyright 2024 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package proto
import "fmt"
// ModificationType is the type of task modification.
type ModificationType string
// String implements fmt.Stringer interface.
func (t ModificationType) String() string {
return string(t)
}
const (
// ModifyRequiredSlots is the type for modifying task required slots.
// Note: required slots is introduced later and separated from the old
// "concurrency" concept, we still use "modify_concurrency" as the modification
// type for compatibility.
ModifyRequiredSlots ModificationType = "modify_concurrency"
// ModifyMaxNodeCount is the type for modifying max node count of task.
ModifyMaxNodeCount ModificationType = "modify_max_node_count"
// ModifyBatchSize is the type for modifying batch size of add-index.
ModifyBatchSize ModificationType = "modify_batch_size"
// ModifyMaxWriteSpeed is the type for modifying max write speed of add-index.
ModifyMaxWriteSpeed ModificationType = "modify_max_write_speed"
)
// ModifyParam is the parameter for task modification.
type ModifyParam struct {
PrevState TaskState `json:"prev_state"`
Modifications []Modification `json:"modifications"`
}
// String implements fmt.Stringer interface.
func (p *ModifyParam) String() string {
return fmt.Sprintf("{prev_state: %s, modifications: %v}", p.PrevState, p.Modifications)
}
// Modification is one modification for task.
type Modification struct {
Type ModificationType `json:"type"`
To int64 `json:"to"`
}
// String implements fmt.Stringer interface.
func (m Modification) String() string {
return fmt.Sprintf("{type: %s, to: %d}", m.Type, m.To)
}
// Copyright 2023 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package proto
import (
"math"
"github.com/docker/go-units"
)
// ManagedNode is a TiDB node that is managed by the framework.
type ManagedNode struct {
// ID see GenerateExecID, it's named as host in the meta table.
ID string
// Role of the node, either "" or "background"
// all managed node should have the same role
Role string
CPUCount int
}
// NodeResource is the resource of the node.
// exported for test.
type NodeResource struct {
TotalCPU int
TotalMem int64
TotalDisk uint64
}
// NewNodeResource creates a new NodeResource.
func NewNodeResource(totalCPU int, totalMem int64, totalDisk uint64) *NodeResource {
return &NodeResource{
TotalCPU: totalCPU,
TotalMem: totalMem,
TotalDisk: totalDisk,
}
}
// LimitDXFResource returns the resource available to DXF under the given percentage limit.
func (nr *NodeResource) LimitDXFResource(limit int) *NodeResource {
usableCPU := getLimitedDXFCPU(nr.TotalCPU, limit)
if usableCPU == nr.TotalCPU || nr.TotalCPU <= 0 {
return NewNodeResource(nr.TotalCPU, nr.TotalMem, nr.TotalDisk)
}
usableMem := int64(float64(usableCPU) / float64(nr.TotalCPU) * float64(nr.TotalMem))
// this feature is for premium based cluster, in which we are only support
// global sort, there is no local disk. so we leave the disk as is.
return NewNodeResource(usableCPU, usableMem, nr.TotalDisk)
}
// getLimitedDXFCPU returns the CPU slots available to DXF under the given percentage limit.
func getLimitedDXFCPU(totalCPU int, limit int) int {
if totalCPU <= 0 || limit >= 100 {
return totalCPU
}
// use CEIL might cause the real limit to be higher than the given limit.
// as DXF use slots or CPU cores as the unit of resource, that's acceptable.
usableCPU := int(math.Ceil(float64(totalCPU) * float64(limit) / 100))
if usableCPU < 1 {
return 1
}
return min(usableCPU, totalCPU)
}
// NodeResourceForTest is only used for test.
var NodeResourceForTest = NewNodeResource(32, 32*units.GB, 100*units.GB)
// GetStepResource gets the step resource according to slots.
func (nr *NodeResource) GetStepResource(task *TaskBase) *StepResource {
slots := task.GetRuntimeSlots()
return &StepResource{
CPU: NewAllocatable(int64(slots)),
// same proportion as CPU
Mem: NewAllocatable(int64(float64(slots) / float64(nr.TotalCPU) * float64(nr.TotalMem))),
}
}
// GetTaskDiskResource gets available disk for a task.
func (nr *NodeResource) GetTaskDiskResource(task *TaskBase, quotaHint uint64) uint64 {
slots := task.GetRuntimeSlots()
availableDisk := min(nr.TotalDisk, quotaHint)
return uint64(float64(slots) / float64(nr.TotalCPU) * float64(availableDisk))
}
// Copyright 2024 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package proto
import (
"fmt"
"strings"
)
// Step is the step of task.
type Step int64
// TaskStep is the step of task.
// DO NOT change the value of the constants, will break backward compatibility.
// successfully task MUST go from StepInit to business steps, then StepDone.
const (
StepInit Step = -1
StepDone Step = -2
unknownStepPrefix = "unknown step"
)
// Step2Str converts step to string.
// it's too bad that we define step as int 🙃.
func Step2Str(t TaskType, s Step) string {
// StepInit and StepDone are special steps, we don't check task type for them.
if s == StepInit {
return "init"
} else if s == StepDone {
return "done"
}
switch t {
case Backfill:
return backfillStep2Str(s)
case ImportInto:
return importIntoStep2Str(s)
case TaskTypeExample:
return exampleStep2Str(s)
}
return fmt.Sprintf("unknown type %s", t)
}
// IsValidStep returns whether the step is valid for the task type.
func IsValidStep(t TaskType, s Step) bool {
str := Step2Str(t, s)
return !strings.Contains(str, unknownStepPrefix)
}
// Steps of example task type.
const (
StepOne Step = 1
StepTwo Step = 2
StepThree Step = 3
)
func exampleStep2Str(s Step) string {
switch s {
case StepOne:
return "one"
case StepTwo:
return "two"
case StepThree:
return "three"
default:
return unknownStepStr(s)
}
}
// Steps of IMPORT INTO, each step is represented by one or multiple subtasks.
// the initial step is StepInit(-1)
// steps are processed in the following order:
//
// - local sort:
// StepInit
// -> ImportStepImport
// -> ImportStepPostProcess
// -> StepDone
// - global sort:
// StepInit
// -> ImportStepEncodeAndSort
// -> ImportStepMergeSort (optional)
// -> ImportStepWriteAndIngest
// -> ImportStepCollectConflicts (optional)
// -> ImportStepConflictResolution (optional)
// -> ImportStepPostProcess
// -> StepDone
const (
// ImportStepImport we sort source data and ingest it into TiKV in this step.
ImportStepImport Step = 1
// ImportStepPostProcess we verify checksum and add index in this step.
ImportStepPostProcess Step = 2
// ImportStepEncodeAndSort encode source data and write sorted kv into global storage.
ImportStepEncodeAndSort Step = 3
// ImportStepMergeSort merge sorted kv from global storage, so we can have better
// read performance during ImportStepWriteAndIngest.
// depends on how much kv files are overlapped, there's might 0 subtasks
// in this step.
ImportStepMergeSort Step = 4
// ImportStepWriteAndIngest write sorted kv into TiKV and ingest it.
ImportStepWriteAndIngest Step = 5
// ImportStepCollectConflicts collect conflicts info, this step won't mutate
// downstream data, so is idempotent, and we can collect a correct checksum
// for the conflicted rows. if we do this together with ImportStepConflictResolution,
// once the step retry in the middle, we can't get a correct checksum.
// this step also need to do deduplication for the conflicted rows due to
// multiple unique indexes to avoid repeated collection, currently, we do it
// in memory, so if there are too many conflicts, we will skip the later
// checksum step as we don't know the exact checksum.
ImportStepCollectConflicts Step = 6
// ImportStepConflictResolution resolve detected conflicts.
// during other steps of global sort, we will detect conflicts and record them
// in external storage, if any conflicts are detected, we will resolve them
// here. so there might be 0 subtasks in this step.
ImportStepConflictResolution Step = 7
)
func importIntoStep2Str(s Step) string {
switch s {
case ImportStepImport:
return "import"
case ImportStepPostProcess:
return "post-process"
case ImportStepEncodeAndSort:
return "encode"
case ImportStepMergeSort:
return "merge-sort"
case ImportStepWriteAndIngest:
return "ingest"
case ImportStepCollectConflicts:
return "collect-conflicts"
case ImportStepConflictResolution:
return "conflict-resolution"
default:
return unknownStepStr(s)
}
}
// Steps of Add Index, each step is represented by one or multiple subtasks.
// the initial step is StepInit(-1)
// steps are processed in the following order:
// - local sort:
// StepInit -> BackfillStepReadIndex -> StepDone
// - global sort:
// StepInit -> BackfillStepReadIndex -> BackfillStepMergeSort -> BackfillStepWriteAndIngest -> StepDone
const (
BackfillStepReadIndex Step = 1
// BackfillStepMergeSort only used in global sort, it will merge sorted kv from global storage, so we can have better
// read performance during BackfillStepWriteAndIngest with global sort.
// depends on how much kv files are overlapped.
// When kv files overlapped less than MergeSortOverlapThreshold, there‘re no subtasks.
BackfillStepMergeSort Step = 2
// BackfillStepWriteAndIngest write sorted kv into TiKV and ingest it.
BackfillStepWriteAndIngest Step = 3
// BackfillStepMergeTempIndex is the step to merge temp index into the original index.
BackfillStepMergeTempIndex Step = 4
)
// StepStr convert proto.Step to string.
func backfillStep2Str(s Step) string {
switch s {
case BackfillStepReadIndex:
return "read-index"
case BackfillStepMergeSort:
return "merge-sort"
case BackfillStepWriteAndIngest:
return "ingest"
case BackfillStepMergeTempIndex:
return "merge-temp-index"
default:
return unknownStepStr(s)
}
}
func unknownStepStr(s Step) string {
return fmt.Sprintf("%s %d", unknownStepPrefix, s)
}
// Copyright 2023 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package proto
import (
"fmt"
"sync/atomic"
"time"
"github.com/docker/go-units"
)
// see doc.go for more details.
const (
SubtaskStatePending SubtaskState = "pending"
SubtaskStateRunning SubtaskState = "running"
SubtaskStateSucceed SubtaskState = "succeed"
SubtaskStateFailed SubtaskState = "failed"
SubtaskStateCanceled SubtaskState = "canceled"
SubtaskStatePaused SubtaskState = "paused"
)
type (
// SubtaskState is the state of subtask.
SubtaskState string
)
func (s SubtaskState) String() string {
return string(s)
}
// SubtaskBase contains the basic information of a subtask.
// we define this to avoid load subtask meta which might be very large into memory.
type SubtaskBase struct {
ID int64
Step Step
Type TaskType
// taken from task_key of the subtask table
TaskID int64
State SubtaskState
// Concurrency is the concurrency of the subtask.
// it's initialized as the task's required slots, and it's NOT used now.
// if the required slot of task is modified, the concurrency of un-finished
// subtasks of the task will be updated too.
// some subtasks like post-process of import into, don't consume too many resources,
// can lower this value, can use this field to implement such feature later.
Concurrency int
// ExecID is the ID of target executor, right now it's the same as instance_id,
// its value is IP:PORT, see GenerateExecID
ExecID string
CreateTime time.Time
// StartTime is the time when the subtask is started.
// it's 0 if it hasn't started yet.
StartTime time.Time
// Ordinal is the ordinal of subtask, should be unique for some task and step.
// starts from 1.
Ordinal int
}
func (t *SubtaskBase) String() string {
return fmt.Sprintf("[ID=%d, Step=%d, Type=%s, TaskID=%d, State=%s, ExecID=%s]",
t.ID, t.Step, t.Type, t.TaskID, t.State, t.ExecID)
}
// IsDone checks if the subtask is done.
func (t *SubtaskBase) IsDone() bool {
return t.State == SubtaskStateSucceed || t.State == SubtaskStateCanceled ||
t.State == SubtaskStateFailed
}
// Subtask represents the subtask of distribute framework.
// subtasks of a task are run in parallel on different nodes, but on each node,
// at most 1 subtask can be run at the same time, see StepExecutor too.
type Subtask struct {
SubtaskBase
// UpdateTime is the time when the subtask is updated.
// it can be used as subtask end time if the subtask is finished.
// it's 0 if it hasn't started yet.
UpdateTime time.Time
// Meta is the metadata of subtask, should not be nil.
// meta of different subtasks of same step must be different too.
// NOTE: this field can be changed by StepExecutor.OnFinished method, to store
// some result, and framework will update the subtask meta in the storage.
// On other code path, this field should be read-only.
Meta []byte
Summary string
}
// NewSubtask create a new subtask.
func NewSubtask(step Step, taskID int64, tp TaskType, execID string, concurrency int, meta []byte, ordinal int) *Subtask {
s := &Subtask{
SubtaskBase: SubtaskBase{
Step: step,
Type: tp,
TaskID: taskID,
ExecID: execID,
Concurrency: concurrency,
Ordinal: ordinal,
},
Meta: meta,
}
return s
}
// Allocatable is a resource with capacity that can be allocated, it's routine safe.
type Allocatable struct {
capacity int64
used atomic.Int64
}
// NewAllocatable creates a new Allocatable.
func NewAllocatable(capacity int64) *Allocatable {
return &Allocatable{capacity: capacity}
}
// Capacity returns the capacity of the Allocatable.
func (a *Allocatable) Capacity() int64 {
return a.capacity
}
// Used returns the used resource of the Allocatable.
func (a *Allocatable) Used() int64 {
return a.used.Load()
}
// Alloc allocates v from the Allocatable.
func (a *Allocatable) Alloc(n int64) bool {
for {
used := a.used.Load()
if used+n > a.capacity {
return false
}
if a.used.CompareAndSwap(used, used+n) {
return true
}
}
}
// Free frees v from the Allocatable.
func (a *Allocatable) Free(n int64) {
a.used.Add(-n)
}
// StepResource is the max resource that a task step can use.
// it's also the max resource that a subtask can use, as we run subtasks of task
// step in sequence.
type StepResource struct {
CPU *Allocatable
Mem *Allocatable
}
// String implements Stringer interface.
func (s *StepResource) String() string {
return fmt.Sprintf("[CPU=%d, Mem=%s]", s.CPU.Capacity(),
units.BytesSize(float64(s.Mem.Capacity())))
}
// MemoryPerCore returns the memory per core of the StepResource.
// When CPU capacity is not positive, it falls back to returning total memory.
func (s *StepResource) MemoryPerCore() int64 {
if s.CPU.Capacity() <= 0 {
return s.Mem.Capacity()
}
return s.Mem.Capacity() / s.CPU.Capacity()
}
// Copyright 2023 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package proto
import (
"cmp"
"fmt"
"time"
)
// see doc.go for more details.
const (
TaskStatePending TaskState = "pending"
TaskStateRunning TaskState = "running"
TaskStateSucceed TaskState = "succeed"
TaskStateFailed TaskState = "failed"
TaskStateReverting TaskState = "reverting"
TaskStateAwaitingResolution TaskState = "awaiting-resolution"
TaskStateReverted TaskState = "reverted"
TaskStateCancelling TaskState = "cancelling"
TaskStatePausing TaskState = "pausing"
TaskStatePaused TaskState = "paused"
TaskStateResuming TaskState = "resuming"
TaskStateModifying TaskState = "modifying"
)
type (
// TaskState is the state of task.
TaskState string
// TaskType is the type of task.
TaskType string
)
func (t TaskType) String() string {
return string(t)
}
func (s TaskState) String() string {
return string(s)
}
// CanMoveToModifying checks if current state can move to 'modifying' state.
func (s TaskState) CanMoveToModifying() bool {
return s == TaskStatePending || s == TaskStateRunning || s == TaskStatePaused
}
const (
// TaskIDLabelName is the label name of task id.
TaskIDLabelName = "task_id"
// NormalPriority represents the normal priority of task.
NormalPriority = 512
)
// MaxConcurrentTask is the max concurrency of task.
// TODO: remove this limit later.
var MaxConcurrentTask = 16
// ExtraParams is the extra params of task.
// Note: only store params that's not used for filter or sort in this struct.
type ExtraParams struct {
// ManualRecovery indicates whether the task can be recovered manually.
// if enabled, the task will enter 'awaiting-resolution' state when it failed,
// then the user can recover the task manually or fail it if it's not recoverable.
ManualRecovery bool `json:"manual_recovery,omitempty"`
// MaxRuntimeSlots is the max slots when running subtasks of this task in
// TargetSteps steps.
// normally it's 0, means we will use the RequiredSlots to run the subtasks.
// if set, we will use the min of RequiredSlots and MaxRuntimeSlots as the
// execution effective slots of the task step defined in TargetSteps.
// this field is used to workaround OOM issue where TiDB might repeatedly
// restart. the DXF framework won't detect changes in this field, so it's not
// part of normal schedule workflow, when TiDB restarts the newest value will
// be used.
// RequiredSlots might be modified, and MaxRuntimeSlots is not touched in this
// case due to above reason, so MaxRuntimeSlots might > RequiredSlots.
MaxRuntimeSlots int `json:"max_runtime_slots,omitempty"`
// TargetSteps indicates the steps that MaxRuntimeSlots takes effect.
// if empty or nil, MaxRuntimeSlots takes effect in all steps.
// normally OOM only happens in some specific steps, so we can just limit the
// concurrency in those steps to reduce the impact on the overall performance.
TargetSteps []Step `json:"target_steps,omitempty"`
}
// TaskBase contains the basic information of a task.
// we define this to avoid load task meta which might be very large into memory.
type TaskBase struct {
ID int64
Key string
Type TaskType
State TaskState
Step Step
// Priority is the priority of task, the smaller value means the higher priority.
// valid range is [1, 1024], default is NormalPriority.
Priority int
// RequiredSlots is the required slots of the task.
// we use this field to allocate slots when scheduling and creating the task
// executor, but the effective slots when running the task is determined by
// GetRuntimeSlots.
// in normal case, they are the same. but when meeting OOM and TiDB repeatedly
// restarts, we might set a lower MaxRuntimeSlots in ExtraParams, then the
// effective slots is smaller than RequiredSlots.
// Note: in application layer, don't use this field directly, use GetRuntimeSlots
// or GetResource of step executor instead.
// Note: in the system table, we store it inside 'concurrency' column as
// required slots is introduced later.
RequiredSlots int
// TargetScope indicates that the task should be running on tidb nodes which
// contain the tidb_service_scope=TargetScope label.
// To be compatible with previous version, if it's "" or "background", the
// task try run on nodes of "background" scope,
// if there is no such nodes, will try nodes of "" scope.
TargetScope string
CreateTime time.Time
MaxNodeCount int
ExtraParams ExtraParams
// keyspace name is the keyspace that the task belongs to.
// it's only useful for nextgen cluster.
Keyspace string
}
// IsDone checks if the task is done.
func (t *TaskBase) IsDone() bool {
return t.State == TaskStateSucceed || t.State == TaskStateReverted ||
t.State == TaskStateFailed
}
// CompareTask a wrapper of Compare.
func (t *TaskBase) CompareTask(other *Task) int {
return t.Compare(&other.TaskBase)
}
// Compare compares two tasks by task rank.
// returns < 0 represents rank of t is higher than 'other'.
func (t *TaskBase) Compare(other *TaskBase) int {
if r := cmp.Compare(t.Priority, other.Priority); r != 0 {
return r
}
if r := t.CreateTime.Compare(other.CreateTime); r != 0 {
return r
}
return cmp.Compare(t.ID, other.ID)
}
// GetRuntimeSlots gets the runtime slots of current task step.
// application layer might use this as the concurrency of the task step.
func (t *TaskBase) GetRuntimeSlots() int {
if t.ExtraParams.MaxRuntimeSlots > 0 {
if len(t.ExtraParams.TargetSteps) == 0 {
return min(t.ExtraParams.MaxRuntimeSlots, t.RequiredSlots)
}
for _, step := range t.ExtraParams.TargetSteps {
if step == t.Step {
return min(t.ExtraParams.MaxRuntimeSlots, t.RequiredSlots)
}
}
}
return t.RequiredSlots
}
// String implements fmt.Stringer interface.
func (t *TaskBase) String() string {
return fmt.Sprintf("{id: %d, key: %s, type: %s, state: %s, step: %s, priority: %d, required slots: %d, target scope: %s, create time: %s}",
t.ID, t.Key, t.Type, t.State, Step2Str(t.Type, t.Step), t.Priority, t.RequiredSlots, t.TargetScope, t.CreateTime.Format(time.RFC3339Nano))
}
// Task represents the task of distributed framework, see doc.go for more details.
type Task struct {
TaskBase
// SchedulerID is not used now.
SchedulerID string
StartTime time.Time
StateUpdateTime time.Time
// Meta is the metadata of task, it's read-only in most cases, but it can be
// changed in below case, and framework will update the task meta in the storage.
// - task switches to next step in Scheduler.OnNextSubtasksBatch
// - on task cleanup, we might do some redaction on the meta.
// - on task 'modifying', params inside the meta can be changed.
Meta []byte
Error error
ModifyParam ModifyParam
}
var (
// EmptyMeta is the empty meta of task/subtask.
EmptyMeta = []byte("{}")
)
// Copyright 2024 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package proto
const (
// TaskTypeExample is TaskType of Example, it's for test.
TaskTypeExample TaskType = "Example"
// ImportInto is TaskType of ImportInto.
ImportInto TaskType = "ImportInto"
// Backfill is TaskType of add index Backfilling process.
Backfill TaskType = "backfill"
)
// Type2Int converts task type to int.
func Type2Int(t TaskType) int {
switch t {
case TaskTypeExample:
return 1
case ImportInto:
return 2
case Backfill:
return 3
default:
return 0
}
}
// Int2Type converts int to task type.
func Int2Type(i int) TaskType {
switch i {
case 1:
return TaskTypeExample
case 2:
return ImportInto
case 3:
return Backfill
default:
return ""
}
}
// Copyright 2021 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package errno
import (
"sync"
"time"
)
// The error summary is protected by a mutex for simplicity.
// It is not expected to be hot unless there are concurrent workloads
// that are generating high error/warning counts, in which case
// the system probably has other issues already.
// ErrorSummary summarizes errors and warnings
type ErrorSummary struct {
ErrorCount int
WarningCount int
FirstSeen time.Time
LastSeen time.Time
}
// instanceStatistics provide statistics for a tidb-server instance.
type instanceStatistics struct {
sync.Mutex
global map[uint16]*ErrorSummary
users map[string]map[uint16]*ErrorSummary
hosts map[string]map[uint16]*ErrorSummary
}
var stats instanceStatistics
func init() {
FlushStats()
}
// FlushStats resets errors and warnings across global/users/hosts
func FlushStats() {
stats.Lock()
defer stats.Unlock()
stats.global = make(map[uint16]*ErrorSummary)
stats.users = make(map[string]map[uint16]*ErrorSummary)
stats.hosts = make(map[string]map[uint16]*ErrorSummary)
}
func copyMap(oldMap map[uint16]*ErrorSummary) map[uint16]*ErrorSummary {
newMap := make(map[uint16]*ErrorSummary, len(oldMap))
for k, v := range oldMap {
newMap[k] = &ErrorSummary{
ErrorCount: v.ErrorCount,
WarningCount: v.WarningCount,
FirstSeen: v.FirstSeen,
LastSeen: v.LastSeen,
}
}
return newMap
}
// GlobalStats summarizes errors and warnings across all users/hosts
func GlobalStats() map[uint16]*ErrorSummary {
stats.Lock()
defer stats.Unlock()
return copyMap(stats.global)
}
// UserStats summarizes per-user
func UserStats() map[string]map[uint16]*ErrorSummary {
stats.Lock()
defer stats.Unlock()
newMap := make(map[string]map[uint16]*ErrorSummary, len(stats.users))
for k, v := range stats.users {
newMap[k] = copyMap(v)
}
return newMap
}
// HostStats summarizes per remote-host
func HostStats() map[string]map[uint16]*ErrorSummary {
stats.Lock()
defer stats.Unlock()
newMap := make(map[string]map[uint16]*ErrorSummary, len(stats.hosts))
for k, v := range stats.hosts {
newMap[k] = copyMap(v)
}
return newMap
}
func initCounters(errCode uint16, user, host string) {
seen := time.Now()
stats.Lock()
defer stats.Unlock()
if _, ok := stats.global[errCode]; !ok {
stats.global[errCode] = &ErrorSummary{FirstSeen: seen}
}
if _, ok := stats.users[user]; !ok {
stats.users[user] = make(map[uint16]*ErrorSummary)
}
if _, ok := stats.users[user][errCode]; !ok {
stats.users[user][errCode] = &ErrorSummary{FirstSeen: seen}
}
if _, ok := stats.hosts[host]; !ok {
stats.hosts[host] = make(map[uint16]*ErrorSummary)
}
if _, ok := stats.hosts[host][errCode]; !ok {
stats.hosts[host][errCode] = &ErrorSummary{FirstSeen: seen}
}
}
// IncrementError increments the global/user/host statistics for an errCode
func IncrementError(errCode uint16, user, host string) {
seen := time.Now()
initCounters(errCode, user, host)
stats.Lock()
defer stats.Unlock()
// Increment counter + update last seen
stats.global[errCode].ErrorCount++
stats.global[errCode].LastSeen = seen
// Increment counter + update last seen
stats.users[user][errCode].ErrorCount++
stats.users[user][errCode].LastSeen = seen
// Increment counter + update last seen
stats.hosts[host][errCode].ErrorCount++
stats.hosts[host][errCode].LastSeen = seen
}
// IncrementWarning increments the global/user/host statistics for an errCode
func IncrementWarning(errCode uint16, user, host string) {
seen := time.Now()
initCounters(errCode, user, host)
stats.Lock()
defer stats.Unlock()
// Increment counter + update last seen
stats.global[errCode].WarningCount++
stats.global[errCode].LastSeen = seen
// Increment counter + update last seen
stats.users[user][errCode].WarningCount++
stats.users[user][errCode].LastSeen = seen
// Increment counter + update last seen
stats.hosts[host][errCode].WarningCount++
stats.hosts[host][errCode].LastSeen = seen
}
// Copyright 2026 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package ingestmetric
import (
metricscommon "github.com/pingcap/tidb/pkg/metrics/common"
"github.com/prometheus/client_golang/prometheus"
)
const (
lblAPI = "api"
// LabelWriteAPI is the label value for the write API.
LabelWriteAPI = "write"
// LabelIngestAPI is the label value for the ingest API.
LabelIngestAPI = "ingest"
)
var (
// WriteIngestAPIDuration records the duration of write and ingest APIs in nextgen.
WriteIngestAPIDuration *prometheus.HistogramVec
// WriteAPIDuration records the duration of write API.
WriteAPIDuration prometheus.Observer
// IngestAPIDuration records the duration of ingest API.
IngestAPIDuration prometheus.Observer
)
// InitIngestMetrics initializes ingest metrics.
func InitIngestMetrics() {
WriteIngestAPIDuration = metricscommon.NewHistogramVec(prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "ingestor",
Name: "write_ingest_api_duration",
Help: "write and ingest API duration",
Buckets: prometheus.ExponentialBuckets(0.001, 2, 20), // 1ms ~ 524s
}, []string{lblAPI})
WriteAPIDuration = WriteIngestAPIDuration.WithLabelValues(LabelWriteAPI)
IngestAPIDuration = WriteIngestAPIDuration.WithLabelValues(LabelIngestAPI)
}
// Register registers ingest metrics.
func Register(register prometheus.Registerer) {
register.MustRegister(WriteIngestAPIDuration)
}
// Copyright 2019 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package metric
import (
"context"
"math"
"github.com/pingcap/tidb/pkg/util/promutil"
"github.com/prometheus/client_golang/prometheus"
dto "github.com/prometheus/client_model/go"
)
// metric label values.
const (
TableStatePending = "pending" // for the TableCounter labels, below too
TableStateImported = "imported"
TableStateCompleted = "completed"
StateTotalRestore = "total_restore" // total source data bytes needs to restore
StateRestored = "restored" // source data bytes restored during restore engine
StateRestoreWritten = "written" // kv bytes written during restore engine
StateImported = "imported" // kv bytes imported during import engine
StateMerged = "merged" // kv bytes merged during merge-sort step
ProgressPhaseTotal = "total" // total restore progress(not include post-process, like checksum and analyze)
ProgressPhaseRestore = "restore" // restore engine progress
ProgressPhaseImport = "import" // import engine progress
TableResultSuccess = "success" // for the TableCounter labels, below too
TableResultFailure = "failure"
ChunkStateEstimated = "estimated" // for the ChunkCounter labels, below too
ChunkStatePending = "pending"
ChunkStateRunning = "running"
ChunkStateFinished = "finished"
ChunkStateFailed = "failed"
SSTProcessSplit = "split" // for the SSTSecondsHistogram labels, below too
SSTProcessWrite = "write"
SSTProcessIngest = "ingest"
BlockDeliverKindIndex = "index"
BlockDeliverKindData = "data"
lightningNamespace = "lightning"
)
// Common contains metrics shared for lightning and import-into.
// they will have different namespace.
// metrics here will have an additional task-id const-label when used for import-into.
type Common struct {
ChunkCounter *prometheus.CounterVec
// BytesCounter records the total bytes processed.
// it has a state label, values includes:
// - total_restore: total source file bytes needs to restore, it's constant.
// - restored: source file bytes restored, i.e. encoded and sorted.
// - written: kv bytes written during encode & sort.
// - imported: kv bytes imported during import engine(this value don't account for replica).
BytesCounter *prometheus.CounterVec
RowsCounter *prometheus.CounterVec
// RowReadSecondsHistogram records the time spent on reading a batch of rows.
// for each row, the time includes time spend on reading from file,
// decompress if needed, and parsing into row data.
// then sum up all rows in a batch, and record the time.
RowReadSecondsHistogram prometheus.Histogram
// RowEncodeSecondsHistogram records the time spent on encoding a batch of rows.
RowEncodeSecondsHistogram prometheus.Histogram
BlockDeliverSecondsHistogram prometheus.Histogram
BlockDeliverBytesHistogram *prometheus.HistogramVec
BlockDeliverKVPairsHistogram *prometheus.HistogramVec
}
// NewCommon returns common metrics instance.
func NewCommon(factory promutil.Factory, namespace, subsystem string, constLabels prometheus.Labels) *Common {
return &Common{
ChunkCounter: factory.NewCounterVec(
prometheus.CounterOpts{
Namespace: namespace,
Subsystem: subsystem,
Name: "chunks",
Help: "count number of chunks processed",
ConstLabels: constLabels,
}, []string{"state"}),
BytesCounter: factory.NewCounterVec(
prometheus.CounterOpts{
Namespace: namespace,
Subsystem: subsystem,
Name: "bytes",
Help: "count of total bytes",
ConstLabels: constLabels,
}, []string{"state"}),
// state can be one of:
// - estimated (an estimation derived from the file size)
// - pending
// - running
// - finished
// - failed
RowsCounter: factory.NewCounterVec(
prometheus.CounterOpts{
Namespace: namespace,
Subsystem: subsystem,
Name: "rows",
Help: "count of total rows",
ConstLabels: constLabels,
}, []string{"state", "table"}),
RowReadSecondsHistogram: factory.NewHistogram(
prometheus.HistogramOpts{
Namespace: namespace,
Subsystem: subsystem,
Name: "row_read_seconds",
Help: "time needed to parse a row(include time to read and decompress file)",
ConstLabels: constLabels,
Buckets: prometheus.ExponentialBuckets(0.001, 3.1622776601683795, 7),
}),
RowEncodeSecondsHistogram: factory.NewHistogram(
prometheus.HistogramOpts{
Namespace: namespace,
Subsystem: subsystem,
Name: "row_encode_seconds",
Help: "time needed to encode a row",
ConstLabels: constLabels,
Buckets: prometheus.ExponentialBuckets(0.001, 3.1622776601683795, 10),
}),
BlockDeliverSecondsHistogram: factory.NewHistogram(
prometheus.HistogramOpts{
Namespace: namespace,
Subsystem: subsystem,
Name: "block_deliver_seconds",
Help: "time needed to deliver a block",
ConstLabels: constLabels,
Buckets: prometheus.ExponentialBuckets(0.001, 3.1622776601683795, 10),
}),
BlockDeliverBytesHistogram: factory.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: namespace,
Subsystem: subsystem,
Name: "block_deliver_bytes",
Help: "number of bytes being sent out to importer",
ConstLabels: constLabels,
Buckets: prometheus.ExponentialBuckets(512, 2, 10),
}, []string{"kind"}),
BlockDeliverKVPairsHistogram: factory.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: namespace,
Subsystem: subsystem,
Name: "block_deliver_kv_pairs",
Help: "number of KV pairs being sent out to importer",
ConstLabels: constLabels,
Buckets: prometheus.ExponentialBuckets(1, 2, 10),
}, []string{"kind"}),
}
}
// RegisterTo registers all metrics to the given registry.
func (c *Common) RegisterTo(r promutil.Registry) {
r.MustRegister(
c.ChunkCounter,
c.BytesCounter,
c.RowsCounter,
c.RowReadSecondsHistogram,
c.RowEncodeSecondsHistogram,
c.BlockDeliverSecondsHistogram,
c.BlockDeliverBytesHistogram,
c.BlockDeliverKVPairsHistogram,
)
}
// UnregisterFrom unregisters all metrics from the given registry.
func (c *Common) UnregisterFrom(r promutil.Registry) {
r.Unregister(c.ChunkCounter)
r.Unregister(c.BytesCounter)
r.Unregister(c.RowsCounter)
r.Unregister(c.RowReadSecondsHistogram)
r.Unregister(c.RowEncodeSecondsHistogram)
r.Unregister(c.BlockDeliverSecondsHistogram)
r.Unregister(c.BlockDeliverBytesHistogram)
r.Unregister(c.BlockDeliverKVPairsHistogram)
}
// Metrics contains all metrics used by lightning.
type Metrics struct {
ImporterEngineCounter *prometheus.CounterVec
IdleWorkersGauge *prometheus.GaugeVec
KvEncoderCounter *prometheus.CounterVec
TableCounter *prometheus.CounterVec
ProcessedEngineCounter *prometheus.CounterVec
ImportSecondsHistogram prometheus.Histogram
ChunkParserReadBlockSecondsHistogram prometheus.Histogram
ApplyWorkerSecondsHistogram *prometheus.HistogramVec
RowKVDeliverSecondsHistogram prometheus.Histogram
// RowReadBytesHistogram records the number of bytes read from data source
// for a batch of rows.
// it's a little duplicate with RowsCounter of state = "restored".
RowReadBytesHistogram prometheus.Histogram
ChecksumSecondsHistogram prometheus.Histogram
SSTSecondsHistogram *prometheus.HistogramVec
LocalStorageUsageBytesGauge *prometheus.GaugeVec
ProgressGauge *prometheus.GaugeVec
*Common
}
// NewMetrics creates a new empty metrics.
func NewMetrics(factory promutil.Factory) *Metrics {
c := NewCommon(factory, lightningNamespace, "", nil)
return &Metrics{
Common: c,
ImporterEngineCounter: factory.NewCounterVec(
prometheus.CounterOpts{
Namespace: lightningNamespace,
Name: "importer_engine",
Help: "counting open and closed importer engines",
}, []string{"type"}),
IdleWorkersGauge: factory.NewGaugeVec(
prometheus.GaugeOpts{
Namespace: lightningNamespace,
Name: "idle_workers",
Help: "counting idle workers",
}, []string{"name"}),
KvEncoderCounter: factory.NewCounterVec(
prometheus.CounterOpts{
Namespace: lightningNamespace,
Name: "kv_encoder",
Help: "counting kv open and closed kv encoder",
}, []string{"type"}),
TableCounter: factory.NewCounterVec(
prometheus.CounterOpts{
Namespace: lightningNamespace,
Name: "tables",
Help: "count number of tables processed",
}, []string{"state", "result"}),
ProcessedEngineCounter: factory.NewCounterVec(
prometheus.CounterOpts{
Namespace: lightningNamespace,
Name: "engines",
Help: "count number of engines processed",
}, []string{"state", "result"}),
ImportSecondsHistogram: factory.NewHistogram(
prometheus.HistogramOpts{
Namespace: lightningNamespace,
Name: "import_seconds",
Help: "time needed to import a table",
Buckets: prometheus.ExponentialBuckets(0.125, 2, 6),
}),
ChunkParserReadBlockSecondsHistogram: factory.NewHistogram(
prometheus.HistogramOpts{
Namespace: lightningNamespace,
Name: "chunk_parser_read_block_seconds",
Help: "time needed for chunk parser read a block",
Buckets: prometheus.ExponentialBuckets(0.001, 3.1622776601683795, 10),
}),
ApplyWorkerSecondsHistogram: factory.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: lightningNamespace,
Name: "apply_worker_seconds",
Help: "time needed to apply a worker",
Buckets: prometheus.ExponentialBuckets(0.001, 3.1622776601683795, 10),
}, []string{"name"}),
RowKVDeliverSecondsHistogram: factory.NewHistogram(
prometheus.HistogramOpts{
Namespace: lightningNamespace,
Name: "row_kv_deliver_seconds",
Help: "time needed to send kvs to deliver loop",
Buckets: prometheus.ExponentialBuckets(0.001, 3.1622776601683795, 10),
}),
RowReadBytesHistogram: factory.NewHistogram(
prometheus.HistogramOpts{
Namespace: lightningNamespace,
Name: "row_read_bytes",
Help: "number of bytes being read out from data source",
Buckets: prometheus.ExponentialBuckets(1024, 2, 8),
}),
ChecksumSecondsHistogram: factory.NewHistogram(
prometheus.HistogramOpts{
Namespace: lightningNamespace,
Name: "checksum_seconds",
Help: "time needed to complete the checksum stage",
Buckets: prometheus.ExponentialBuckets(1, 2.2679331552660544, 10),
}),
SSTSecondsHistogram: factory.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: lightningNamespace,
Name: "sst_seconds",
Help: "time needed to complete the sst operations",
Buckets: prometheus.ExponentialBuckets(1, 2.2679331552660544, 10),
}, []string{"kind"}),
LocalStorageUsageBytesGauge: factory.NewGaugeVec(
prometheus.GaugeOpts{
Namespace: lightningNamespace,
Name: "local_storage_usage_bytes",
Help: "disk/memory size currently occupied by intermediate files in local backend",
}, []string{"medium"}),
ProgressGauge: factory.NewGaugeVec(
prometheus.GaugeOpts{
Namespace: lightningNamespace,
Name: "progress",
Help: "progress of lightning phase",
}, []string{"phase"}),
}
}
// RegisterTo registers all metrics to the given registry.
func (m *Metrics) RegisterTo(r promutil.Registry) {
m.Common.RegisterTo(r)
r.MustRegister(
m.ImporterEngineCounter,
m.IdleWorkersGauge,
m.KvEncoderCounter,
m.TableCounter,
m.ProcessedEngineCounter,
m.ImportSecondsHistogram,
m.ChunkParserReadBlockSecondsHistogram,
m.ApplyWorkerSecondsHistogram,
m.RowKVDeliverSecondsHistogram,
m.RowReadBytesHistogram,
m.ChecksumSecondsHistogram,
m.SSTSecondsHistogram,
m.LocalStorageUsageBytesGauge,
m.ProgressGauge,
)
}
// UnregisterFrom unregisters all metrics from the given registry.
func (m *Metrics) UnregisterFrom(r promutil.Registry) {
m.Common.UnregisterFrom(r)
r.Unregister(m.ImporterEngineCounter)
r.Unregister(m.IdleWorkersGauge)
r.Unregister(m.KvEncoderCounter)
r.Unregister(m.TableCounter)
r.Unregister(m.ProcessedEngineCounter)
r.Unregister(m.ImportSecondsHistogram)
r.Unregister(m.ChunkParserReadBlockSecondsHistogram)
r.Unregister(m.ApplyWorkerSecondsHistogram)
r.Unregister(m.RowKVDeliverSecondsHistogram)
r.Unregister(m.RowReadBytesHistogram)
r.Unregister(m.ChecksumSecondsHistogram)
r.Unregister(m.SSTSecondsHistogram)
r.Unregister(m.LocalStorageUsageBytesGauge)
r.Unregister(m.ProgressGauge)
}
// RecordTableCount records the number of tables processed.
func (m *Metrics) RecordTableCount(status string, err error) {
var result string
if err != nil {
result = TableResultFailure
} else {
result = TableResultSuccess
}
m.TableCounter.WithLabelValues(status, result).Inc()
}
// RecordEngineCount records the number of engines processed.
func (m *Metrics) RecordEngineCount(status string, err error) {
var result string
if err != nil {
result = TableResultFailure
} else {
result = TableResultSuccess
}
m.ProcessedEngineCounter.WithLabelValues(status, result).Inc()
}
// ReadCounter reports the current value of the counter.
func ReadCounter(counter prometheus.Counter) float64 {
var metric dto.Metric
if err := counter.Write(&metric); err != nil {
return math.NaN()
}
return metric.Counter.GetValue()
}
// ReadHistogram reports the current value of the histogram.
// for test only.
func ReadHistogram(counter prometheus.Histogram) *dto.Metric {
var metric dto.Metric
if err := counter.Write(&metric); err != nil {
return nil
}
return &metric
}
func metricHasLabel(labelPairs []*dto.LabelPair, labels prometheus.Labels) bool {
for _, label := range labelPairs {
if v, ok := labels[label.GetName()]; ok && v == label.GetValue() {
return true
}
}
return false
}
// ReadAllCounters reports the summary value of the counters with given labels.
func ReadAllCounters(metricsVec *prometheus.MetricVec, labels prometheus.Labels) float64 {
metricsChan := make(chan prometheus.Metric, 8)
go func() {
metricsVec.Collect(metricsChan)
close(metricsChan)
}()
var sum float64
for counter := range metricsChan {
var metric dto.Metric
if err := counter.Write(&metric); err != nil {
return math.NaN()
}
if !metricHasLabel(metric.GetLabel(), labels) {
continue
}
sum += metric.Counter.GetValue()
}
return sum
}
// ReadHistogramSum reports the sum of all observed values in the histogram.
func ReadHistogramSum(histogram prometheus.Histogram) float64 {
var metric dto.Metric
if err := histogram.Write(&metric); err != nil {
return math.NaN()
}
return metric.Histogram.GetSampleSum()
}
type ctxKeyType string
var (
allMetricKey ctxKeyType = "all-metrics"
commonMetricKey ctxKeyType = "common-metrics"
)
// WithMetric returns a new context with the provided metrics.
func WithMetric(ctx context.Context, metrics *Metrics) context.Context {
return context.WithValue(
WithCommonMetric(ctx, metrics.Common),
allMetricKey, metrics)
}
// WithCommonMetric returns a new context with the provided common metrics.
func WithCommonMetric(ctx context.Context, commonMetric *Common) context.Context {
return context.WithValue(ctx, commonMetricKey, commonMetric)
}
// FromContext returns the metrics stored in the context.
func FromContext(ctx context.Context) (*Metrics, bool) {
m, ok := ctx.Value(allMetricKey).(*Metrics)
return m, ok
}
// GetCommonMetric returns the common metrics stored in the context.
func GetCommonMetric(ctx context.Context) (*Common, bool) {
m, ok := ctx.Value(commonMetricKey).(*Common)
return m, ok
}
// Copyright 2019 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package metrics
import (
metricscommon "github.com/pingcap/tidb/pkg/metrics/common"
"github.com/prometheus/client_golang/prometheus"
)
// bindinfo metrics.
var (
BindingCacheHitCounter prometheus.Counter
BindingCacheMissCounter prometheus.Counter
BindingCacheMemUsage prometheus.Gauge
BindingCacheMemLimit prometheus.Gauge
BindingCacheNumBindings prometheus.Gauge
)
// InitBindInfoMetrics initializes bindinfo metrics.
func InitBindInfoMetrics() {
BindingCacheHitCounter = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "binding_cache_hit_total",
Help: "Counter of binding cache hit.",
})
BindingCacheMissCounter = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "binding_cache_miss_total",
Help: "Counter of binding cache miss.",
})
BindingCacheMemUsage = metricscommon.NewGauge(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "binding_cache_mem_usage",
Help: "Memory usage of binding cache.",
})
BindingCacheMemLimit = metricscommon.NewGauge(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "binding_cache_mem_limit",
Help: "Memory limit of binding cache.",
})
BindingCacheNumBindings = metricscommon.NewGauge(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "binding_cache_num_bindings",
Help: "Number of bindings in binding cache.",
})
}
// Copyright 2025 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package metrics
import (
metricscommon "github.com/pingcap/tidb/pkg/metrics/common"
"github.com/prometheus/client_golang/prometheus"
)
var (
// RestoreImportFileSeconds records the time cost for importing a file.
// Including download / queuing.
RestoreImportFileSeconds prometheus.Histogram
// RestoreUploadSSTForPiTRSeconds records the time cost for uploading SST
// files during restoring for future PiTR.
RestoreUploadSSTForPiTRSeconds prometheus.Histogram
// RestoreUploadSSTMetaForPiTRSeconds records the time cost for saving metadata
// of uploaded SSTs for future PiTR.
RestoreUploadSSTMetaForPiTRSeconds prometheus.Histogram
// RestoreTableCreatedCount counts how many tables created.
RestoreTableCreatedCount prometheus.Counter
// MetaKVBatchFiles counts how many meta KV files restored in the batch
MetaKVBatchFiles *prometheus.HistogramVec
// MetaKVBatchFilteredKeys counts how many meta KV entries filtered from the batch
MetaKVBatchFilteredKeys *prometheus.HistogramVec
// MetaKVBatchKeys counts how many meta KV entries restored in the batch
MetaKVBatchKeys *prometheus.HistogramVec
// MetaKVBatchSize records the total size of the meta KV entries restored in the batch
MetaKVBatchSize *prometheus.HistogramVec
// KVApplyBatchDuration records the duration to apply the batch of KV files
KVApplyBatchDuration prometheus.Histogram
// KVApplyBatchFiles counts how many KV files restored in the batch
KVApplyBatchFiles prometheus.Histogram
// KVApplyBatchRegions counts how many regions restored in the batch of KV files
KVApplyBatchRegions prometheus.Histogram
// KVApplyBatchSize records the total size of the KV files restored in the batch
KVApplyBatchSize prometheus.Histogram
// KVApplyRegionFiles counts how many KV files restored for a region
KVApplyRegionFiles prometheus.Histogram
// KVApplyTasksEvents tracks the event of the apply tasks.
// Label: event. Possible values: "skipped", "submitted", "started", "finished".
// `submitted` - `started` = pending tasks.
// `finished` - `started` = running tasks.
KVApplyTasksEvents *prometheus.CounterVec
// KVLogFileEmittedMemory tracks the memory usage of metadata.
// Label: status. Possible values: "0-loaded", "1-split", "2-applied".
// `1-split` - `0-loaded` = file info used for splitting regions.
// `2-applied` - `1-split` = file info used for running restore tasks.
KVLogFileEmittedMemory *prometheus.CounterVec
// KVApplyRunOverRegionsEvents tracks the event of the run over regions call.
// Label: event. Possible values: "request-region", "retry-region", "retry-range", "region-success".
KVApplyRunOverRegionsEvents *prometheus.CounterVec
// KVSplitHelperMemUsage tracks the memory usage of the split helper.
KVSplitHelperMemUsage prometheus.Gauge
)
// InitBRMetrics initializes all metrics in BR.
func InitBRMetrics() {
RestoreTableCreatedCount = metricscommon.NewCounter(prometheus.CounterOpts{
Namespace: "BR",
Name: "table_created",
Help: "The count of tables have been created.",
})
RestoreImportFileSeconds = metricscommon.NewHistogram(prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "br",
Name: "restore_import_file_seconds",
Help: "The time cost for importing a file. (including the time cost in queuing)",
Buckets: prometheus.ExponentialBuckets(0.01, 4, 14),
})
RestoreUploadSSTForPiTRSeconds = metricscommon.NewHistogram(prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "br",
Name: "restore_upload_sst_for_pitr_seconds",
Help: "The time cost for uploading SST files for point-in-time recovery",
Buckets: prometheus.DefBuckets,
})
RestoreUploadSSTMetaForPiTRSeconds = metricscommon.NewHistogram(prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "br",
Name: "restore_upload_sst_meta_for_pitr_seconds",
Help: "The time cost for uploading SST metadata for point-in-time recovery",
Buckets: prometheus.ExponentialBuckets(0.01, 2, 14),
})
MetaKVBatchFiles = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "br",
Name: "meta_kv_batch_files",
Help: "The number of meta KV files in the batch",
Buckets: prometheus.ExponentialBuckets(1, 2, 12), // 1 ~ 2048
}, []string{"cf"})
MetaKVBatchFilteredKeys = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "br",
Name: "meta_kv_batch_filtered_keys",
Help: "The number of filtered meta KV entries from the batch",
Buckets: prometheus.ExponentialBuckets(1, 2, 18), // 1 ~ 128Ki
}, []string{"cf"})
MetaKVBatchKeys = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "br",
Name: "meta_kv_batch_keys",
Help: "The number of meta KV entries in the batch",
Buckets: prometheus.ExponentialBuckets(1, 2, 18), // 1 ~ 128Ki
}, []string{"cf"})
MetaKVBatchSize = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "br",
Name: "meta_kv_batch_size",
Help: "The total size of meta KV entries in the batch",
Buckets: prometheus.ExponentialBuckets(256, 2, 20), // 256 ~ 128Mi
}, []string{"cf"})
KVApplyBatchDuration = metricscommon.NewHistogram(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "br",
Name: "kv_apply_batch_duration_seconds",
Help: "The duration to apply the batch of KV files",
Buckets: prometheus.ExponentialBuckets(0.001, 2, 21), // 1ms ~ 15min
})
KVApplyBatchFiles = metricscommon.NewHistogram(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "br",
Name: "kv_apply_batch_files",
Help: "The number of KV files in the batch",
Buckets: prometheus.ExponentialBuckets(1, 2, 11), // 1 ~ 1024
})
KVApplyBatchRegions = metricscommon.NewHistogram(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "br",
Name: "kv_apply_batch_regions",
Help: "The number of regions in the range of entries in the batch of KV files",
Buckets: prometheus.ExponentialBuckets(1, 2, 12), // 1 ~ 2048
})
KVApplyBatchSize = metricscommon.NewHistogram(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "br",
Name: "kv_apply_batch_size",
Help: "The number of KV files in the batch",
Buckets: prometheus.ExponentialBuckets(1024, 2, 21), // 1KiB ~ 1GiB
})
KVApplyRegionFiles = metricscommon.NewHistogram(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "br",
Name: "kv_apply_region_files",
Help: "The number of KV files restored for a region",
Buckets: prometheus.ExponentialBuckets(1, 2, 11), // 1 ~ 1024
})
KVApplyTasksEvents = prometheus.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "br",
Name: "apply_tasks_events",
Help: "The count of events of the apply tasks.",
},
[]string{"event"},
)
KVLogFileEmittedMemory = prometheus.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "br",
Name: "kv_log_file_metadata_memory_bytes",
Help: "The memory usage of metadata for KV log files.",
},
[]string{"status"},
)
KVApplyRunOverRegionsEvents = prometheus.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "br",
Name: "apply_run_over_regions_events",
Help: "The count of events of the run over regions call.",
},
[]string{"event"},
)
KVSplitHelperMemUsage = prometheus.NewGauge(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "br",
Name: "kv_split_helper_memory_usage_bytes",
Help: "The memory usage of the split helper.",
},
)
}
// Copyright 2023 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package metricscommon
import (
"fmt"
"maps"
"strings"
"github.com/prometheus/client_golang/prometheus"
)
var constLabels prometheus.Labels
// GetConstLabels returns constant labels for metrics.
func GetConstLabels() prometheus.Labels {
return constLabels
}
// GetMergedConstLabels merges input constant labels with package-level constant labels.
func GetMergedConstLabels(in prometheus.Labels) prometheus.Labels {
res := constLabels
if len(in) > 0 {
res = make(prometheus.Labels, len(constLabels)+len(in))
// merge in and constLabels, but constLabels defined in this package has
// higher priority.
maps.Copy(res, in)
maps.Copy(res, constLabels)
}
return res
}
// SetConstLabels sets constant labels for metrics.
func SetConstLabels(kv ...string) {
if len(kv)%2 == 1 {
panic(fmt.Sprintf("got the odd number of inputs for const labels: %d", len(kv)))
}
constLabels = make(prometheus.Labels, len(kv)/2)
for i := 0; i < len(kv); i += 2 {
constLabels[strings.ToLower(kv[i])] = kv[i+1]
}
}
// NewCounter wraps a prometheus.NewCounter.
func NewCounter(opts prometheus.CounterOpts) prometheus.Counter {
opts.ConstLabels = constLabels
return prometheus.NewCounter(opts)
}
// NewCounterVec wraps a prometheus.NewCounterVec.
func NewCounterVec(opts prometheus.CounterOpts, labelNames []string) *prometheus.CounterVec {
opts.ConstLabels = constLabels
return prometheus.NewCounterVec(opts, labelNames)
}
// NewGauge wraps a prometheus.NewGauge.
func NewGauge(opts prometheus.GaugeOpts) prometheus.Gauge {
opts.ConstLabels = constLabels
return prometheus.NewGauge(opts)
}
// NewGaugeVec wraps a prometheus.NewGaugeVec.
func NewGaugeVec(opts prometheus.GaugeOpts, labelNames []string) *prometheus.GaugeVec {
opts.ConstLabels = constLabels
return prometheus.NewGaugeVec(opts, labelNames)
}
// NewHistogram wraps a prometheus.NewHistogram.
func NewHistogram(opts prometheus.HistogramOpts) prometheus.Histogram {
opts.ConstLabels = constLabels
return prometheus.NewHistogram(opts)
}
// NewHistogramVec wraps a prometheus.NewHistogramVec.
func NewHistogramVec(opts prometheus.HistogramOpts, labelNames []string) *prometheus.HistogramVec {
opts.ConstLabels = constLabels
return prometheus.NewHistogramVec(opts, labelNames)
}
// NewSummaryVec wraps a prometheus.NewSummaryVec.
func NewSummaryVec(opts prometheus.SummaryOpts, labelNames []string) *prometheus.SummaryVec {
opts.ConstLabels = constLabels
return prometheus.NewSummaryVec(opts, labelNames)
}
// NewDesc wraps a prometheus.NewDesc.
func NewDesc(fqName, help string, variableLabels []string, inConstLbls prometheus.Labels) *prometheus.Desc {
cstLabels := GetMergedConstLabels(inConstLbls)
return prometheus.NewDesc(fqName, help, variableLabels, cstLabels)
}
// Copyright 2018 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package metrics
import (
"maps"
"strconv"
"strings"
"sync"
"github.com/pingcap/tidb/pkg/lightning/metric"
metricscommon "github.com/pingcap/tidb/pkg/metrics/common"
"github.com/pingcap/tidb/pkg/util/promutil"
"github.com/prometheus/client_golang/prometheus"
)
type backfillMetricRegistry struct {
mu sync.Mutex
byTblID map[int64]map[string]struct{}
}
func (r *backfillMetricRegistry) register(tableID int64, typeLabel string) {
r.mu.Lock()
defer r.mu.Unlock()
set, ok := r.byTblID[tableID]
if !ok {
set = make(map[string]struct{}, 8)
r.byTblID[tableID] = set
}
set[typeLabel] = struct{}{}
}
func (r *backfillMetricRegistry) clear(tableID int64) []string {
r.mu.Lock()
labels, ok := r.byTblID[tableID]
if ok {
delete(r.byTblID, tableID)
}
r.mu.Unlock()
if !ok {
return nil
}
out := make([]string, 0, len(labels))
for l := range labels {
out = append(out, l)
}
return out
}
var (
mu sync.Mutex
registeredJobMetrics = make(map[int64]*metric.Common, 64)
backfillMetricsRegistry = &backfillMetricRegistry{byTblID: make(map[int64]map[string]struct{}, 64)}
)
// Metrics for the DDL package.
var (
JobsGauge *prometheus.GaugeVec
HandleJobHistogram *prometheus.HistogramVec
BatchAddIdxHistogram *prometheus.HistogramVec
SyncerInit = "init"
SyncerRestart = "restart"
SyncerClear = "clear"
SyncerRewatch = "rewatch"
StateSyncerInit = "init_global_state"
DeploySyncerHistogram *prometheus.HistogramVec
UpdateSelfVersionHistogram *prometheus.HistogramVec
OwnerUpdateGlobalVersion = "update_global_version"
OwnerCheckAllVersions = "check_all_versions"
UpdateGlobalState = "update_global_state"
OwnerHandleSyncerHistogram *prometheus.HistogramVec
// Metrics for job_worker.go.
WorkerAddDDLJob = "add_job"
DDLWorkerHistogram *prometheus.HistogramVec
// DDLRunOneStep is the label for the DDL worker operation run_one_step.
//
// if a DDL job runs successfully, the cost time is mostly in below structure:
//
// run_job
// ├─ step-1
// │ ├─ transit_one_step
// │ │ ├─ run_one_step
// │ │ │ ├─ lock_schema_ver
// │ │ │ ├─ incr_schema_ver
// │ │ │ ├─ async_notify
// │ │ ├─ other common works such as register MDL, commit, etc.
// │ ├─ wait_schema_synced
// │ ├─ clean_mdl_info
// ├─ step-2/3/4 ... similar as above -> done state
// ├─ handle_job_done
DDLRunOneStep = "run_one_step"
DDLWaitSchemaSynced = "wait_schema_synced"
DDLIncrSchemaVerOpHist prometheus.Observer
DDLLockSchemaVerOpHist prometheus.Observer
DDLRunJobOpHist prometheus.Observer
DDLHandleJobDoneOpHist prometheus.Observer
DDLTransitOneStepOpHist prometheus.Observer
DDLLockVerDurationHist prometheus.Observer
DDLCleanMDLInfoHist prometheus.Observer
RetryableErrorCount *prometheus.CounterVec
CreateDDLInstance = "create_ddl_instance"
CreateDDL = "create_ddl"
DDLOwner = "owner"
DDLCounter *prometheus.CounterVec
BackfillTotalCounter *prometheus.CounterVec
BackfillProgressGauge *prometheus.GaugeVec
DDLJobTableDuration *prometheus.HistogramVec
DDLRunningJobCount *prometheus.GaugeVec
AddIndexScanRate *prometheus.HistogramVec
)
// InitDDLMetrics initializes defines DDL metrics.
func InitDDLMetrics() {
JobsGauge = metricscommon.NewGaugeVec(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "ddl",
Name: "waiting_jobs",
Help: "Gauge of jobs.",
}, []string{LblType})
HandleJobHistogram = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "ddl",
Name: "handle_job_duration_seconds",
Help: "Bucketed histogram of processing time (s) of handle jobs",
Buckets: prometheus.ExponentialBuckets(0.01, 2, 24), // 10ms ~ 24hours
}, []string{LblType, LblResult})
BatchAddIdxHistogram = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "ddl",
Name: "batch_add_idx_duration_seconds",
Help: "Bucketed histogram of processing time (s) of batch handle data",
Buckets: prometheus.ExponentialBuckets(0.001, 2, 28), // 1ms ~ 1.5days
}, []string{LblType})
DeploySyncerHistogram = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "ddl",
Name: "deploy_syncer_duration_seconds",
Help: "Bucketed histogram of processing time (s) of deploy syncer",
Buckets: prometheus.ExponentialBuckets(0.001, 2, 20), // 1ms ~ 524s
}, []string{LblType, LblResult})
UpdateSelfVersionHistogram = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "ddl",
Name: "update_self_ver_duration_seconds",
Help: "Bucketed histogram of processing time (s) of update self version",
Buckets: prometheus.ExponentialBuckets(0.001, 2, 20), // 1ms ~ 524s
}, []string{LblResult})
OwnerHandleSyncerHistogram = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "ddl",
Name: "owner_handle_syncer_duration_seconds",
Help: "Bucketed histogram of processing time (s) of handle syncer",
Buckets: prometheus.ExponentialBuckets(0.001, 2, 20), // 1ms ~ 524s
}, []string{LblType, LblResult})
DDLWorkerHistogram = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "ddl",
Name: "worker_operation_duration_seconds",
Help: "Bucketed histogram of processing time (s) of ddl worker operations",
Buckets: prometheus.ExponentialBuckets(0.001, 2, 28), // 1ms ~ 1.5days
}, []string{LblType, LblAction, LblResult})
DDLCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "ddl",
Name: "worker_operation_total",
Help: "Counter of creating ddl/worker and isowner.",
}, []string{LblType})
BackfillTotalCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "ddl",
Name: "add_index_total",
Help: "Speed of add index",
}, []string{LblType})
BackfillProgressGauge = metricscommon.NewGaugeVec(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "ddl",
Name: "backfill_percentage_progress",
Help: "Percentage progress of backfill",
}, []string{LblType})
DDLJobTableDuration = metricscommon.NewHistogramVec(prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "ddl",
Name: "job_table_duration_seconds",
Help: "Bucketed histogram of processing time (s) of the 3 DDL job tables",
Buckets: prometheus.ExponentialBuckets(0.001, 2, 20), // 1ms ~ 524s
}, []string{LblType})
DDLRunningJobCount = metricscommon.NewGaugeVec(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "ddl",
Name: "running_job_count",
Help: "Running DDL jobs count",
}, []string{LblType})
AddIndexScanRate = metricscommon.NewHistogramVec(prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "ddl",
Name: "scan_rate",
Help: "scan rate",
Buckets: prometheus.ExponentialBuckets(0.05, 2, 20),
}, []string{LblType})
RetryableErrorCount = metricscommon.NewCounterVec(prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "ddl",
Name: "retryable_error_total",
Help: "Retryable error count during ddl.",
}, []string{LblType})
// those metrics are for diagnose performance issues of running multiple DDLs
// is a short time window, so we don't need to add label for DDL type.
DDLIncrSchemaVerOpHist = DDLWorkerHistogram.WithLabelValues("incr_schema_ver", "*", "*")
DDLLockSchemaVerOpHist = DDLWorkerHistogram.WithLabelValues("lock_schema_ver", "*", "*")
DDLRunJobOpHist = DDLWorkerHistogram.WithLabelValues("run_job", "*", "*")
DDLHandleJobDoneOpHist = DDLWorkerHistogram.WithLabelValues("handle_job_done", "*", "*")
DDLTransitOneStepOpHist = DDLWorkerHistogram.WithLabelValues("transit_one_step", "*", "*")
DDLLockVerDurationHist = DDLWorkerHistogram.WithLabelValues("lock_ver_duration", "*", "*")
DDLCleanMDLInfoHist = DDLWorkerHistogram.WithLabelValues("clean_mdl_info", "*", "*")
}
var (
// DDLAddOneTempIndexWrite records the number of writes to a temporary index.
DDLAddOneTempIndexWrite = func(connID uint64, tableID int64, doubleWrite bool) {}
// DDLCommitTempIndexWrite commits the writes to a temporary index.
DDLCommitTempIndexWrite = func(connID uint64) {}
// DDLRollbackTempIndexWrite rolls back the writes to a temporary index.
DDLRollbackTempIndexWrite = func(connID uint64) {}
// DDLResetTempIndexWrite resets the write count for a temporary index.
DDLResetTempIndexWrite = func(tblID int64) {}
// DDLClearTempIndexWrite clears the write count for a temporary index.
DDLClearTempIndexWrite = func(connID uint64) {}
// DDLSetTempIndexScanAndMerge sets the scan count and merge count for a temporary index.
DDLSetTempIndexScanAndMerge = func(tableID int64, scanCnt, mergeCnt uint64) {}
)
// Label constants.
const (
LblAction = "action"
// Used by BackfillProgressGauge
LblAddIndex = "add_index"
LblAddIndexMerge = "add_index_merge_tmp"
LblModifyColumn = "modify_column"
LblReorgPartition = "reorganize_partition"
// Used by BackfillTotalCounter
LblAddIdxRate = "add_idx_rate"
LblMergeTmpIdxRate = "merge_tmp_idx_rate"
LblCleanupIdxRate = "cleanup_idx_rate"
LblUpdateColRate = "update_col_rate"
LblReorgPartitionRate = "reorg_partition_rate"
)
// generateReorgLabel returns the label with schema name, table name and optional column/index names.
// Multiple columns/indexes can be concatenated with "+".
func generateReorgLabel(label, schemaName, tableName, colOrIdxNames string) string {
var stringBuilder strings.Builder
if len(colOrIdxNames) == 0 {
stringBuilder.Grow(len(label) + len(schemaName) + len(tableName) + 2)
} else {
stringBuilder.Grow(len(label) + len(schemaName) + len(tableName) + len(colOrIdxNames) + 3)
}
stringBuilder.WriteString(label)
stringBuilder.WriteString("-")
stringBuilder.WriteString(schemaName)
stringBuilder.WriteString("-")
stringBuilder.WriteString(tableName)
if len(colOrIdxNames) > 0 {
stringBuilder.WriteString("-")
stringBuilder.WriteString(colOrIdxNames)
}
return stringBuilder.String()
}
// GetBackfillTotalByTableID returns the Counter for the given table ID and type label.
// It also tracks the label for later cleanup.
func GetBackfillTotalByTableID(tableID int64, label, schemaName, tableName, optionalColOrIdxName string) prometheus.Counter {
typeLabel := generateReorgLabel(label, schemaName, tableName, optionalColOrIdxName)
backfillMetricsRegistry.register(tableID, typeLabel)
return BackfillTotalCounter.WithLabelValues(typeLabel)
}
// GetBackfillProgressByTableID returns the Gauge for the given table ID and type label.
// It also tracks the label for later cleanup.
func GetBackfillProgressByTableID(tableID int64, label, schemaName, tableName, optionalColOrIdxName string) prometheus.Gauge {
typeLabel := generateReorgLabel(label, schemaName, tableName, optionalColOrIdxName)
backfillMetricsRegistry.register(tableID, typeLabel)
return BackfillProgressGauge.WithLabelValues(typeLabel)
}
// DDLClearBackfillMetrics deletes all backfill-related metric series registered
// for the given table ID key.
func DDLClearBackfillMetrics(tableID int64) {
labels := backfillMetricsRegistry.clear(tableID)
for _, typeLabel := range labels {
BackfillProgressGauge.DeleteLabelValues(typeLabel)
BackfillTotalCounter.DeleteLabelValues(typeLabel)
}
}
// DDLHasBackfillMetrics reports whether there are any registered backfill metrics.
func DDLHasBackfillMetrics() bool {
backfillMetricsRegistry.mu.Lock()
defer backfillMetricsRegistry.mu.Unlock()
return len(backfillMetricsRegistry.byTblID) > 0
}
// GetBackfillLabelsForTest returns the registered label set for the given table ID.
// It is only used in tests.
func GetBackfillLabelsForTest(tableID int64) map[string]struct{} {
backfillMetricsRegistry.mu.Lock()
defer backfillMetricsRegistry.mu.Unlock()
set, ok := backfillMetricsRegistry.byTblID[tableID]
if !ok {
return nil
}
out := make(map[string]struct{}, len(set))
for k := range set {
out[k] = struct{}{}
}
return out
}
// RegisterLightningCommonMetricsForDDL returns the registered common metrics.
func RegisterLightningCommonMetricsForDDL(jobID int64) *metric.Common {
mu.Lock()
defer mu.Unlock()
if m, ok := registeredJobMetrics[jobID]; ok {
return m
}
metrics := metric.NewCommon(promutil.NewDefaultFactory(), TiDB, "ddl", prometheus.Labels{
"job_id": strconv.FormatInt(jobID, 10),
})
metrics.RegisterTo(prometheus.DefaultRegisterer)
registeredJobMetrics[jobID] = metrics
return metrics
}
// UnregisterLightningCommonMetricsForDDL unregisters the registered common metrics.
func UnregisterLightningCommonMetricsForDDL(jobID int64, metrics *metric.Common) {
if metrics == nil {
return
}
mu.Lock()
defer mu.Unlock()
metrics.UnregisterFrom(prometheus.DefaultRegisterer)
delete(registeredJobMetrics, jobID)
}
// GetRegisteredJob is used for test
func GetRegisteredJob() map[int64]*metric.Common {
mu.Lock()
defer mu.Unlock()
ret := make(map[int64]*metric.Common, len(registeredJobMetrics))
maps.Copy(ret, registeredJobMetrics)
return ret
}
// Copyright 2018 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package metrics
import (
metricscommon "github.com/pingcap/tidb/pkg/metrics/common"
"github.com/prometheus/client_golang/prometheus"
)
// distsql metrics.
var (
DistSQLQueryHistogram *prometheus.HistogramVec
DistSQLScanKeysPartialHistogram prometheus.Histogram
DistSQLScanKeysHistogram prometheus.Histogram
DistSQLPartialCountHistogram prometheus.Histogram
DistSQLCoprCacheCounter *prometheus.CounterVec
DistSQLCoprClosestReadCounter *prometheus.CounterVec
DistSQLCoprRespBodySize *prometheus.HistogramVec
)
// InitDistSQLMetrics initializes distsql metrics.
func InitDistSQLMetrics() {
DistSQLQueryHistogram = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "distsql",
Name: "handle_query_duration_seconds",
Help: "Bucketed histogram of processing time (s) of handled queries.",
Buckets: prometheus.ExponentialBuckets(0.0005, 2, 29), // 0.5ms ~ 1.5days
}, []string{LblType, LblSQLType, LblCoprType})
DistSQLScanKeysPartialHistogram = metricscommon.NewHistogram(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "distsql",
Name: "scan_keys_partial_num",
Help: "number of scanned keys for each partial result.",
},
)
DistSQLScanKeysHistogram = metricscommon.NewHistogram(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "distsql",
Name: "scan_keys_num",
Help: "number of scanned keys for each query.",
},
)
DistSQLPartialCountHistogram = metricscommon.NewHistogram(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "distsql",
Name: "partial_num",
Help: "number of partial results for each query.",
},
)
DistSQLCoprCacheCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "distsql",
Name: "copr_cache",
Help: "coprocessor cache hit, evict and miss number",
}, []string{LblType})
DistSQLCoprClosestReadCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "distsql",
Name: "copr_closest_read",
Help: "counter of total copr read local read hit.",
}, []string{LblType})
DistSQLCoprRespBodySize = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "distsql",
Name: "copr_resp_size",
Help: "copr task response data size in bytes.",
Buckets: prometheus.ExponentialBuckets(1, 2, 10),
}, []string{LblStore})
}
// Copyright 2018 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package metrics
import (
metricscommon "github.com/pingcap/tidb/pkg/metrics/common"
"github.com/prometheus/client_golang/prometheus"
)
// Metrics for the domain package.
var (
// LeaseExpireTime records the lease expire time.
LeaseExpireTime prometheus.Gauge
// LoadSchemaCounter records the counter of load schema.
LoadSchemaCounter *prometheus.CounterVec
// LoadSchemaDuration records the duration of load schema.
LoadSchemaDuration *prometheus.HistogramVec
// InfoCacheCounters are the counters of get/hit.
InfoCacheCounters *prometheus.CounterVec
// InfoCacheCounterGet is the total number of getting entry.
InfoCacheCounterGet = "get"
// InfoCacheCounterHit is the cache hit numbers for get.
InfoCacheCounterHit = "hit"
// LoadPrivilegeCounter records the counter of load privilege.
LoadPrivilegeCounter *prometheus.CounterVec
// LoadSysVarCacheCounter records the counter of loading sysvars
LoadSysVarCacheCounter *prometheus.CounterVec
SchemaValidatorStop = "stop"
SchemaValidatorRestart = "restart"
SchemaValidatorReset = "reset"
SchemaValidatorCacheEmpty = "cache_empty"
SchemaValidatorCacheMiss = "cache_miss"
// HandleSchemaValidate records the counter of handling schema validate.
HandleSchemaValidate *prometheus.CounterVec
)
// InitDomainMetrics initializes domain metrics.
func InitDomainMetrics() {
LeaseExpireTime = metricscommon.NewGauge(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "domain",
Name: "lease_expire_time",
Help: "When the last time the lease is expired, it is in seconds",
})
LoadSchemaCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "domain",
Name: "load_schema_total",
Help: "Counter of load schema",
}, []string{LblType})
LoadSchemaDuration = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "domain",
Name: "load_schema_duration_seconds",
Help: "Bucketed histogram of processing time (s) in load schema.",
Buckets: prometheus.ExponentialBuckets(0.001, 2, 20), // 1ms ~ 524s
}, []string{LblAction})
InfoCacheCounters = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "domain",
Name: "infocache_counters",
Help: "Counters of infoCache: get/hit.",
}, []string{LblAction, LblType})
LoadPrivilegeCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "domain",
Name: "load_privilege_total",
Help: "Counter of load privilege",
}, []string{LblType})
LoadSysVarCacheCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "domain",
Name: "load_sysvarcache_total",
Help: "Counter of load sysvar cache",
}, []string{LblType})
HandleSchemaValidate = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "domain",
Name: "handle_schema_validate",
Help: "Counter of handle schema validate",
}, []string{LblType})
}
// Copyright 2018 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package metrics
import (
metricscommon "github.com/pingcap/tidb/pkg/metrics/common"
"github.com/prometheus/client_golang/prometheus"
)
var (
// ExecutorCounter records the number of expensive executors.
ExecutorCounter *prometheus.CounterVec
// StmtNodeCounter records the number of statement with the same type.
StmtNodeCounter *prometheus.CounterVec
// DbStmtNodeCounter records the number of statement with the same type and db.
DbStmtNodeCounter *prometheus.CounterVec
// ExecPhaseDuration records the duration of each execution phase.
ExecPhaseDuration *prometheus.SummaryVec
// OngoingTxnDurationHistogram records the duration of ongoing transactions.
OngoingTxnDurationHistogram *prometheus.HistogramVec
// MppCoordinatorStats records the number of mpp coordinator instances and related events
MppCoordinatorStats *prometheus.GaugeVec
// MppCoordinatorLatency records latencies of mpp coordinator operations.
MppCoordinatorLatency *prometheus.HistogramVec
// AffectedRowsCounter records the number of affected rows.
AffectedRowsCounter *prometheus.CounterVec
// AffectedRowsCounterInsert records the number of insert affected rows.
AffectedRowsCounterInsert prometheus.Counter
// AffectedRowsCounterUpdate records the number of update affected rows.
AffectedRowsCounterUpdate prometheus.Counter
// AffectedRowsCounterDelete records the number of delete affected rows.
AffectedRowsCounterDelete prometheus.Counter
// AffectedRowsCounterReplace records the number of replace affected rows.
AffectedRowsCounterReplace prometheus.Counter
// AffectedRowsCounterNTDMLUpdate records the number of NT-DML update affected rows.
AffectedRowsCounterNTDMLUpdate prometheus.Counter
// AffectedRowsCounterNTDMLDelete records the number of NT-DML delete affected rows.
AffectedRowsCounterNTDMLDelete prometheus.Counter
// AffectedRowsCounterNTDMLInsert records the number of NT-DML insert affected rows.
AffectedRowsCounterNTDMLInsert prometheus.Counter
// AffectedRowsCounterNTDMLReplace records the number of NT-DML replace affected rows.
AffectedRowsCounterNTDMLReplace prometheus.Counter
// NetworkTransmissionStats records the network transmission for queries
NetworkTransmissionStats *prometheus.CounterVec
// IndexLookUpExecutorDuration records the duration of index look up executor
IndexLookUpExecutorDuration *prometheus.HistogramVec
// IndexLookRowsCounter records the number of rows in index look up executor
IndexLookRowsCounter *prometheus.CounterVec
// IndexLookUpExecutorRowNumber records the number of rows scanned in one index look up executor
IndexLookUpExecutorRowNumber *prometheus.HistogramVec
// IndexLookUpCopTaskCount records the number of cop tasks in index look up executor
IndexLookUpCopTaskCount *prometheus.CounterVec
)
// InitExecutorMetrics initializes excutor metrics.
func InitExecutorMetrics() {
ExecutorCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "executor",
Name: "expensive_total",
Help: "Counter of Expensive Executors.",
}, []string{LblType},
)
StmtNodeCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "executor",
Name: "statement_total",
Help: "Counter of StmtNode.",
}, []string{LblType, LblDb, LblResourceGroup})
DbStmtNodeCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "executor",
Name: "statement_db_total",
Help: "Counter of StmtNode by Database.",
}, []string{LblDb, LblType})
ExecPhaseDuration = metricscommon.NewSummaryVec(
prometheus.SummaryOpts{
Namespace: "tidb",
Subsystem: "executor",
Name: "phase_duration_seconds",
Help: "Summary of each execution phase duration.",
}, []string{LblPhase, LblInternal})
OngoingTxnDurationHistogram = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "executor",
Name: "ongoing_txn_duration_seconds",
Help: "Bucketed histogram of processing time (s) of ongoing transactions.",
Buckets: prometheus.ExponentialBuckets(60, 2, 15), // 60s ~ 273hours
}, []string{LblType})
MppCoordinatorStats = metricscommon.NewGaugeVec(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "executor",
Name: "mpp_coordinator_stats",
Help: "Mpp Coordinator related stats",
}, []string{LblType})
MppCoordinatorLatency = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "executor",
Name: "mpp_coordinator_latency",
Help: "Bucketed histogram of processing time (ms) of mpp coordinator operations.",
Buckets: prometheus.ExponentialBuckets(0.001, 2, 28), // 1ms ~ 1.5days
}, []string{LblType})
AffectedRowsCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "executor",
Name: "affected_rows",
Help: "Counters of server affected rows.",
}, []string{LblSQLType})
AffectedRowsCounterInsert = AffectedRowsCounter.WithLabelValues("Insert")
AffectedRowsCounterUpdate = AffectedRowsCounter.WithLabelValues("Update")
AffectedRowsCounterDelete = AffectedRowsCounter.WithLabelValues("Delete")
AffectedRowsCounterReplace = AffectedRowsCounter.WithLabelValues("Replace")
AffectedRowsCounterNTDMLUpdate = AffectedRowsCounter.WithLabelValues("NTDML-Update")
AffectedRowsCounterNTDMLDelete = AffectedRowsCounter.WithLabelValues("NTDML-Delete")
AffectedRowsCounterNTDMLInsert = AffectedRowsCounter.WithLabelValues("NTDML-Insert")
AffectedRowsCounterNTDMLReplace = AffectedRowsCounter.WithLabelValues("NTDML-Replace")
NetworkTransmissionStats = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "executor",
Name: "network_transmission",
Help: "Counter of network transmission bytes.",
}, []string{LblType})
IndexLookUpExecutorDuration = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "executor",
Name: "index_lookup_execute_duration_seconds",
Help: "Bucketed histogram of processing time (s) in running index-lookup executor.",
Buckets: prometheus.ExponentialBuckets(0.0001, 2, 30), // 100us ~ 15h
}, []string{LblType})
IndexLookRowsCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "executor",
Name: "index_lookup_rows",
Help: "Counter of index lookup push-down rows.",
}, []string{LblType})
IndexLookUpExecutorRowNumber = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "executor",
Name: "index_lookup_row_number",
Help: "Row number for each index lookup executor",
Buckets: prometheus.ExponentialBuckets(1, 2, 10),
}, []string{LblType})
IndexLookUpCopTaskCount = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "executor",
Name: "index_lookup_cop_task_count",
Help: "Counter for index lookup cop tasks",
}, []string{LblType})
}
// Copyright 2017 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package metrics
import (
metricscommon "github.com/pingcap/tidb/pkg/metrics/common"
"github.com/prometheus/client_golang/prometheus"
"github.com/tikv/client-go/v2/metrics"
)
// Metrics for the GC worker.
var (
GCWorkerCounter *prometheus.CounterVec
GCHistogram *prometheus.HistogramVec
GCConfigGauge *prometheus.GaugeVec
GCJobFailureCounter *prometheus.CounterVec
GCActionRegionResultCounter *prometheus.CounterVec
GCRegionTooManyLocksCounter prometheus.Counter
GCUnsafeDestroyRangeFailuresCounterVec *prometheus.CounterVec
)
// InitGCWorkerMetrics initializes GC worker metrics.
func InitGCWorkerMetrics() {
GCWorkerCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "tikvclient",
Name: "gc_worker_actions_total",
Help: "Counter of gc worker actions.",
}, []string{"type"})
GCHistogram = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "tikvclient",
Name: "gc_seconds",
Help: "Bucketed histogram of gc duration.",
Buckets: prometheus.ExponentialBuckets(1, 2, 20), // 1s ~ 6days
}, []string{"stage"})
GCConfigGauge = metricscommon.NewGaugeVec(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "tikvclient",
Name: "gc_config",
Help: "Gauge of GC configs.",
}, []string{"type"})
GCJobFailureCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "tikvclient",
Name: "gc_failure",
Help: "Counter of gc job failure.",
}, []string{"type"})
GCActionRegionResultCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "tikvclient",
Name: "gc_action_result",
Help: "Counter of gc action result on region level.",
}, []string{"type"})
GCRegionTooManyLocksCounter = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "tikvclient",
Name: "gc_region_too_many_locks",
Help: "Counter of gc scan lock request more than once in the same region.",
})
}
// StageTotal is used in the "stage" label of GCHistogram to represent the total time of a turn of GC.
const StageTotal = "total"
func init() {
GCUnsafeDestroyRangeFailuresCounterVec = metrics.TiKVUnsafeDestroyRangeFailuresCounterVec
}
// Copyright 2023 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package metrics
import (
metricscommon "github.com/pingcap/tidb/pkg/metrics/common"
"github.com/prometheus/client_golang/prometheus"
)
var (
// GlobalSortWriteToCloudStorageDuration records the duration of writing to cloud storage.
GlobalSortWriteToCloudStorageDuration *prometheus.HistogramVec
// GlobalSortWriteToCloudStorageRate records the rate of writing to cloud storage.
GlobalSortWriteToCloudStorageRate *prometheus.HistogramVec
// GlobalSortReadFromCloudStorageDuration records the duration of reading from cloud storage.
GlobalSortReadFromCloudStorageDuration *prometheus.HistogramVec
// GlobalSortReadFromCloudStorageRate records the rate of reading from cloud storage.
GlobalSortReadFromCloudStorageRate *prometheus.HistogramVec
// GlobalSortIngestWorkerCnt records the working number of ingest workers.
GlobalSortIngestWorkerCnt *prometheus.GaugeVec
// GlobalSortUploadWorkerCount is the gauge of active parallel upload worker count.
GlobalSortUploadWorkerCount prometheus.Gauge
// MergeSortWriteBytes records the bytes written in merge sort.
MergeSortWriteBytes prometheus.Counter
// MergeSortReadBytes records the bytes read in merge sort.
MergeSortReadBytes prometheus.Counter
)
// InitGlobalSortMetrics initializes defines global sort metrics.
func InitGlobalSortMetrics() {
GlobalSortWriteToCloudStorageDuration = metricscommon.NewHistogramVec(prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "global_sort",
Name: "write_to_cloud_storage_duration",
Help: "write to cloud storage duration",
Buckets: prometheus.ExponentialBuckets(0.001, 2, 20), // 1ms ~ 524s
}, []string{LblType})
GlobalSortWriteToCloudStorageRate = metricscommon.NewHistogramVec(prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "global_sort",
Name: "write_to_cloud_storage_rate",
Help: "write to cloud storage rate",
Buckets: prometheus.ExponentialBuckets(0.05, 2, 20),
}, []string{LblType})
GlobalSortReadFromCloudStorageDuration = metricscommon.NewHistogramVec(prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "global_sort",
Name: "read_from_cloud_storage_duration",
Help: "read from cloud storage duration",
Buckets: prometheus.ExponentialBuckets(0.001, 2, 20),
}, []string{LblType})
GlobalSortReadFromCloudStorageRate = metricscommon.NewHistogramVec(prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "global_sort",
Name: "read_from_cloud_storage_rate",
Help: "read from cloud storage rate",
Buckets: prometheus.ExponentialBuckets(0.05, 2, 20),
}, []string{LblType})
GlobalSortIngestWorkerCnt = metricscommon.NewGaugeVec(prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "global_sort",
Name: "ingest_worker_cnt",
Help: "ingest worker cnt",
}, []string{LblType})
GlobalSortUploadWorkerCount = metricscommon.NewGauge(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "global_sort",
Name: "upload_worker_cnt",
Help: "Gauge of active parallel upload worker count.",
},
)
MergeSortWriteBytes = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "global_sort",
Name: "merge_sort_write_bytes",
Help: "Counter of bytes written in merge sort.",
},
)
MergeSortReadBytes = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "global_sort",
Name: "merge_sort_read_bytes",
Help: "Counter of bytes read in merge sort.",
},
)
}
// Copyright 2023 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package metrics
import (
"github.com/pingcap/tidb/pkg/lightning/metric"
metricscommon "github.com/pingcap/tidb/pkg/metrics/common"
"github.com/pingcap/tidb/pkg/util/promutil"
"github.com/prometheus/client_golang/prometheus"
)
const importMetricSubsystem = "import"
// GetRegisteredImportMetrics returns the registered import metrics.
func GetRegisteredImportMetrics(factory promutil.Factory, constLabels prometheus.Labels) *metric.Common {
mergedCstLabels := metricscommon.GetMergedConstLabels(constLabels)
metrics := metric.NewCommon(factory, TiDB, importMetricSubsystem, mergedCstLabels)
metrics.RegisterTo(prometheus.DefaultRegisterer)
return metrics
}
// UnregisterImportMetrics unregisters the registered import metrics.
func UnregisterImportMetrics(metrics *metric.Common) {
metrics.UnregisterFrom(prometheus.DefaultRegisterer)
}
// Copyright 2024 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package metrics
import (
metricscommon "github.com/pingcap/tidb/pkg/metrics/common"
"github.com/prometheus/client_golang/prometheus"
)
var (
// InfoSchemaV2CacheCounter records the counter of infoschema v2 cache hit/miss/evict.
InfoSchemaV2CacheCounter *prometheus.CounterVec
// InfoSchemaV2CacheMemUsage records the memory size of infoschema v2 cache.
InfoSchemaV2CacheMemUsage prometheus.Gauge
// InfoSchemaV2CacheObjCnt records the table count of infoschema v2 cache.
InfoSchemaV2CacheObjCnt prometheus.Gauge
// InfoSchemaV2CacheMemLimit records the memory limit of infoschema v2 cache.
InfoSchemaV2CacheMemLimit prometheus.Gauge
// TableByNameDuration records the duration of TableByName API for infoschema v2.
TableByNameDuration *prometheus.HistogramVec
// TableByNameHitDuration is TableByNameDuration with label type "hit"
TableByNameHitDuration prometheus.Observer
// TableByNameMissDuration is TableByNameDuration with label type "miss"
TableByNameMissDuration prometheus.Observer
)
// InitInfoSchemaV2Metrics intializes infoschema v2 related metrics.
func InitInfoSchemaV2Metrics() {
InfoSchemaV2CacheCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "domain",
Name: "infoschema_v2_cache",
Help: "infoschema cache v2 hit, evict and miss number",
}, []string{LblType})
InfoSchemaV2CacheObjCnt = metricscommon.NewGauge(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "domain",
Name: "infoschema_v2_cache_count",
Help: "infoschema cache v2 table count",
})
InfoSchemaV2CacheMemUsage = metricscommon.NewGauge(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "domain",
Name: "infoschema_v2_cache_size",
Help: "infoschema cache v2 size",
})
InfoSchemaV2CacheMemLimit = metricscommon.NewGauge(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "domain",
Name: "infoschema_v2_cache_limit",
Help: "infoschema cache v2 limit",
})
TableByNameDuration = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "infoschema",
Name: "table_by_name_duration_nanoseconds",
Help: "infoschema v2 TableByName API duration",
Buckets: prometheus.ExponentialBuckets(1, 2, 30), // 1us ~ 1,000,000us
}, []string{LblType})
TableByNameHitDuration = TableByNameDuration.WithLabelValues("hit")
TableByNameMissDuration = TableByNameDuration.WithLabelValues("miss")
}
// Copyright 2022 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package metrics
import (
metricscommon "github.com/pingcap/tidb/pkg/metrics/common"
"github.com/prometheus/client_golang/prometheus"
)
// log backup metrics.
// see the `Help` field for details.
var (
LastCheckpoint *prometheus.GaugeVec
AdvancerOwner prometheus.Gauge
AdvancerTickDuration *prometheus.HistogramVec
GetCheckpointBatchSize *prometheus.HistogramVec
RegionCheckpointRequest *prometheus.CounterVec
RegionCheckpointFailure *prometheus.CounterVec
RegionCheckpointSubscriptionEvent *prometheus.HistogramVec
LogBackupCurrentLastRegionID prometheus.Gauge
LogBackupCurrentLastRegionLeaderStoreID prometheus.Gauge
)
// InitLogBackupMetrics initializes log backup metrics.
func InitLogBackupMetrics() {
LastCheckpoint = metricscommon.NewGaugeVec(prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "log_backup",
Name: "last_checkpoint",
Help: "The last global checkpoint of log backup.",
}, []string{"task"})
AdvancerOwner = metricscommon.NewGauge(prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "log_backup",
Name: "advancer_owner",
Help: "If the node is the owner of advancers, set this to `1`, otherwise `0`.",
ConstLabels: map[string]string{},
})
AdvancerTickDuration = metricscommon.NewHistogramVec(prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "log_backup",
Name: "advancer_tick_duration_sec",
Help: "The time cost of each step during advancer ticking.",
Buckets: prometheus.ExponentialBuckets(0.01, 3.0, 8),
}, []string{"step"})
GetCheckpointBatchSize = metricscommon.NewHistogramVec(prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "log_backup",
Name: "advancer_batch_size",
Help: "The batch size of scanning region or get region checkpoint.",
Buckets: prometheus.ExponentialBuckets(1, 2.0, 12),
}, []string{"type"})
RegionCheckpointRequest = metricscommon.NewCounterVec(prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "log_backup",
Name: "region_request",
Help: "The failure / success stat requesting region checkpoints.",
}, []string{"result"})
RegionCheckpointFailure = metricscommon.NewCounterVec(prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "log_backup",
Name: "region_request_failure",
Help: "The failure reasons of requesting region checkpoints.",
}, []string{"reason"})
RegionCheckpointSubscriptionEvent = metricscommon.NewHistogramVec(prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "log_backup",
Name: "region_checkpoint_event",
Help: "The region flush event size.",
Buckets: prometheus.ExponentialBuckets(8, 2.0, 12),
}, []string{"store"})
LogBackupCurrentLastRegionID = metricscommon.NewGauge(prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "log_backup",
Name: "current_last_region_id",
Help: "The id of the region have minimal checkpoint ts in the current running task.",
})
LogBackupCurrentLastRegionLeaderStoreID = metricscommon.NewGauge(prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "log_backup",
Name: "current_last_region_leader_store_id",
Help: "The leader's store id of the region have minimal checkpoint ts in the current running task.",
})
}
// Copyright 2025 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package metrics
import (
"sync"
metricscommon "github.com/pingcap/tidb/pkg/metrics/common"
"github.com/prometheus/client_golang/prometheus"
)
const (
namespace = "tidb"
subsystem = "memory"
)
// Memory metrics.
var (
GlobalMemArbitrationDuration prometheus.Histogram
GlobalMemArbitratorWorkMode prometheus.GaugeVec
GlobalMemArbitratorQuota prometheus.GaugeVec
GlobalMemArbitratorWaitingTask prometheus.GaugeVec
GlobalMemArbitratorRuntimeMemMagnifi prometheus.Gauge
GlobalMemArbitratorRootPool prometheus.GaugeVec
GlobalMemArbitratorEventCounter prometheus.CounterVec
GlobalMemArbitratorSubEvents struct {
PoolInitHitDigest prometheus.Counter
PoolInitReserve prometheus.Counter
PoolInitMediumQuota prometheus.Counter
PoolInitNone prometheus.Counter
}
GlobalMemArbitratorTaskExecCounter prometheus.CounterVec
GlobalMemArbitratorSubTasks struct {
CancelWaitAverseParse prometheus.Counter
CancelWaitAversePlan prometheus.Counter
CancelStandardModeParse prometheus.Counter
CancelStandardModePlan prometheus.Counter
ForceKillParse prometheus.Counter
ForceKillPlan prometheus.Counter
NoLimit prometheus.Counter
}
counters struct {
c map[string]prometheus.Counter
sync.RWMutex
}
gauges struct {
g map[string]prometheus.Gauge
sync.RWMutex
}
)
// InitMemoryMetrics initializes the memory metrics for the global memory arbitrator.
func InitMemoryMetrics() {
GlobalMemArbitrationDuration = metricscommon.NewHistogram(prometheus.HistogramOpts{
Namespace: namespace,
Subsystem: subsystem,
Name: "arbitration_duration_seconds",
Help: "Bucketed histogram of mem quota arbitration time (s) in SQL execution",
Buckets: prometheus.ExponentialBucketsRange(0.00005 /*50us*/, 3600*24 /*1d*/, 17),
})
GlobalMemArbitratorQuota = *metricscommon.NewGaugeVec(prometheus.GaugeOpts{
Namespace: namespace,
Subsystem: subsystem,
Name: "arbitrator_quota_bytes",
Help: "Quota info of the global memory arbitrator",
}, []string{LblType})
GlobalMemArbitratorWorkMode = *metricscommon.NewGaugeVec(prometheus.GaugeOpts{
Namespace: namespace,
Subsystem: subsystem,
Name: "arbitrator_work_mode",
Help: "Work mode of the global memory arbitrator",
}, []string{LblType})
GlobalMemArbitratorWaitingTask = *metricscommon.NewGaugeVec(prometheus.GaugeOpts{
Namespace: namespace,
Subsystem: subsystem,
Name: "arbitrator_waiting_task",
Help: "Waiting task num of the global memory arbitrator",
}, []string{LblType})
GlobalMemArbitratorRuntimeMemMagnifi = metricscommon.NewGauge(prometheus.GaugeOpts{
Namespace: namespace,
Subsystem: subsystem,
Name: "arbitrator_magnifi_ratio",
Help: "Runtime profile (heapinuse vs. quota) of the global memory arbitrator",
})
GlobalMemArbitratorRootPool = *metricscommon.NewGaugeVec(prometheus.GaugeOpts{
Namespace: namespace,
Subsystem: subsystem,
Name: "arbitrator_root_pool",
Help: "Root pool info of the global memory arbitrator",
}, []string{LblType})
GlobalMemArbitratorTaskExecCounter = *metricscommon.NewCounterVec(prometheus.CounterOpts{
Namespace: namespace,
Subsystem: subsystem,
Name: "arbitrator_task_exec",
Help: "Task execution count of the global memory arbitrator",
}, []string{LblType})
GlobalMemArbitratorEventCounter = *metricscommon.NewCounterVec(prometheus.CounterOpts{
Namespace: namespace,
Subsystem: subsystem,
Name: "arbitrator_event",
Help: "Event count of the global memory arbitrator",
}, []string{LblType})
GlobalMemArbitratorSubEvents.PoolInitHitDigest = GlobalMemArbitratorEventCounter.WithLabelValues("pool-init-hit-digest")
GlobalMemArbitratorSubEvents.PoolInitReserve = GlobalMemArbitratorEventCounter.WithLabelValues("pool-init-reserve")
GlobalMemArbitratorSubEvents.PoolInitMediumQuota = GlobalMemArbitratorEventCounter.WithLabelValues("pool-init-medium-quota")
GlobalMemArbitratorSubEvents.PoolInitNone = GlobalMemArbitratorEventCounter.WithLabelValues("pool-init-none")
GlobalMemArbitratorSubTasks.CancelWaitAverseParse = GlobalMemArbitratorTaskExecCounter.WithLabelValues("cancel-wait-averse-parse")
GlobalMemArbitratorSubTasks.CancelWaitAversePlan = GlobalMemArbitratorTaskExecCounter.WithLabelValues("cancel-wait-averse-plan")
GlobalMemArbitratorSubTasks.CancelStandardModeParse = GlobalMemArbitratorTaskExecCounter.WithLabelValues("cancel-standard-mode-parse")
GlobalMemArbitratorSubTasks.CancelStandardModePlan = GlobalMemArbitratorTaskExecCounter.WithLabelValues("cancel-standard-mode-plan")
GlobalMemArbitratorSubTasks.ForceKillParse = GlobalMemArbitratorTaskExecCounter.WithLabelValues("force-kill-parse")
GlobalMemArbitratorSubTasks.ForceKillPlan = GlobalMemArbitratorTaskExecCounter.WithLabelValues("force-kill-plan")
GlobalMemArbitratorSubTasks.NoLimit = GlobalMemArbitratorTaskExecCounter.WithLabelValues("nolimit")
}
// AddGlobalMemArbitratorCounter adds a counter for the global memory arbitrator.
func AddGlobalMemArbitratorCounter(counterVec prometheus.CounterVec, taskType string, count int64) {
var c prometheus.Counter
{
counters.RLock()
c = counters.c[taskType]
counters.RUnlock()
}
if c == nil {
c = counterVec.WithLabelValues(taskType)
{
counters.Lock()
if counters.c == nil {
counters.c = make(map[string]prometheus.Counter)
}
counters.c[taskType] = c
counters.Unlock()
}
}
c.Add(float64(count))
}
// SetGlobalMemArbitratorGauge sets a gauge for the global memory arbitrator.
func SetGlobalMemArbitratorGauge(gaugeVec prometheus.GaugeVec, taskType string, value int64) {
var g prometheus.Gauge
{
gauges.RLock()
g = gauges.g[taskType]
gauges.RUnlock()
}
if g == nil {
g = gaugeVec.WithLabelValues(taskType)
{
gauges.Lock()
if gauges.g == nil {
gauges.g = make(map[string]prometheus.Gauge)
}
gauges.g[taskType] = g
gauges.Unlock()
}
}
g.Set(float64(value))
}
// ResetGlobalMemArbitratorGauge resets all gauges for the global memory arbitrator to zero.
func ResetGlobalMemArbitratorGauge() {
gauges.RLock()
defer gauges.RUnlock()
for _, g := range gauges.g {
g.Set(0)
}
}
// Copyright 2018 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package metrics
import (
metricscommon "github.com/pingcap/tidb/pkg/metrics/common"
"github.com/prometheus/client_golang/prometheus"
)
// Metrics
var (
GlobalAutoID = "global"
TableAutoIDAlloc = "alloc"
TableAutoIDRebase = "rebase"
AutoIDHistogram *prometheus.HistogramVec
GetSchemaDiff = "get_schema_diff"
SetSchemaDiff = "set_schema_diff"
GetHistoryDDLJob = "get_history_ddl_job"
MetaHistogram *prometheus.HistogramVec
ResetAutoIDConnCounter prometheus.Counter
)
// InitMetaMetrics initializes meta metrics.
func InitMetaMetrics() {
AutoIDHistogram = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "autoid",
Name: "operation_duration_seconds",
Help: "Bucketed histogram of processing time (s) of handled autoid.",
Buckets: prometheus.ExponentialBuckets(0.0005, 2, 29), // 0.5ms ~ 1.5days
}, []string{LblType, LblResult})
MetaHistogram = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "meta",
Name: "operation_duration_seconds",
Help: "Bucketed histogram of processing time (s) of tidb meta data operations.",
Buckets: prometheus.ExponentialBuckets(0.0005, 2, 29), // 0.5ms ~ 1.5days
}, []string{LblType, LblResult})
ResetAutoIDConnCounter = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "meta",
Name: "autoid_client_conn_reset_total",
Help: "Counter of resetting autoid client connection.",
})
}
// Copyright 2018 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package metrics
import (
"context"
"net"
"sync"
"github.com/pingcap/tidb/pkg/dxf/framework/dxfmetric"
"github.com/pingcap/tidb/pkg/ingestor/ingestmetric"
metricscommon "github.com/pingcap/tidb/pkg/metrics/common"
timermetrics "github.com/pingcap/tidb/pkg/timer/metrics"
"github.com/pingcap/tidb/pkg/util/intest"
"github.com/pingcap/tidb/pkg/util/logutil"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/collectors"
tikvmetrics "github.com/tikv/client-go/v2/metrics"
tikvcollectors "github.com/tikv/client-go/v2/util/collectors"
"go.uber.org/zap"
"google.golang.org/grpc"
"google.golang.org/grpc/channelz/grpc_channelz_v1"
"google.golang.org/grpc/channelz/service"
"google.golang.org/grpc/credentials/insecure"
"google.golang.org/grpc/test/bufconn"
)
var (
// PanicCounter measures the count of panics.
PanicCounter *prometheus.CounterVec
// MemoryUsage measures the usage gauge of memory.
MemoryUsage *prometheus.GaugeVec
)
// metrics labels.
const (
LabelSession = "session"
LabelDomain = "domain"
LabelDDLOwner = "ddl-owner"
LabelDDL = "ddl"
LabelDDLWorker = "ddl-worker"
LabelDistReorg = "dist-reorg"
LabelDDLSyncer = "ddl-syncer"
LabelGCWorker = "gcworker"
LabelAnalyze = "analyze"
LabelWorkerPool = "worker-pool"
LabelStats = "stats"
LabelBatchRecvLoop = "batch-recv-loop"
LabelBatchSendLoop = "batch-send-loop"
opSucc = "ok"
opFailed = "err"
TiDB = "tidb"
LabelScope = "scope"
ScopeGlobal = "global"
ScopeSession = "session"
Server = "server"
TiKVClient = "tikvclient"
)
// RetLabel returns "ok" when err == nil and "err" when err != nil.
// This could be useful when you need to observe the operation result.
func RetLabel(err error) string {
if err == nil {
return opSucc
}
return opFailed
}
func init() {
InitMetrics()
}
// InitMetrics is used to initialize metrics.
func InitMetrics() {
InitBindInfoMetrics()
InitDDLMetrics()
InitDistSQLMetrics()
InitDomainMetrics()
InitExecutorMetrics()
InitGCWorkerMetrics()
InitLogBackupMetrics()
InitMetaMetrics()
InitOwnerMetrics()
InitRawKVMetrics()
InitResourceManagerMetrics()
InitServerMetrics()
InitSessionMetrics()
InitRUV2Metrics()
InitSliMetrics()
InitStatsMetrics()
InitTelemetryMetrics()
InitTopSQLMetrics()
InitTTLMetrics()
InitStmtSummaryMetrics()
dxfmetric.InitDistTaskMetrics()
ingestmetric.InitIngestMetrics()
InitResourceGroupMetrics()
InitGlobalSortMetrics()
InitInfoSchemaV2Metrics()
InitMemoryMetrics()
timermetrics.InitTimerMetrics()
InitBRMetrics()
PanicCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "panic_total",
Help: "Counter of panic.",
}, []string{LblType})
MemoryUsage = metricscommon.NewGaugeVec(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "memory_usage",
Help: "Memory Usage",
}, []string{LblModule, LblType})
}
// RegisterMetrics registers the metrics which are ONLY used in TiDB server.
func RegisterMetrics() {
// use new go collector
prometheus.DefaultRegisterer.Unregister(collectors.NewGoCollector())
prometheus.MustRegister(collectors.NewGoCollector(collectors.WithGoCollectorRuntimeMetrics(collectors.MetricsGC, collectors.MetricsMemory, collectors.MetricsScheduler)))
prometheus.MustRegister(AutoAnalyzeCounter)
prometheus.MustRegister(ManualAnalyzeCounter)
prometheus.MustRegister(AutoAnalyzeHistogram)
prometheus.MustRegister(AutoIDHistogram)
prometheus.MustRegister(BatchAddIdxHistogram)
prometheus.MustRegister(CampaignOwnerCounter)
prometheus.MustRegister(ConnGauge)
prometheus.MustRegister(DisconnectionCounter)
prometheus.MustRegister(PreparedStmtGauge)
prometheus.MustRegister(CriticalErrorCounter)
prometheus.MustRegister(DDLCounter)
prometheus.MustRegister(BackfillTotalCounter)
prometheus.MustRegister(BackfillProgressGauge)
prometheus.MustRegister(DDLWorkerHistogram)
prometheus.MustRegister(DDLJobTableDuration)
prometheus.MustRegister(DDLRunningJobCount)
prometheus.MustRegister(DeploySyncerHistogram)
prometheus.MustRegister(DistSQLPartialCountHistogram)
prometheus.MustRegister(DistSQLCoprCacheCounter)
prometheus.MustRegister(DistSQLCoprClosestReadCounter)
prometheus.MustRegister(DistSQLCoprRespBodySize)
prometheus.MustRegister(DistSQLQueryHistogram)
prometheus.MustRegister(DistSQLScanKeysHistogram)
prometheus.MustRegister(DistSQLScanKeysPartialHistogram)
prometheus.MustRegister(ExecuteErrorCounter)
prometheus.MustRegister(ExecutorCounter)
prometheus.MustRegister(GetTokenDurationHistogram)
prometheus.MustRegister(NumOfMultiQueryHistogram)
prometheus.MustRegister(HandShakeErrorCounter)
prometheus.MustRegister(HandleJobHistogram)
prometheus.MustRegister(SyncLoadCounter)
prometheus.MustRegister(SyncLoadTimeoutCounter)
prometheus.MustRegister(SyncLoadDedupCounter)
prometheus.MustRegister(SyncLoadHistogram)
prometheus.MustRegister(ReadStatsHistogram)
prometheus.MustRegister(JobsGauge)
prometheus.MustRegister(LoadPrivilegeCounter)
prometheus.MustRegister(InfoCacheCounters)
prometheus.MustRegister(LeaseExpireTime)
prometheus.MustRegister(LoadSchemaCounter)
prometheus.MustRegister(LoadSchemaDuration)
prometheus.MustRegister(MetaHistogram)
prometheus.MustRegister(NewSessionHistogram)
prometheus.MustRegister(OwnerHandleSyncerHistogram)
prometheus.MustRegister(PanicCounter)
prometheus.MustRegister(PlanCacheCounter)
prometheus.MustRegister(PlanCacheMissCounter)
prometheus.MustRegister(PlanCacheInstanceMemoryUsage)
prometheus.MustRegister(PlanCacheInstancePlanNumCounter)
prometheus.MustRegister(PlanCacheProcessDuration)
prometheus.MustRegister(PseudoEstimation)
prometheus.MustRegister(PacketIOCounter)
prometheus.MustRegister(QueryDurationHistogram)
prometheus.MustRegister(QueryRPCHistogram)
prometheus.MustRegister(QueryProcessedKeyHistogram)
prometheus.MustRegister(QueryTotalCounter)
prometheus.MustRegister(AffectedRowsCounter)
prometheus.MustRegister(SchemaLeaseErrorCounter)
prometheus.MustRegister(ServerEventCounter)
prometheus.MustRegister(SessionExecuteCompileDuration)
prometheus.MustRegister(SessionExecuteParseDuration)
prometheus.MustRegister(SessionExecuteRunDuration)
prometheus.MustRegister(SessionRestrictedSQLCounter)
prometheus.MustRegister(SessionRetry)
prometheus.MustRegister(SessionRetryErrorCounter)
prometheus.MustRegister(StatementPerTransaction)
prometheus.MustRegister(StatsInaccuracyRate)
prometheus.MustRegister(StmtNodeCounter)
prometheus.MustRegister(DbStmtNodeCounter)
prometheus.MustRegister(ExecPhaseDuration)
prometheus.MustRegister(OngoingTxnDurationHistogram)
prometheus.MustRegister(MppCoordinatorStats)
prometheus.MustRegister(MppCoordinatorLatency)
prometheus.MustRegister(TimeJumpBackCounter)
prometheus.MustRegister(TransactionDuration)
prometheus.MustRegister(StatementDeadlockDetectDuration)
prometheus.MustRegister(StatementPessimisticRetryCount)
prometheus.MustRegister(StatementLockKeysCount)
prometheus.MustRegister(StatementSharedLockKeysCount)
prometheus.MustRegister(ValidateReadTSFromPDCount)
prometheus.MustRegister(UpdateSelfVersionHistogram)
prometheus.MustRegister(WatchOwnerCounter)
prometheus.MustRegister(GCActionRegionResultCounter)
prometheus.MustRegister(GCConfigGauge)
prometheus.MustRegister(GCHistogram)
prometheus.MustRegister(GCJobFailureCounter)
prometheus.MustRegister(GCRegionTooManyLocksCounter)
prometheus.MustRegister(GCWorkerCounter)
prometheus.MustRegister(TotalQueryProcHistogram)
prometheus.MustRegister(TotalCopProcHistogram)
prometheus.MustRegister(TotalCopWaitHistogram)
prometheus.MustRegister(CopMVCCRatioHistogram)
prometheus.MustRegister(SlowQueryCounter)
prometheus.MustRegister(HandleSchemaValidate)
prometheus.MustRegister(MaxProcs)
prometheus.MustRegister(GOGC)
prometheus.MustRegister(ConnIdleDurationHistogram)
prometheus.MustRegister(ServerInfo)
prometheus.MustRegister(TokenGauge)
prometheus.MustRegister(ConfigStatus)
prometheus.MustRegister(TiFlashQueryTotalCounter)
prometheus.MustRegister(TiFlashFailedMPPStoreState)
prometheus.MustRegister(SmallTxnWriteDuration)
prometheus.MustRegister(TxnWriteThroughput)
prometheus.MustRegister(LoadSysVarCacheCounter)
prometheus.MustRegister(TopSQLIgnoredCounter)
prometheus.MustRegister(TopSQLReportDurationHistogram)
prometheus.MustRegister(TopSQLReportDataHistogram)
prometheus.MustRegister(PDAPIExecutionHistogram)
prometheus.MustRegister(PDAPIRequestCounter)
prometheus.MustRegister(CPUProfileCounter)
prometheus.MustRegister(ReadFromTableCacheCounter)
prometheus.MustRegister(LoadTableCacheDurationHistogram)
prometheus.MustRegister(NonTransactionalDMLCount)
prometheus.MustRegister(PessimisticDMLDurationByAttempt)
prometheus.MustRegister(ResetAutoIDConnCounter)
prometheus.MustRegister(ResourceGroupQueryTotalCounter)
prometheus.MustRegister(MemoryUsage)
prometheus.MustRegister(StatsCacheCounter)
prometheus.MustRegister(StatsCacheGauge)
prometheus.MustRegister(StatsHealthyGauge)
prometheus.MustRegister(StatsDeltaLoadHistogram)
prometheus.MustRegister(StatsDeltaUpdateHistogram)
prometheus.MustRegister(StatsUsageUpdateHistogram)
prometheus.MustRegister(TxnStatusEnteringCounter)
prometheus.MustRegister(TxnDurationHistogram)
prometheus.MustRegister(LastCheckpoint)
prometheus.MustRegister(AdvancerOwner)
prometheus.MustRegister(AdvancerTickDuration)
prometheus.MustRegister(GetCheckpointBatchSize)
prometheus.MustRegister(RegionCheckpointRequest)
prometheus.MustRegister(RegionCheckpointFailure)
prometheus.MustRegister(AutoIDReqDuration)
prometheus.MustRegister(RegionCheckpointSubscriptionEvent)
prometheus.MustRegister(RCCheckTSWriteConfilictCounter)
prometheus.MustRegister(FairLockingUsageCount)
prometheus.MustRegister(PessimisticLockKeysDuration)
prometheus.MustRegister(MemoryLimit)
prometheus.MustRegister(LogBackupCurrentLastRegionID)
prometheus.MustRegister(LogBackupCurrentLastRegionLeaderStoreID)
prometheus.MustRegister(TTLQueryDuration)
prometheus.MustRegister(TTLProcessedExpiredRowsCounter)
prometheus.MustRegister(TTLJobStatus)
prometheus.MustRegister(TTLTaskStatus)
prometheus.MustRegister(TTLPhaseTime)
prometheus.MustRegister(TTLInsertRowsCount)
prometheus.MustRegister(TTLWatermarkDelay)
prometheus.MustRegister(TTLEventCounter)
prometheus.MustRegister(timermetrics.TimerEventCounter)
prometheus.MustRegister(EMACPUUsageGauge)
prometheus.MustRegister(PoolConcurrencyCounter)
prometheus.MustRegister(HistoricalStatsCounter)
prometheus.MustRegister(PlanReplayerTaskCounter)
prometheus.MustRegister(PlanReplayerRegisterTaskGauge)
dxfmetric.Register(prometheus.DefaultRegisterer)
ingestmetric.Register(prometheus.DefaultRegisterer)
prometheus.MustRegister(RunawayCheckerCounter)
prometheus.MustRegister(RunawayFlusherCounter)
prometheus.MustRegister(RunawayFlusherAddCounter)
prometheus.MustRegister(RunawayFlusherBatchSizeHistogram)
prometheus.MustRegister(RunawayFlusherDurationHistogram)
prometheus.MustRegister(RunawayFlusherIntervalHistogram)
prometheus.MustRegister(RunawaySyncerDurationHistogram)
prometheus.MustRegister(RunawaySyncerIntervalHistogram)
prometheus.MustRegister(RunawaySyncerCheckpointGauge)
prometheus.MustRegister(RunawaySyncerCounter)
prometheus.MustRegister(GlobalSortWriteToCloudStorageDuration)
prometheus.MustRegister(GlobalSortWriteToCloudStorageRate)
prometheus.MustRegister(GlobalSortReadFromCloudStorageDuration)
prometheus.MustRegister(GlobalSortReadFromCloudStorageRate)
prometheus.MustRegister(GlobalSortIngestWorkerCnt)
prometheus.MustRegister(GlobalSortUploadWorkerCount)
prometheus.MustRegister(AddIndexScanRate)
prometheus.MustRegister(RetryableErrorCount)
prometheus.MustRegister(MergeSortWriteBytes)
prometheus.MustRegister(MergeSortReadBytes)
prometheus.MustRegister(InfoSchemaV2CacheCounter)
prometheus.MustRegister(InfoSchemaV2CacheMemUsage)
prometheus.MustRegister(InfoSchemaV2CacheMemLimit)
prometheus.MustRegister(InfoSchemaV2CacheObjCnt)
prometheus.MustRegister(TableByNameDuration)
prometheus.MustRegister(BindingCacheHitCounter)
prometheus.MustRegister(BindingCacheMissCounter)
prometheus.MustRegister(BindingCacheMemUsage)
prometheus.MustRegister(BindingCacheMemLimit)
prometheus.MustRegister(BindingCacheNumBindings)
prometheus.MustRegister(InternalSessions)
prometheus.MustRegister(ActiveUser)
prometheus.MustRegister(RUV2ResultChunkCells)
prometheus.MustRegister(RUV2ExecutorL1)
prometheus.MustRegister(RUV2ExecutorL2)
prometheus.MustRegister(RUV2ExecutorL3)
prometheus.MustRegister(RUV2ExecutorL5InsertRows)
prometheus.MustRegister(RUV2PlanCnt)
prometheus.MustRegister(RUV2PlanDeriveStatsPaths)
prometheus.MustRegister(RUV2ResourceManagerReadCnt)
prometheus.MustRegister(RUV2ResourceManagerWriteCnt)
prometheus.MustRegister(RUV2SessionParserTotal)
prometheus.MustRegister(RUV2TxnCnt)
prometheus.MustRegister(RUV2TiKVKVEngineCacheMiss)
prometheus.MustRegister(RUV2TiKVCoprocessorExecutorIterations)
prometheus.MustRegister(RUV2TiKVCoprocessorResponseBytes)
prometheus.MustRegister(RUV2TiKVRaftstoreStoreWriteTriggerWB)
prometheus.MustRegister(RUV2TiKVStorageProcessedKeysBatchGet)
prometheus.MustRegister(RUV2TiKVStorageProcessedKeysGet)
prometheus.MustRegister(RUV2TiKVCoprocessorWorkTotal)
prometheus.MustRegister(NetworkTransmissionStats)
prometheus.MustRegister(RestoreTableCreatedCount)
prometheus.MustRegister(RestoreImportFileSeconds)
prometheus.MustRegister(RestoreUploadSSTForPiTRSeconds)
prometheus.MustRegister(RestoreUploadSSTMetaForPiTRSeconds)
prometheus.MustRegister(RawKVBatchPutDurationSeconds)
prometheus.MustRegister(RawKVBatchPutBatchSize)
prometheus.MustRegister(MetaKVBatchFiles)
prometheus.MustRegister(MetaKVBatchFilteredKeys)
prometheus.MustRegister(MetaKVBatchKeys)
prometheus.MustRegister(MetaKVBatchSize)
prometheus.MustRegister(KVApplyBatchDuration)
prometheus.MustRegister(KVApplyBatchFiles)
prometheus.MustRegister(KVApplyBatchRegions)
prometheus.MustRegister(KVApplyBatchSize)
prometheus.MustRegister(KVApplyRegionFiles)
tikvmetrics.InitMetricsWithConstLabels(TiDB, TiKVClient, metricscommon.GetConstLabels())
tikvmetrics.RegisterMetrics()
tikvmetrics.TiKVPanicCounter = PanicCounter // reset tidb metrics for tikv metrics
prometheus.MustRegister(GlobalMemArbitrationDuration)
prometheus.MustRegister(GlobalMemArbitratorWorkMode)
prometheus.MustRegister(GlobalMemArbitratorQuota)
prometheus.MustRegister(GlobalMemArbitratorWaitingTask)
prometheus.MustRegister(GlobalMemArbitratorRuntimeMemMagnifi)
prometheus.MustRegister(GlobalMemArbitratorRootPool)
prometheus.MustRegister(GlobalMemArbitratorEventCounter)
prometheus.MustRegister(GlobalMemArbitratorTaskExecCounter)
// TLS
prometheus.MustRegister(TLSVersion)
prometheus.MustRegister(TLSCipher)
// IndexLookup
prometheus.MustRegister(IndexLookUpExecutorDuration)
prometheus.MustRegister(IndexLookRowsCounter)
prometheus.MustRegister(IndexLookUpExecutorRowNumber)
prometheus.MustRegister(IndexLookUpCopTaskCount)
// StmtSummary
prometheus.MustRegister(StmtSummaryWindowRecordCount)
prometheus.MustRegister(StmtSummaryWindowEvictedCount)
// Channelz
setupChannelzCollector()
}
// Register registers custom collectors.
func Register(cs ...prometheus.Collector) {
prometheus.MustRegister(cs...)
}
// Unregister unregisters custom collectors.
func Unregister(cs ...prometheus.Collector) {
for _, c := range cs {
prometheus.Unregister(c)
}
}
var mode struct {
sync.Mutex
isSimplified bool
}
// ToggleSimplifiedMode is used to register/unregister the metrics that unused by grafana.
func ToggleSimplifiedMode(simplified bool) {
var unusedMetricsByGrafana = []prometheus.Collector{
StatementDeadlockDetectDuration,
ValidateReadTSFromPDCount,
LoadTableCacheDurationHistogram,
TxnWriteThroughput,
SmallTxnWriteDuration,
InfoCacheCounters,
ReadFromTableCacheCounter,
TiFlashQueryTotalCounter,
TiFlashFailedMPPStoreState,
CampaignOwnerCounter,
NonTransactionalDMLCount,
MemoryUsage,
TokenGauge,
tikvmetrics.TiKVRawkvSizeHistogram,
tikvmetrics.TiKVRawkvCmdHistogram,
tikvmetrics.TiKVReadThroughput,
tikvmetrics.TiKVSmallReadDuration,
tikvmetrics.TiKVBatchWaitOverLoad,
tikvmetrics.TiKVBatchClientRecycle,
tikvmetrics.TiKVRequestRetryTimesHistogram,
tikvmetrics.TiKVStatusDuration,
}
mode.Lock()
defer mode.Unlock()
if mode.isSimplified == simplified {
return
}
mode.isSimplified = simplified
if simplified {
for _, m := range unusedMetricsByGrafana {
prometheus.Unregister(m)
}
} else {
for _, m := range unusedMetricsByGrafana {
err := prometheus.Register(m)
if err != nil {
logutil.BgLogger().Error("cannot register metrics", zap.Error(err))
break
}
}
}
}
var grpcChannelzCollector struct {
mu sync.Mutex
listener *bufconn.Listener
server *grpc.Server
conn *grpc.ClientConn
collector prometheus.Collector
registered bool
}
func setupChannelzCollector() {
if intest.InTest {
return
}
grpcChannelzCollector.mu.Lock()
defer grpcChannelzCollector.mu.Unlock()
if err := initGrpcChannelzCollectorLocked(); err != nil {
logutil.BgLogger().Warn("setup internal channelz collector failed", zap.Error(err))
return
}
if grpcChannelzCollector.registered {
return
}
prometheus.MustRegister(grpcChannelzCollector.collector)
grpcChannelzCollector.registered = true
}
// initGrpcChannelzCollectorLocked initializes the singleton channelz collector.
// It must be called with grpcChannelzCollector.mu held.
func initGrpcChannelzCollectorLocked() error {
if grpcChannelzCollector.collector != nil {
return nil
}
grpcChannelzCollector.listener = bufconn.Listen(1 << 20)
grpcChannelzCollector.server = grpc.NewServer()
service.RegisterChannelzServiceToServer(grpcChannelzCollector.server)
go func(listener *bufconn.Listener, server *grpc.Server) {
if err := server.Serve(listener); err != nil {
logutil.BgLogger().Warn("internal channelz grpc server stopped", zap.Error(err))
}
}(grpcChannelzCollector.listener, grpcChannelzCollector.server)
listener := grpcChannelzCollector.listener
conn, err := grpc.NewClient(
"passthrough:///bufnet",
grpc.WithTransportCredentials(insecure.NewCredentials()),
grpc.WithContextDialer(func(ctx context.Context, _ string) (net.Conn, error) {
return listener.DialContext(ctx)
}),
)
if err != nil {
stopGrpcChannelzCollectorLocked()
return err
}
grpcChannelzCollector.conn = conn
grpcChannelzCollector.collector = tikvcollectors.NewChannelzCollector(conn, channelzCollectorOpts())
return nil
}
func channelzCollectorOpts() tikvcollectors.ChannelzCollectorOpts {
return tikvcollectors.ChannelzCollectorOpts{
Namespace: namespace,
Filter: func(node any) (collect bool, walkChildren bool) {
// Only collect socket and leaf subchannel info, which are more useful for troubleshooting network issues.
switch n := node.(type) {
case *grpc_channelz_v1.Channel:
if isInternalChannelzTarget(n.GetData().GetTarget()) {
return false, false
}
return false, true
case *grpc_channelz_v1.Subchannel:
if isInternalChannelzTarget(n.GetData().GetTarget()) {
return false, false
}
isLeaf := len(n.GetSocketRef()) > 0 &&
len(n.GetChannelRef()) == 0 &&
len(n.GetSubchannelRef()) == 0
return isLeaf, true
case *grpc_channelz_v1.Socket:
if isInternalChannelzSocket(n) {
return false, false
}
return true, false
default:
return false, true
}
},
}
}
// isInternalChannelzTarget returns true if the target is used for internal channelz collector, which is identified by
// the fact that its target is "bufnet" or "passthrough:///bufnet".
func isInternalChannelzTarget(target string) bool {
return target == "bufnet" || target == "passthrough:///bufnet"
}
// isInternalChannelzSocket returns true if the socket is created by the internal channelz collector for scrapping
// channelz metrics, which is identified by the fact that it has no remote endpoint.
func isInternalChannelzSocket(socket *grpc_channelz_v1.Socket) bool {
return socket.GetRemote() == nil && socket.GetRemoteName() == ""
}
func cleanupGrpcChannelzCollectorForTest() {
grpcChannelzCollector.mu.Lock()
defer grpcChannelzCollector.mu.Unlock()
stopGrpcChannelzCollectorLocked()
}
// stopGrpcChannelzCollectorLocked stops and resets the singleton channelz collector.
// It must be called with grpcChannelzCollector.mu held.
func stopGrpcChannelzCollectorLocked() {
if grpcChannelzCollector.registered && grpcChannelzCollector.collector != nil {
prometheus.Unregister(grpcChannelzCollector.collector)
}
if grpcChannelzCollector.conn != nil {
_ = grpcChannelzCollector.conn.Close()
}
if grpcChannelzCollector.server != nil {
grpcChannelzCollector.server.Stop()
}
if grpcChannelzCollector.listener != nil {
_ = grpcChannelzCollector.listener.Close()
}
grpcChannelzCollector.server = nil
grpcChannelzCollector.listener = nil
grpcChannelzCollector.conn = nil
grpcChannelzCollector.collector = nil
grpcChannelzCollector.registered = false
}
// Copyright 2018 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package metrics
import (
metricscommon "github.com/pingcap/tidb/pkg/metrics/common"
"github.com/prometheus/client_golang/prometheus"
)
// Metrics
var (
NewSessionHistogram *prometheus.HistogramVec
WatcherClosed = "watcher_closed"
Cancelled = "cancelled"
Deleted = "deleted"
PutValue = "put_value"
SessionDone = "session_done"
CtxDone = "context_done"
WatchOwnerCounter *prometheus.CounterVec
NoLongerOwner = "no_longer_owner"
CampaignOwnerCounter *prometheus.CounterVec
)
// InitOwnerMetrics initializes owner metrics.
func InitOwnerMetrics() {
NewSessionHistogram = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "owner",
Name: "new_session_duration_seconds",
Help: "Bucketed histogram of processing time (s) of new session.",
Buckets: prometheus.ExponentialBuckets(0.0005, 2, 22), // 0.5ms ~ 1048s
}, []string{LblType, LblResult})
WatchOwnerCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "owner",
Name: "watch_owner_total",
Help: "Counter of watch owner.",
}, []string{LblType, LblResult})
CampaignOwnerCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "owner",
Name: "campaign_owner_total",
Help: "Counter of campaign owner.",
}, []string{LblType, LblResult})
}
// Copyright 2025 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package metrics
import "github.com/prometheus/client_golang/prometheus"
var (
// RawKVBatchPutDurationSeconds records the time cost for batch put
RawKVBatchPutDurationSeconds *prometheus.HistogramVec
// RawKVBatchPutBatchSize records the number of kv entries in the batch put
RawKVBatchPutBatchSize *prometheus.HistogramVec
)
// InitRawKVMetrics initializes all metrics in rawkv.
func InitRawKVMetrics() {
RawKVBatchPutDurationSeconds = prometheus.NewHistogramVec(prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "rawkv",
Name: "rawkv_batch_put_duration_seconds",
Help: "The time cost batch put kvs",
Buckets: prometheus.ExponentialBuckets(0.001, 2, 17), // 1ms ~ 1min
}, []string{"cf"})
RawKVBatchPutBatchSize = prometheus.NewHistogramVec(prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "rawkv",
Name: "rawkv_batch_put_batch_size",
Help: "Number of kv entries in the batch put",
Buckets: prometheus.ExponentialBuckets(1, 2, 9), // 1 ~ 256
}, []string{"cf"})
}
// Copyright 2023 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package metrics
import (
metricscommon "github.com/pingcap/tidb/pkg/metrics/common"
"github.com/prometheus/client_golang/prometheus"
)
// Metrics
// Query duration by query is QueryDurationHistogram in `server.go`.
var (
RunawayCheckerCounter *prometheus.CounterVec
RunawayFlusherCounter *prometheus.CounterVec
RunawayFlusherAddCounter *prometheus.CounterVec
RunawayFlusherBatchSizeHistogram *prometheus.HistogramVec
RunawayFlusherDurationHistogram *prometheus.HistogramVec
RunawayFlusherIntervalHistogram *prometheus.HistogramVec
RunawaySyncerDurationHistogram *prometheus.HistogramVec
RunawaySyncerIntervalHistogram *prometheus.HistogramVec
RunawaySyncerCheckpointGauge *prometheus.GaugeVec
RunawaySyncerCounter *prometheus.CounterVec
)
// InitResourceGroupMetrics initializes resource group metrics.
func InitResourceGroupMetrics() {
RunawayCheckerCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "query_runaway_check",
Help: "Counter of query triggering runaway check.",
}, []string{LblResourceGroup, LblType, LblAction})
RunawayFlusherCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "runaway_flusher_total",
Help: "Counter of runaway flusher operations.",
}, []string{LblName, LblResult})
RunawayFlusherAddCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "runaway_flusher_add_total",
Help: "Counter of records added to runaway flusher.",
}, []string{LblName})
RunawayFlusherBatchSizeHistogram = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "runaway_flusher_batch_size",
Help: "Batch size of runaway flusher operations.",
Buckets: prometheus.ExponentialBuckets(1, 2, 10), // 1, 2, 4, ..., 512
}, []string{LblName})
RunawayFlusherDurationHistogram = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "runaway_flusher_duration_seconds",
Help: "Duration of runaway flusher operations in seconds.",
Buckets: prometheus.ExponentialBuckets(0.001, 2, 15), // 1ms ~ 16s
}, []string{LblName})
RunawayFlusherIntervalHistogram = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "runaway_flusher_interval_seconds",
Help: "Interval between runaway flusher operations in seconds.",
Buckets: prometheus.ExponentialBuckets(0.1, 2, 12), // 0.1s ~ 200s
}, []string{LblName})
RunawaySyncerDurationHistogram = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "runaway_syncer_duration_seconds",
Help: "Duration of runaway syncer read operations in seconds.",
Buckets: prometheus.ExponentialBuckets(0.001, 2, 15), // 1ms ~ 16s
}, []string{LblType})
RunawaySyncerIntervalHistogram = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "runaway_syncer_interval_seconds",
Help: "Interval between runaway syncer read operations in seconds.",
Buckets: prometheus.ExponentialBuckets(0.1, 2, 12), // 0.1s ~ 200s
}, []string{LblType})
RunawaySyncerCheckpointGauge = metricscommon.NewGaugeVec(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "runaway_syncer_checkpoint",
Help: "Current lower-bound checkpoint of runaway syncer: Unix milliseconds of the next scan window for start_time (watch) or done_time (watch_done).",
}, []string{LblType})
RunawaySyncerCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "runaway_syncer_total",
Help: "Counter of runaway syncer operations.",
}, []string{LblType, LblResult})
}
// Copyright 2022 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package metrics
import (
metricscommon "github.com/pingcap/tidb/pkg/metrics/common"
"github.com/prometheus/client_golang/prometheus"
)
var (
// EMACPUUsageGauge means exponential moving average of CPU usage
EMACPUUsageGauge prometheus.Gauge
// PoolConcurrencyCounter means how much concurrency in the pool
PoolConcurrencyCounter *prometheus.GaugeVec
)
// InitResourceManagerMetrics initializes resource manager metrics.
func InitResourceManagerMetrics() {
EMACPUUsageGauge = metricscommon.NewGauge(prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "rm",
Name: "ema_cpu_usage",
Help: "exponential moving average of CPU usage",
})
PoolConcurrencyCounter = metricscommon.NewGaugeVec(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "rm",
Name: "pool_concurrency",
Help: "How many concurrency in the pool",
}, []string{LblType})
}
// Copyright 2026 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package metrics
import (
metricscommon "github.com/pingcap/tidb/pkg/metrics/common"
"github.com/prometheus/client_golang/prometheus"
)
// RUv2 metrics.
var (
RUV2ResultChunkCells prometheus.Counter
RUV2ExecutorL1 *prometheus.CounterVec
RUV2ExecutorL2 *prometheus.CounterVec
RUV2ExecutorL3 *prometheus.CounterVec
RUV2ExecutorL5InsertRows prometheus.Counter
RUV2PlanCnt prometheus.Counter
RUV2PlanDeriveStatsPaths prometheus.Counter
RUV2ResourceManagerReadCnt prometheus.Counter
RUV2ResourceManagerWriteCnt prometheus.Counter
RUV2SessionParserTotal prometheus.Counter
RUV2TxnCnt prometheus.Counter
RUV2TiKVKVEngineCacheMiss prometheus.Counter
RUV2TiKVCoprocessorExecutorIterations prometheus.Counter
RUV2TiKVCoprocessorResponseBytes prometheus.Counter
RUV2TiKVRaftstoreStoreWriteTriggerWB prometheus.Counter
RUV2TiKVStorageProcessedKeysBatchGet prometheus.Counter
RUV2TiKVStorageProcessedKeysGet prometheus.Counter
RUV2TiKVCoprocessorWorkTotal *prometheus.CounterVec
)
// InitRUV2Metrics initializes RUv2 metrics.
func InitRUV2Metrics() {
RUV2ResultChunkCells = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "ruv2",
Name: "result_chunk_cells",
Help: "Counter of result chunk cells for RU v2.",
},
)
RUV2ExecutorL1 = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "ruv2",
Name: "executor_l1",
Help: "Counter of executor L1 input/output for RU v2.",
}, []string{LblType},
)
RUV2ExecutorL2 = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "ruv2",
Name: "executor_l2",
Help: "Counter of executor L2 input/output for RU v2.",
}, []string{LblType},
)
RUV2ExecutorL3 = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "ruv2",
Name: "executor_l3",
Help: "Counter of executor L3 input/output for RU v2.",
}, []string{LblType},
)
RUV2ExecutorL5InsertRows = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "ruv2",
Name: "executor_l5_insert_rows",
Help: "Counter of insert rows for RU v2.",
},
)
RUV2PlanCnt = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "ruv2",
Name: "plan_cnt",
Help: "Counter of plan builder executions for RU v2.",
},
)
RUV2PlanDeriveStatsPaths = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "ruv2",
Name: "plan_derive_stats_paths",
Help: "Counter of derive stats paths for RU v2.",
},
)
RUV2ResourceManagerReadCnt = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "ruv2",
Name: "resource_manager_read_cnt",
Help: "Counter of resource manager read requests for RU v2.",
},
)
RUV2ResourceManagerWriteCnt = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "ruv2",
Name: "resource_manager_write_cnt",
Help: "Counter of resource manager write requests for RU v2.",
},
)
RUV2SessionParserTotal = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "ruv2",
Name: "session_parser_total",
Help: "Counter of session parser executions for RU v2.",
},
)
RUV2TxnCnt = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "ruv2",
Name: "txn_cnt",
Help: "Counter of transactions for RU v2.",
},
)
RUV2TiKVKVEngineCacheMiss = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "ruv2",
Name: "tikv_kv_engine_cache_miss",
Help: "Counter of TiKV KV engine cache miss for RU v2.",
},
)
RUV2TiKVCoprocessorExecutorIterations = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "ruv2",
Name: "tikv_coprocessor_executor_iterations",
Help: "Counter of TiKV coprocessor executor iterations for RU v2.",
},
)
RUV2TiKVCoprocessorResponseBytes = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "ruv2",
Name: "tikv_coprocessor_response_bytes",
Help: "Counter of TiKV coprocessor response bytes for RU v2.",
},
)
RUV2TiKVRaftstoreStoreWriteTriggerWB = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "ruv2",
Name: "tikv_raftstore_store_write_trigger_wb_bytes",
Help: "Counter of TiKV raftstore write trigger WB bytes for RU v2.",
},
)
RUV2TiKVStorageProcessedKeysBatchGet = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "ruv2",
Name: "tikv_storage_processed_keys_batch_get",
Help: "Counter of TiKV storage processed keys (batch get) for RU v2.",
},
)
RUV2TiKVStorageProcessedKeysGet = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "ruv2",
Name: "tikv_storage_processed_keys_get",
Help: "Counter of TiKV storage processed keys (get) for RU v2.",
},
)
RUV2TiKVCoprocessorWorkTotal = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "ruv2",
Name: "tikv_coprocessor_executor_work_total",
Help: "Counter of TiKV coprocessor executor work for RU v2.",
}, []string{LblType},
)
}
// Copyright 2018 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package metrics
import (
"github.com/pingcap/errors"
metricscommon "github.com/pingcap/tidb/pkg/metrics/common"
"github.com/pingcap/tidb/pkg/parser/terror"
"github.com/prometheus/client_golang/prometheus"
)
var (
// ResettablePlanCacheCounterFortTest be used to support reset counter in test.
ResettablePlanCacheCounterFortTest = false
)
// Metrics
var (
PacketIOCounter *prometheus.CounterVec
QueryDurationHistogram *prometheus.HistogramVec
QueryRPCHistogram *prometheus.HistogramVec
QueryProcessedKeyHistogram *prometheus.HistogramVec
QueryTotalCounter *prometheus.CounterVec
ConnGauge *prometheus.GaugeVec
DisconnectionCounter *prometheus.CounterVec
PreparedStmtGauge prometheus.Gauge
ExecuteErrorCounter *prometheus.CounterVec
CriticalErrorCounter prometheus.Counter
ServerStart = "server-start"
ServerStop = "server-stop"
// Eventkill occurs when the server.Kill() function is called.
EventKill = "kill"
ServerEventCounter *prometheus.CounterVec
TimeJumpBackCounter prometheus.Counter
PlanCacheCounter *prometheus.CounterVec
PlanCacheMissCounter *prometheus.CounterVec
PlanCacheInstanceMemoryUsage *prometheus.GaugeVec
PlanCacheInstancePlanNumCounter *prometheus.GaugeVec
PlanCacheProcessDuration *prometheus.HistogramVec
ReadFromTableCacheCounter prometheus.Counter
HandShakeErrorCounter prometheus.Counter
GetTokenDurationHistogram prometheus.Histogram
NumOfMultiQueryHistogram prometheus.Histogram
TotalQueryProcHistogram *prometheus.HistogramVec
TotalCopProcHistogram *prometheus.HistogramVec
TotalCopWaitHistogram *prometheus.HistogramVec
CopMVCCRatioHistogram *prometheus.HistogramVec
SlowQueryCounter *prometheus.CounterVec
MaxProcs prometheus.Gauge
GOGC prometheus.Gauge
ConnIdleDurationHistogram *prometheus.HistogramVec
ServerInfo *prometheus.GaugeVec
TokenGauge prometheus.Gauge
ConfigStatus *prometheus.GaugeVec
TiFlashQueryTotalCounter *prometheus.CounterVec
TiFlashFailedMPPStoreState *prometheus.GaugeVec
PDAPIExecutionHistogram *prometheus.HistogramVec
PDAPIRequestCounter *prometheus.CounterVec
CPUProfileCounter prometheus.Counter
LoadTableCacheDurationHistogram prometheus.Histogram
RCCheckTSWriteConfilictCounter *prometheus.CounterVec
MemoryLimit prometheus.Gauge
InternalSessions prometheus.Gauge
ActiveUser prometheus.Gauge
// TLS
TLSVersion *prometheus.CounterVec
TLSCipher *prometheus.CounterVec
)
// InitServerMetrics initializes server metrics.
func InitServerMetrics() {
PacketIOCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "packet_io_bytes",
Help: "Counters of packet IO bytes.",
}, []string{LblType})
QueryDurationHistogram = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "handle_query_duration_seconds",
Help: "Bucketed histogram of processing time (s) of handled queries.",
Buckets: prometheus.ExponentialBuckets(0.0005, 2, 29), // 0.5ms ~ 1.5days
}, []string{LblSQLType, LblDb, LblResourceGroup})
QueryRPCHistogram = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "query_statement_rpc_count",
Help: "Bucketed histogram of execution rpc count of handled query statements.",
Buckets: prometheus.ExponentialBuckets(1, 1.5, 23), // 1 ~ 8388608
}, []string{LblSQLType, LblDb})
QueryProcessedKeyHistogram = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "query_statement_processed_keys",
Help: "Bucketed histogram of processed key count during the scan of handled query statements.",
Buckets: prometheus.ExponentialBuckets(1, 2, 32),
}, []string{LblSQLType, LblDb})
QueryTotalCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "query_total",
Help: "Counter of queries.",
}, []string{LblType, LblResult, LblResourceGroup})
ConnGauge = metricscommon.NewGaugeVec(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "connections",
Help: "Number of connections.",
}, []string{LblResourceGroup})
DisconnectionCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "disconnection_total",
Help: "Counter of connections disconnected.",
}, []string{LblResult})
PreparedStmtGauge = metricscommon.NewGauge(prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "prepared_stmts",
Help: "number of prepared statements.",
})
ExecuteErrorCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "execute_error_total",
Help: "Counter of execute errors.",
}, []string{LblType, LblDb, LblResourceGroup})
CriticalErrorCounter = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "critical_error_total",
Help: "Counter of critical errors.",
})
ServerEventCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "event_total",
Help: "Counter of tidb-server event.",
}, []string{LblType})
TimeJumpBackCounter = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "monitor",
Name: "time_jump_back_total",
Help: "Counter of system time jumps backward.",
})
PlanCacheCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "plan_cache_total",
Help: "Counter of query using plan cache.",
}, []string{LblType})
PlanCacheMissCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "plan_cache_miss_total",
Help: "Counter of plan cache miss.",
}, []string{LblType})
PlanCacheInstanceMemoryUsage = metricscommon.NewGaugeVec(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "plan_cache_instance_memory_usage",
Help: "Total plan cache memory usage of all sessions in a instance",
}, []string{LblType})
PlanCacheInstancePlanNumCounter = metricscommon.NewGaugeVec(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "plan_cache_instance_plan_num_total",
Help: "Counter of plan of all prepared plan cache in a instance",
}, []string{LblType})
PlanCacheProcessDuration = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "plan_cache_process_duration_seconds",
Help: "Bucketed histogram of processing time (s) of plan cache operations.",
Buckets: prometheus.ExponentialBuckets(0.001, 2, 28), // 1ms ~ 1.5days
}, []string{LblType})
ReadFromTableCacheCounter = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "read_from_tablecache_total",
Help: "Counter of query read from table cache.",
},
)
HandShakeErrorCounter = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "handshake_error_total",
Help: "Counter of hand shake error.",
},
)
GetTokenDurationHistogram = metricscommon.NewHistogram(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "get_token_duration_seconds",
Help: "Duration (us) for getting token, it should be small until concurrency limit is reached.",
Buckets: prometheus.ExponentialBuckets(1, 2, 30), // 1us ~ 528s
})
NumOfMultiQueryHistogram = metricscommon.NewHistogram(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "multi_query_num",
Help: "The number of queries contained in a multi-query statement.",
Buckets: prometheus.ExponentialBuckets(1, 2, 20), // 1 ~ 1048576
})
TotalQueryProcHistogram = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "slow_query_process_duration_seconds",
Help: "Bucketed histogram of processing time (s) of of slow queries.",
Buckets: prometheus.ExponentialBuckets(0.001, 2, 28), // 1ms ~ 1.5days
}, []string{LblSQLType})
TotalCopProcHistogram = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "slow_query_cop_duration_seconds",
Help: "Bucketed histogram of all cop processing time (s) of of slow queries.",
Buckets: prometheus.ExponentialBuckets(0.001, 2, 28), // 1ms ~ 1.5days
}, []string{LblSQLType})
TotalCopWaitHistogram = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "slow_query_wait_duration_seconds",
Help: "Bucketed histogram of all cop waiting time (s) of of slow queries.",
Buckets: prometheus.ExponentialBuckets(0.001, 2, 28), // 1ms ~ 1.5days
}, []string{LblSQLType})
CopMVCCRatioHistogram = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "slow_query_cop_mvcc_ratio",
Help: "Bucketed histogram of all cop total keys / processed keys in slow queries.",
Buckets: prometheus.ExponentialBuckets(0.5, 2, 21), // 0.5 ~ 262144
}, []string{LblSQLType})
SlowQueryCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "slow_query_total",
Help: "Counter of slow queries.",
}, []string{LblSQLType})
MaxProcs = metricscommon.NewGauge(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "maxprocs",
Help: "The value of GOMAXPROCS.",
})
GOGC = metricscommon.NewGauge(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "gogc",
Help: "The value of GOGC",
})
ConnIdleDurationHistogram = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "conn_idle_duration_seconds",
Help: "Bucketed histogram of connection idle time (s).",
Buckets: prometheus.ExponentialBuckets(0.0005, 2, 29), // 0.5ms ~ 1.5days
}, []string{LblInTxn})
ServerInfo = metricscommon.NewGaugeVec(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "info",
Help: "Indicate the tidb server info, and the value is the start timestamp (s).",
}, []string{LblVersion, LblHash})
TokenGauge = metricscommon.NewGauge(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "tokens",
Help: "The number of concurrent executing session",
},
)
ConfigStatus = metricscommon.NewGaugeVec(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "config",
Name: "status",
Help: "Status of the TiDB server configurations.",
}, []string{LblType})
TiFlashQueryTotalCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "tiflash_query_total",
Help: "Counter of TiFlash queries.",
}, []string{LblType, LblResult})
TiFlashFailedMPPStoreState = metricscommon.NewGaugeVec(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "tiflash_failed_store",
Help: "Statues of failed tiflash mpp store,-1 means detector heartbeat,0 means reachable,1 means abnormal.",
}, []string{LblAddress})
PDAPIExecutionHistogram = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "pd_api_execution_duration_seconds",
Help: "Bucketed histogram of all pd api execution time (s)",
Buckets: prometheus.ExponentialBuckets(0.001, 2, 20), // 1ms ~ 524s
}, []string{LblType})
PDAPIRequestCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "pd_api_request_total",
Help: "Counter of the pd http api requests",
}, []string{LblType, LblResult})
CPUProfileCounter = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "cpu_profile_total",
Help: "Counter of cpu profiling",
})
LoadTableCacheDurationHistogram = metricscommon.NewHistogram(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "load_table_cache_seconds",
Help: "Duration (us) for loading table cache.",
Buckets: prometheus.ExponentialBuckets(1, 2, 30), // 1us ~ 528s
})
RCCheckTSWriteConfilictCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "rc_check_ts_conflict_total",
Help: "Counter of WriteConflict caused by RCCheckTS.",
}, []string{LblType})
MemoryLimit = metricscommon.NewGauge(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "memory_quota_bytes",
Help: "The value of memory quota bytes.",
})
InternalSessions = metricscommon.NewGauge(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "internal_sessions",
Help: "The total count of internal sessions.",
})
ActiveUser = metricscommon.NewGauge(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "active_users",
Help: "The total count of active user.",
})
TLSVersion = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "tls_version",
Help: "Counter per TLS Version.",
}, []string{LblVersion})
TLSCipher = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "tls_cipher",
Help: "Counter per TLS Cipher.",
}, []string{LblCipher})
}
// ExecuteErrorToLabel converts an execute error to label.
func ExecuteErrorToLabel(err error) string {
err = errors.Cause(err)
switch x := err.(type) {
case *terror.Error:
return string(x.RFCCode())
default:
return "unknown"
}
}
// Copyright 2018 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package metrics
import (
metricscommon "github.com/pingcap/tidb/pkg/metrics/common"
"github.com/prometheus/client_golang/prometheus"
)
// Session metrics.
var (
AutoIDReqDuration prometheus.Histogram
SessionExecuteParseDuration *prometheus.HistogramVec
SessionExecuteCompileDuration *prometheus.HistogramVec
SessionExecuteRunDuration *prometheus.HistogramVec
SchemaLeaseErrorCounter *prometheus.CounterVec
SessionRetry *prometheus.HistogramVec
SessionRetryErrorCounter *prometheus.CounterVec
SessionRestrictedSQLCounter prometheus.Counter
StatementPerTransaction *prometheus.HistogramVec
TransactionDuration *prometheus.HistogramVec
StatementDeadlockDetectDuration prometheus.Histogram
StatementPessimisticRetryCount prometheus.Histogram
StatementLockKeysCount prometheus.Histogram
StatementSharedLockKeysCount prometheus.Histogram
ValidateReadTSFromPDCount prometheus.Counter
NonTransactionalDMLCount *prometheus.CounterVec
TxnStatusEnteringCounter *prometheus.CounterVec
TxnDurationHistogram *prometheus.HistogramVec
LazyPessimisticUniqueCheckSetCount prometheus.Counter
PessimisticDMLDurationByAttempt *prometheus.HistogramVec
ResourceGroupQueryTotalCounter *prometheus.CounterVec
FairLockingUsageCount *prometheus.CounterVec
PessimisticLockKeysDuration prometheus.Histogram
)
// InitSessionMetrics initializes session metrics.
func InitSessionMetrics() {
AutoIDReqDuration = metricscommon.NewHistogram(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "meta",
Name: "autoid_duration_seconds",
Help: "Bucketed histogram of processing time (s) in parse SQL.",
Buckets: prometheus.ExponentialBuckets(0.00004, 2, 28), // 40us ~ 1.5h
})
SessionExecuteParseDuration = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "session",
Name: "parse_duration_seconds",
Help: "Bucketed histogram of processing time (s) in parse SQL.",
Buckets: prometheus.ExponentialBuckets(0.00004, 2, 28), // 40us ~ 1.5h
}, []string{LblSQLType})
SessionExecuteCompileDuration = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "session",
Name: "compile_duration_seconds",
Help: "Bucketed histogram of processing time (s) in query optimize.",
// Build plan may execute the statement, or allocate table ID, so it might take a long time.
Buckets: prometheus.ExponentialBuckets(0.00004, 2, 28), // 40us ~ 1.5h
}, []string{LblSQLType})
SessionExecuteRunDuration = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "session",
Name: "execute_duration_seconds",
Help: "Bucketed histogram of processing time (s) in running executor.",
Buckets: prometheus.ExponentialBuckets(0.0001, 2, 30), // 100us ~ 15h
}, []string{LblSQLType})
SchemaLeaseErrorCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "session",
Name: "schema_lease_error_total",
Help: "Counter of schema lease error",
}, []string{LblType})
SessionRetry = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "session",
Name: "retry_num",
Help: "Bucketed histogram of session retry count.",
Buckets: prometheus.LinearBuckets(0, 1, 21), // 0 ~ 20
}, []string{LblScope})
SessionRetryErrorCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "session",
Name: "retry_error_total",
Help: "Counter of session retry error.",
}, []string{LblSQLType, LblType})
SessionRestrictedSQLCounter = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "session",
Name: "restricted_sql_total",
Help: "Counter of internal restricted sql.",
})
StatementPerTransaction = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "session",
Name: "transaction_statement_num",
Help: "Bucketed histogram of statements count in each transaction.",
Buckets: prometheus.ExponentialBuckets(1, 2, 16), // 1 ~ 32768
}, []string{LblTxnMode, LblType, LblScope})
TransactionDuration = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "session",
Name: "transaction_duration_seconds",
Help: "Bucketed histogram of a transaction execution duration, including retry.",
Buckets: prometheus.ExponentialBuckets(0.001, 2, 28), // 1ms ~ 1.5days
}, []string{LblTxnMode, LblType, LblScope})
StatementDeadlockDetectDuration = metricscommon.NewHistogram(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "session",
Name: "statement_deadlock_detect_duration_seconds",
Help: "Bucketed histogram of a statement deadlock detect duration.",
Buckets: prometheus.ExponentialBuckets(0.001, 2, 28), // 1ms ~ 1.5days
},
)
StatementPessimisticRetryCount = metricscommon.NewHistogram(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "session",
Name: "statement_pessimistic_retry_count",
Help: "Bucketed histogram of statement pessimistic retry count",
Buckets: prometheus.ExponentialBuckets(1, 2, 16), // 1 ~ 32768
})
StatementLockKeysCount = metricscommon.NewHistogram(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "session",
Name: "statement_lock_keys_count",
Help: "Keys locking for a single statement",
Buckets: prometheus.ExponentialBuckets(1, 2, 21), // 1 ~ 1048576
})
StatementSharedLockKeysCount = metricscommon.NewHistogram(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "session",
Name: "statement_shared_lock_keys_count",
Help: "Keys locking for a single statement",
Buckets: prometheus.ExponentialBuckets(1, 2, 21), // 1 ~ 1048576
})
ValidateReadTSFromPDCount = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "session",
Name: "validate_read_ts_from_pd_count",
Help: "Counter of validating read ts by getting a timestamp from PD",
})
NonTransactionalDMLCount = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "session",
Name: "non_transactional_dml_count",
Help: "Counter of non-transactional delete",
}, []string{LblType},
)
TxnStatusEnteringCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "session",
Name: "txn_state_entering_count",
Help: "How many times transactions enter this state",
}, []string{LblType},
)
TxnDurationHistogram = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "session",
Name: "txn_state_seconds",
Help: "Bucketed histogram of different states of a transaction.",
Buckets: prometheus.ExponentialBuckets(0.0005, 2, 29), // 0.5ms ~ 1.5days
}, []string{LblType, LblHasLock})
LazyPessimisticUniqueCheckSetCount = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "session",
Name: "lazy_pessimistic_unique_check_set_count",
Help: "Counter of setting tidb_constraint_check_in_place to false, note that it doesn't count the default value set by tidb config",
},
)
PessimisticDMLDurationByAttempt = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "session",
Name: "transaction_pessimistic_dml_duration_by_attempt",
Help: "Bucketed histogram of duration of pessimistic DMLs, distinguished by first attempt and retries",
Buckets: prometheus.ExponentialBuckets(0.001, 2, 28), // 1ms ~ 1.5days
}, []string{LblType, LblPhase})
ResourceGroupQueryTotalCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "session",
Name: "resource_group_query_total",
Help: "Counter of the total number of queries for the resource group",
}, []string{LblName, LblResourceGroup})
FairLockingUsageCount = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "session",
Name: "transaction_fair_locking_usage",
Help: "The counter of statements and transactions in which fair locking is used or takes effect",
}, []string{LblType})
// Moved from client-go module to tidb, to keep consistency with history versions, keep the subsystem name "tikvclient"
PessimisticLockKeysDuration = metricscommon.NewHistogram(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "tikvclient",
Name: "pessimistic_lock_keys_duration",
Buckets: prometheus.ExponentialBuckets(0.001, 2, 19), // 1ms ~ 262s, The default value of innodb_lock_wait_timeout is 50s
Help: "tidb txn pessimistic lock keys duration",
})
}
// Label constants.
const (
LblUnretryable = "unretryable"
LblReachMax = "reach_max"
LblOK = "ok"
LblError = "error"
LblCommit = "commit"
LblAbort = "abort"
LblRollback = "rollback"
LblType = "type"
LblDb = "db"
LblResult = "result"
LblSQLType = "sql_type"
LblCoprType = "copr_type"
LblGeneral = "general"
LblInternal = "internal"
LblTxnMode = "txn_mode"
LblPessimistic = "pessimistic"
LblOptimistic = "optimistic"
LblStore = "store"
LblAddress = "address"
LblBatchGet = "batch_get"
LblGet = "get"
LblLockKeys = "lock_keys"
LblInTxn = "in_txn"
LblVersion = "version"
LblHash = "hash"
LblCTEType = "cte_type"
LblAccountLock = "account_lock"
LblIdle = "idle"
LblRunning = "executing_sql"
LblLockWaiting = "waiting_for_lock"
LblCommitting = "committing"
LblRollingBack = "rolling_back"
LblHasLock = "has_lock"
LblPhase = "phase"
LblModule = "module"
LblRCReadCheckTS = "read_check"
LblRCWriteCheckTS = "write_check"
LblResourceGroup = "resource_group"
LblName = "name"
LblFairLockingTxnUsed = "txn-used"
LblFairLockingTxnEffective = "txn-effective"
LblFairLockingStmtUsed = "stmt-used"
LblFairLockingStmtEffective = "stmt-effective"
LblScope = "scope"
// For TLS
LblCipher = "cipher"
)
// Copyright 2021 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package metrics
import (
metricscommon "github.com/pingcap/tidb/pkg/metrics/common"
"github.com/prometheus/client_golang/prometheus"
)
var (
// SmallTxnWriteDuration uses to collect small transaction write duration.
SmallTxnWriteDuration prometheus.Histogram
// TxnWriteThroughput uses to collect transaction write throughput which transaction is not small.
TxnWriteThroughput prometheus.Histogram
)
// InitSliMetrics initializes sli metrics.
func InitSliMetrics() {
SmallTxnWriteDuration = metricscommon.NewHistogram(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "sli",
Name: "small_txn_write_duration_seconds",
Help: "Bucketed histogram of small transaction write time (s).",
Buckets: prometheus.ExponentialBuckets(0.001, 2, 28), // 1ms ~ 74h
})
TxnWriteThroughput = metricscommon.NewHistogram(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "sli",
Name: "txn_write_throughput",
Help: "Bucketed histogram of transaction write throughput (bytes/second).",
Buckets: prometheus.ExponentialBuckets(64, 1.3, 40), // 64 bytes/s ~ 2.3MB/s
})
}
// Copyright 2018 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package metrics
import (
metricscommon "github.com/pingcap/tidb/pkg/metrics/common"
"github.com/prometheus/client_golang/prometheus"
)
// Stats metrics.
var (
AutoAnalyzeHistogram prometheus.Histogram
AutoAnalyzeCounter *prometheus.CounterVec
ManualAnalyzeCounter *prometheus.CounterVec
StatsInaccuracyRate prometheus.Histogram
PseudoEstimation *prometheus.CounterVec
SyncLoadCounter prometheus.Counter
SyncLoadTimeoutCounter prometheus.Counter
SyncLoadDedupCounter prometheus.Counter
SyncLoadHistogram prometheus.Histogram
ReadStatsHistogram prometheus.Histogram
StatsCacheCounter *prometheus.CounterVec
StatsCacheGauge *prometheus.GaugeVec
StatsHealthyGauge *prometheus.GaugeVec
StatsDeltaLoadHistogram prometheus.Histogram
StatsDeltaUpdateHistogram prometheus.Histogram
StatsUsageUpdateHistogram prometheus.Histogram
HistoricalStatsCounter *prometheus.CounterVec
PlanReplayerTaskCounter *prometheus.CounterVec
PlanReplayerRegisterTaskGauge prometheus.Gauge
)
// InitStatsMetrics initializes stats metrics.
func InitStatsMetrics() {
AutoAnalyzeHistogram = metricscommon.NewHistogram(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "statistics",
Name: "auto_analyze_duration_seconds",
Help: "Bucketed histogram of processing time (s) of auto analyze.",
Buckets: prometheus.ExponentialBuckets(0.01, 2, 24), // 10ms ~ 24h
})
AutoAnalyzeCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "statistics",
Name: "auto_analyze_total",
Help: "Counter of auto analyze.",
}, []string{LblType})
ManualAnalyzeCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "statistics",
Name: "manual_analyze_total",
Help: "Counter of manual analyze.",
}, []string{LblType})
StatsInaccuracyRate = metricscommon.NewHistogram(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "statistics",
Name: "stats_inaccuracy_rate",
Help: "Bucketed histogram of stats inaccuracy rate.",
Buckets: prometheus.ExponentialBuckets(0.01, 2, 14),
})
PseudoEstimation = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "statistics",
Name: "pseudo_estimation_total",
Help: "Counter of pseudo estimation caused by outdated stats.",
}, []string{LblType})
SyncLoadCounter = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "statistics",
Name: "sync_load_total",
Help: "Counter of sync load.",
})
SyncLoadTimeoutCounter = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "statistics",
Name: "sync_load_timeout_total",
Help: "Counter of sync load timeout.",
})
SyncLoadDedupCounter = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "statistics",
Name: "sync_load_dedup_total",
Help: "Counter of deduplicated sync load.",
})
SyncLoadHistogram = metricscommon.NewHistogram(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "statistics",
Name: "sync_load_latency_millis",
Help: "Bucketed histogram of latency time (ms) of sync load.",
Buckets: prometheus.ExponentialBuckets(1, 2, 22), // 1ms ~ 1h
})
ReadStatsHistogram = metricscommon.NewHistogram(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "statistics",
Name: "read_stats_latency_millis",
Help: "Bucketed histogram of latency time (ms) of stats read during sync-load.",
Buckets: prometheus.ExponentialBuckets(1, 2, 22), // 1ms ~ 1h
})
StatsHealthyGauge = metricscommon.NewGaugeVec(prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "statistics",
Name: "stats_healthy",
Help: "Gauge of stats healthy",
}, []string{LblType})
HistoricalStatsCounter = metricscommon.NewCounterVec(prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "statistics",
Name: "historical_stats",
Help: "counter of the historical stats operation",
}, []string{LblType, LblResult})
PlanReplayerTaskCounter = metricscommon.NewCounterVec(prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "plan_replayer",
Name: "task",
Help: "counter of plan replayer captured task",
}, []string{LblType, LblResult})
PlanReplayerRegisterTaskGauge = metricscommon.NewGauge(prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "plan_replayer",
Name: "register_task",
Help: "gauge of plan replayer registered task",
})
StatsDeltaLoadHistogram = metricscommon.NewHistogram(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "statistics",
Name: "stats_delta_load_duration_seconds",
Help: "Bucketed histogram of processing time for the background statistics loading job",
Buckets: prometheus.ExponentialBuckets(0.01, 2, 24), // 10ms ~ 24h
},
)
StatsDeltaUpdateHistogram = metricscommon.NewHistogram(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "statistics",
Name: "stats_delta_update_duration_seconds",
Help: "Bucketed histogram of processing time for the background stats_meta update job",
Buckets: prometheus.ExponentialBuckets(0.01, 2, 24), // 10ms ~ 24h
},
)
StatsUsageUpdateHistogram = metricscommon.NewHistogram(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "statistics",
Name: "stats_usage_update_duration_seconds",
Help: "Bucketed histogram of processing time for the background stats usage update job",
Buckets: prometheus.ExponentialBuckets(0.01, 2, 24), // 10ms ~ 24h
},
)
StatsCacheCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "statistics",
Name: "stats_cache_op",
Help: "Counter for statsCache operation",
}, []string{LblType})
StatsCacheGauge = metricscommon.NewGaugeVec(prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "statistics",
Name: "stats_cache_val",
Help: "gauge of stats cache value",
}, []string{LblType})
}
// Copyright 2026 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package metrics
import (
"sync"
metricscommon "github.com/pingcap/tidb/pkg/metrics/common"
"github.com/prometheus/client_golang/prometheus"
)
// Statement summary metrics.
const (
// StmtSummaryTypeV1 marks metrics reported by the legacy statement summary implementation.
StmtSummaryTypeV1 = "v1"
// StmtSummaryTypeV2 marks metrics reported by the persistent statement summary implementation.
StmtSummaryTypeV2 = "v2"
)
var (
// StmtSummaryWindowRecordCount is a gauge that tracks the number of statement
// summary records in the current statement summary window.
StmtSummaryWindowRecordCount *prometheus.GaugeVec
// StmtSummaryWindowEvictedCount is a gauge that tracks the number of LRU
// evictions that have occurred in the current statement summary window.
// This value resets to 0 when the window rotates.
StmtSummaryWindowEvictedCount *prometheus.GaugeVec
stmtSummaryWindowRecordCountV1 prometheus.Gauge
stmtSummaryWindowRecordCountV2 prometheus.Gauge
stmtSummaryWindowEvictedCountV1 prometheus.Gauge
stmtSummaryWindowEvictedCountV2 prometheus.Gauge
stmtSummaryWindowMetricsMu sync.Mutex
)
// InitStmtSummaryMetrics initializes statement summary metrics.
func InitStmtSummaryMetrics() {
StmtSummaryWindowRecordCount = metricscommon.NewGaugeVec(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "stmt_summary",
Name: "window_record_count",
Help: "The number of statement summary records currently tracked by statement summary.",
}, []string{LblType})
StmtSummaryWindowEvictedCount = metricscommon.NewGaugeVec(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "stmt_summary",
Name: "window_evicted_count",
Help: "The number of LRU evictions in the current statement summary window.",
}, []string{LblType})
stmtSummaryWindowMetricsMu.Lock()
stmtSummaryWindowRecordCountV1 = nil
stmtSummaryWindowRecordCountV2 = nil
stmtSummaryWindowEvictedCountV1 = nil
stmtSummaryWindowEvictedCountV2 = nil
stmtSummaryWindowMetricsMu.Unlock()
}
// SetStmtSummaryWindowMetrics reports statement summary window metrics for a given implementation type.
func SetStmtSummaryWindowMetrics(typ string, recordCount, evictedCount float64) {
switch typ {
case StmtSummaryTypeV1:
recordGauge, evictedGauge := getStmtSummaryWindowMetricsLocked(typ)
recordGauge.Set(recordCount)
evictedGauge.Set(evictedCount)
case StmtSummaryTypeV2:
recordGauge, evictedGauge := getStmtSummaryWindowMetricsLocked(typ)
recordGauge.Set(recordCount)
evictedGauge.Set(evictedCount)
default:
StmtSummaryWindowRecordCount.WithLabelValues(typ).Set(recordCount)
StmtSummaryWindowEvictedCount.WithLabelValues(typ).Set(evictedCount)
}
}
func getStmtSummaryWindowMetricsLocked(typ string) (prometheus.Gauge, prometheus.Gauge) {
stmtSummaryWindowMetricsMu.Lock()
defer stmtSummaryWindowMetricsMu.Unlock()
switch typ {
case StmtSummaryTypeV1:
if stmtSummaryWindowRecordCountV1 == nil {
stmtSummaryWindowRecordCountV1 = StmtSummaryWindowRecordCount.WithLabelValues(typ)
stmtSummaryWindowEvictedCountV1 = StmtSummaryWindowEvictedCount.WithLabelValues(typ)
}
return stmtSummaryWindowRecordCountV1, stmtSummaryWindowEvictedCountV1
case StmtSummaryTypeV2:
if stmtSummaryWindowRecordCountV2 == nil {
stmtSummaryWindowRecordCountV2 = StmtSummaryWindowRecordCount.WithLabelValues(typ)
stmtSummaryWindowEvictedCountV2 = StmtSummaryWindowEvictedCount.WithLabelValues(typ)
}
return stmtSummaryWindowRecordCountV2, stmtSummaryWindowEvictedCountV2
default:
return nil, nil
}
}
// Copyright 2021 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package metrics
import (
metricscommon "github.com/pingcap/tidb/pkg/metrics/common"
"github.com/prometheus/client_golang/prometheus"
dto "github.com/prometheus/client_model/go"
)
// Metrics
var (
TelemetrySQLCTECnt *prometheus.CounterVec
TelemetryMultiSchemaChangeCnt prometheus.Counter
TelemetryTablePartitionCnt prometheus.Counter
TelemetryTablePartitionListCnt prometheus.Counter
TelemetryTablePartitionRangeCnt prometheus.Counter
TelemetryTablePartitionHashCnt prometheus.Counter
TelemetryTablePartitionRangeColumnsCnt prometheus.Counter
TelemetryTablePartitionRangeColumnsGt1Cnt prometheus.Counter
TelemetryTablePartitionRangeColumnsGt2Cnt prometheus.Counter
TelemetryTablePartitionRangeColumnsGt3Cnt prometheus.Counter
TelemetryTablePartitionListColumnsCnt prometheus.Counter
TelemetryTablePartitionMaxPartitionsCnt prometheus.Counter
TelemetryAccountLockCnt *prometheus.CounterVec
TelemetryTablePartitionCreateIntervalPartitionsCnt prometheus.Counter
TelemetryTablePartitionAddIntervalPartitionsCnt prometheus.Counter
TelemetryTablePartitionDropIntervalPartitionsCnt prometheus.Counter
TelemetryExchangePartitionCnt prometheus.Counter
TelemetryAddIndexIngestCnt prometheus.Counter
TelemetryFlashbackClusterCnt prometheus.Counter
TelemetryIndexMergeUsage prometheus.Counter
TelemetryCompactPartitionCnt prometheus.Counter
TelemetryReorganizePartitionCnt prometheus.Counter
TelemetryDistReorgCnt prometheus.Counter
TelemetryStoreBatchedQueryCnt prometheus.Counter
TelemetryBatchedQueryTaskCnt prometheus.Counter
TelemetryStoreBatchedCnt prometheus.Counter
TelemetryStoreBatchedFallbackCnt prometheus.Counter
)
// InitTelemetryMetrics initializes telemetry metrics.
func InitTelemetryMetrics() {
TelemetrySQLCTECnt = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "telemetry",
Name: "non_recursive_cte_usage",
Help: "Counter of usage of CTE",
}, []string{LblCTEType})
TelemetryMultiSchemaChangeCnt = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "telemetry",
Name: "multi_schema_change_usage",
Help: "Counter of usage of multi-schema change",
})
TelemetryTablePartitionCnt = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "telemetry",
Name: "table_partition_usage",
Help: "Counter of CREATE TABLE which includes of table partitioning",
})
TelemetryTablePartitionListCnt = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "telemetry",
Name: "table_partition_list_usage",
Help: "Counter of CREATE TABLE which includes LIST partitioning",
})
TelemetryTablePartitionRangeCnt = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "telemetry",
Name: "table_partition_range_usage",
Help: "Counter of CREATE TABLE which includes RANGE partitioning",
})
TelemetryTablePartitionHashCnt = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "telemetry",
Name: "table_partition_hash_usage",
Help: "Counter of CREATE TABLE which includes HASH partitioning",
})
TelemetryTablePartitionRangeColumnsCnt = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "telemetry",
Name: "table_partition_range_columns_usage",
Help: "Counter of CREATE TABLE which includes RANGE COLUMNS partitioning",
})
TelemetryTablePartitionRangeColumnsGt1Cnt = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "telemetry",
Name: "table_partition_range_multi_columns_usage",
Help: "Counter of CREATE TABLE which includes RANGE COLUMNS partitioning with more than one partitioning column",
})
TelemetryTablePartitionRangeColumnsGt2Cnt = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "telemetry",
Name: "table_partition_range_multi_columns_usage",
Help: "Counter of CREATE TABLE which includes RANGE COLUMNS partitioning with more than two partitioning columns",
})
TelemetryTablePartitionRangeColumnsGt3Cnt = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "telemetry",
Name: "table_partition_range_multi_columns_usage",
Help: "Counter of CREATE TABLE which includes RANGE COLUMNS partitioning with more than three partitioning columns",
})
TelemetryTablePartitionListColumnsCnt = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "telemetry",
Name: "table_partition_list_columns_usage",
Help: "Counter of CREATE TABLE which includes LIST COLUMNS partitioning",
})
TelemetryTablePartitionMaxPartitionsCnt = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "telemetry",
Name: "table_partition_max_partition_usage",
Help: "Counter of partitions created by CREATE TABLE statements",
})
TelemetryAccountLockCnt = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "telemetry",
Name: "account_lock_usage",
Help: "Counter of locked/unlocked users",
}, []string{LblAccountLock})
TelemetryTablePartitionCreateIntervalPartitionsCnt = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "telemetry",
Name: "table_partition_create_interval_partition_usage",
Help: "Counter of partitions created by CREATE TABLE INTERVAL statements",
})
TelemetryTablePartitionAddIntervalPartitionsCnt = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "telemetry",
Name: "table_partition_add_interval_partition_usage",
Help: "Counter of partitions added by ALTER TABLE LAST PARTITION statements",
})
TelemetryTablePartitionDropIntervalPartitionsCnt = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "telemetry",
Name: "table_partition_drop_interval_partition_usage",
Help: "Counter of partitions added by ALTER TABLE FIRST PARTITION statements",
})
TelemetryExchangePartitionCnt = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "telemetry",
Name: "exchange_partition_usage",
Help: "Counter of usage of exchange partition statements",
})
TelemetryAddIndexIngestCnt = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "telemetry",
Name: "add_index_ingest_usage",
Help: "Counter of usage of add index acceleration solution",
})
TelemetryFlashbackClusterCnt = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "telemetry",
Name: "flashback_cluster_usage",
Help: "Counter of usage of flashback cluster",
})
TelemetryIndexMergeUsage = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "telemetry",
Name: "index_merge_usage",
Help: "Counter of usage of index merge",
})
TelemetryCompactPartitionCnt = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "telemetry",
Name: "compact_partition_usage",
Help: "Counter of compact table partition",
})
TelemetryReorganizePartitionCnt = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "telemetry",
Name: "reorganize_partition_usage",
Help: "Counter of alter table reorganize partition",
})
TelemetryDistReorgCnt = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "telemetry",
Name: "distributed_reorg_count",
Help: "Counter of usage of distributed reorg DDL tasks count",
})
TelemetryStoreBatchedQueryCnt = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "telemetry",
Name: "store_batched_query",
Help: "Counter of queries which use store batched coprocessor tasks",
})
TelemetryBatchedQueryTaskCnt = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "telemetry",
Name: "batched_query_task",
Help: "Counter of coprocessor tasks in batched queries",
})
TelemetryStoreBatchedCnt = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "telemetry",
Name: "store_batched",
Help: "Counter of store batched coprocessor tasks",
})
TelemetryStoreBatchedFallbackCnt = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "telemetry",
Name: "store_batched_fallback",
Help: "Counter of store batched fallback coprocessor tasks",
})
}
// readCounter reads the value of a prometheus.Counter.
// Returns -1 when failing to read the value.
func readCounter(m prometheus.Counter) int64 {
// Actually, it's not recommended to read the value of prometheus metric types directly:
// https://github.com/prometheus/client_golang/issues/486#issuecomment-433345239
pb := &dto.Metric{}
// It's impossible to return an error though.
if err := m.Write(pb); err != nil {
return -1
}
return int64(pb.GetCounter().GetValue())
}
// CTEUsageCounter records the usages of CTE.
type CTEUsageCounter struct {
NonRecursiveCTEUsed int64 `json:"nonRecursiveCTEUsed"`
RecursiveUsed int64 `json:"recursiveUsed"`
NonCTEUsed int64 `json:"nonCTEUsed"`
}
// Sub returns the difference of two counters.
func (c CTEUsageCounter) Sub(rhs CTEUsageCounter) CTEUsageCounter {
return CTEUsageCounter{
NonRecursiveCTEUsed: c.NonRecursiveCTEUsed - rhs.NonRecursiveCTEUsed,
RecursiveUsed: c.RecursiveUsed - rhs.RecursiveUsed,
NonCTEUsed: c.NonCTEUsed - rhs.NonCTEUsed,
}
}
// GetCTECounter gets the TxnCommitCounter.
func GetCTECounter() CTEUsageCounter {
return CTEUsageCounter{
NonRecursiveCTEUsed: readCounter(TelemetrySQLCTECnt.With(prometheus.Labels{LblCTEType: "nonRecurCTE"})),
RecursiveUsed: readCounter(TelemetrySQLCTECnt.With(prometheus.Labels{LblCTEType: "recurCTE"})),
NonCTEUsed: readCounter(TelemetrySQLCTECnt.With(prometheus.Labels{LblCTEType: "notCTE"})),
}
}
// AccountLockCounter records the number of lock users/roles
type AccountLockCounter struct {
LockUser int64 `json:"lockUser"`
UnlockUser int64 `json:"unlockUser"`
CreateOrAlterUser int64 `json:"createOrAlterUser"`
}
// Sub returns the difference of two counters.
func (c AccountLockCounter) Sub(rhs AccountLockCounter) AccountLockCounter {
return AccountLockCounter{
LockUser: c.LockUser - rhs.LockUser,
UnlockUser: c.UnlockUser - rhs.UnlockUser,
CreateOrAlterUser: c.CreateOrAlterUser - rhs.CreateOrAlterUser,
}
}
// GetAccountLockCounter gets the AccountLockCounter
func GetAccountLockCounter() AccountLockCounter {
return AccountLockCounter{
LockUser: readCounter(TelemetryAccountLockCnt.With(prometheus.Labels{LblAccountLock: "lockUser"})),
UnlockUser: readCounter(TelemetryAccountLockCnt.With(prometheus.Labels{LblAccountLock: "unlockUser"})),
CreateOrAlterUser: readCounter(TelemetryAccountLockCnt.With(prometheus.Labels{LblAccountLock: "createOrAlterUser"})),
}
}
// MultiSchemaChangeUsageCounter records the usages of multi-schema change.
type MultiSchemaChangeUsageCounter struct {
MultiSchemaChangeUsed int64 `json:"multi_schema_change_used"`
}
// Sub returns the difference of two counters.
func (c MultiSchemaChangeUsageCounter) Sub(rhs MultiSchemaChangeUsageCounter) MultiSchemaChangeUsageCounter {
return MultiSchemaChangeUsageCounter{
MultiSchemaChangeUsed: c.MultiSchemaChangeUsed - rhs.MultiSchemaChangeUsed,
}
}
// GetMultiSchemaCounter gets the TxnCommitCounter.
func GetMultiSchemaCounter() MultiSchemaChangeUsageCounter {
return MultiSchemaChangeUsageCounter{
MultiSchemaChangeUsed: readCounter(TelemetryMultiSchemaChangeCnt),
}
}
// TablePartitionUsageCounter records the usages of table partition.
type TablePartitionUsageCounter struct {
TablePartitionCnt int64 `json:"table_partition_cnt"`
TablePartitionListCnt int64 `json:"table_partition_list_cnt"`
TablePartitionRangeCnt int64 `json:"table_partition_range_cnt"`
TablePartitionHashCnt int64 `json:"table_partition_hash_cnt"`
TablePartitionRangeColumnsCnt int64 `json:"table_partition_range_columns_cnt"`
TablePartitionRangeColumnsGt1Cnt int64 `json:"table_partition_range_columns_gt_1_cnt"`
TablePartitionRangeColumnsGt2Cnt int64 `json:"table_partition_range_columns_gt_2_cnt"`
TablePartitionRangeColumnsGt3Cnt int64 `json:"table_partition_range_columns_gt_3_cnt"`
TablePartitionListColumnsCnt int64 `json:"table_partition_list_columns_cnt"`
TablePartitionMaxPartitionsCnt int64 `json:"table_partition_max_partitions_cnt"`
TablePartitionCreateIntervalPartitionsCnt int64 `json:"table_partition_create_interval_partitions_cnt"`
TablePartitionAddIntervalPartitionsCnt int64 `json:"table_partition_add_interval_partitions_cnt"`
TablePartitionDropIntervalPartitionsCnt int64 `json:"table_partition_drop_interval_partitions_cnt"`
TablePartitionComactCnt int64 `json:"table_TablePartitionComactCnt"`
TablePartitionReorganizePartitionCnt int64 `json:"table_reorganize_partition_cnt"`
}
// ExchangePartitionUsageCounter records the usages of exchange partition.
type ExchangePartitionUsageCounter struct {
ExchangePartitionCnt int64 `json:"exchange_partition_cnt"`
}
// Sub returns the difference of two counters.
func (c ExchangePartitionUsageCounter) Sub(rhs ExchangePartitionUsageCounter) ExchangePartitionUsageCounter {
return ExchangePartitionUsageCounter{
ExchangePartitionCnt: c.ExchangePartitionCnt - rhs.ExchangePartitionCnt,
}
}
// GetExchangePartitionCounter gets the TxnCommitCounter.
func GetExchangePartitionCounter() ExchangePartitionUsageCounter {
return ExchangePartitionUsageCounter{
ExchangePartitionCnt: readCounter(TelemetryExchangePartitionCnt),
}
}
// Cal returns the difference of two counters.
func (c TablePartitionUsageCounter) Cal(rhs TablePartitionUsageCounter) TablePartitionUsageCounter {
return TablePartitionUsageCounter{
TablePartitionCnt: c.TablePartitionCnt - rhs.TablePartitionCnt,
TablePartitionListCnt: c.TablePartitionListCnt - rhs.TablePartitionListCnt,
TablePartitionRangeCnt: c.TablePartitionRangeCnt - rhs.TablePartitionRangeCnt,
TablePartitionHashCnt: c.TablePartitionHashCnt - rhs.TablePartitionHashCnt,
TablePartitionRangeColumnsCnt: c.TablePartitionRangeColumnsCnt - rhs.TablePartitionRangeColumnsCnt,
TablePartitionRangeColumnsGt1Cnt: c.TablePartitionRangeColumnsGt1Cnt - rhs.TablePartitionRangeColumnsGt1Cnt,
TablePartitionRangeColumnsGt2Cnt: c.TablePartitionRangeColumnsGt2Cnt - rhs.TablePartitionRangeColumnsGt2Cnt,
TablePartitionRangeColumnsGt3Cnt: c.TablePartitionRangeColumnsGt3Cnt - rhs.TablePartitionRangeColumnsGt3Cnt,
TablePartitionListColumnsCnt: c.TablePartitionListColumnsCnt - rhs.TablePartitionListColumnsCnt,
TablePartitionMaxPartitionsCnt: max(c.TablePartitionMaxPartitionsCnt-rhs.TablePartitionMaxPartitionsCnt, rhs.TablePartitionMaxPartitionsCnt),
TablePartitionCreateIntervalPartitionsCnt: c.TablePartitionCreateIntervalPartitionsCnt - rhs.TablePartitionCreateIntervalPartitionsCnt,
TablePartitionAddIntervalPartitionsCnt: c.TablePartitionAddIntervalPartitionsCnt - rhs.TablePartitionAddIntervalPartitionsCnt,
TablePartitionDropIntervalPartitionsCnt: c.TablePartitionDropIntervalPartitionsCnt - rhs.TablePartitionDropIntervalPartitionsCnt,
TablePartitionComactCnt: c.TablePartitionComactCnt - rhs.TablePartitionComactCnt,
TablePartitionReorganizePartitionCnt: c.TablePartitionReorganizePartitionCnt - rhs.TablePartitionReorganizePartitionCnt,
}
}
// ResetTablePartitionCounter gets the TxnCommitCounter.
func ResetTablePartitionCounter(pre TablePartitionUsageCounter) TablePartitionUsageCounter {
return TablePartitionUsageCounter{
TablePartitionCnt: readCounter(TelemetryTablePartitionCnt),
TablePartitionListCnt: readCounter(TelemetryTablePartitionListCnt),
TablePartitionRangeCnt: readCounter(TelemetryTablePartitionRangeCnt),
TablePartitionHashCnt: readCounter(TelemetryTablePartitionHashCnt),
TablePartitionRangeColumnsCnt: readCounter(TelemetryTablePartitionRangeColumnsCnt),
TablePartitionRangeColumnsGt1Cnt: readCounter(TelemetryTablePartitionRangeColumnsGt1Cnt),
TablePartitionRangeColumnsGt2Cnt: readCounter(TelemetryTablePartitionRangeColumnsGt2Cnt),
TablePartitionRangeColumnsGt3Cnt: readCounter(TelemetryTablePartitionRangeColumnsGt3Cnt),
TablePartitionListColumnsCnt: readCounter(TelemetryTablePartitionListColumnsCnt),
TablePartitionMaxPartitionsCnt: max(readCounter(TelemetryTablePartitionMaxPartitionsCnt)-pre.TablePartitionMaxPartitionsCnt, pre.TablePartitionMaxPartitionsCnt),
TablePartitionReorganizePartitionCnt: readCounter(TelemetryReorganizePartitionCnt),
}
}
// GetTablePartitionCounter gets the TxnCommitCounter.
func GetTablePartitionCounter() TablePartitionUsageCounter {
return TablePartitionUsageCounter{
TablePartitionCnt: readCounter(TelemetryTablePartitionCnt),
TablePartitionListCnt: readCounter(TelemetryTablePartitionListCnt),
TablePartitionRangeCnt: readCounter(TelemetryTablePartitionRangeCnt),
TablePartitionHashCnt: readCounter(TelemetryTablePartitionHashCnt),
TablePartitionRangeColumnsCnt: readCounter(TelemetryTablePartitionRangeColumnsCnt),
TablePartitionRangeColumnsGt1Cnt: readCounter(TelemetryTablePartitionRangeColumnsGt1Cnt),
TablePartitionRangeColumnsGt2Cnt: readCounter(TelemetryTablePartitionRangeColumnsGt2Cnt),
TablePartitionRangeColumnsGt3Cnt: readCounter(TelemetryTablePartitionRangeColumnsGt3Cnt),
TablePartitionListColumnsCnt: readCounter(TelemetryTablePartitionListColumnsCnt),
TablePartitionMaxPartitionsCnt: readCounter(TelemetryTablePartitionMaxPartitionsCnt),
TablePartitionCreateIntervalPartitionsCnt: readCounter(TelemetryTablePartitionCreateIntervalPartitionsCnt),
TablePartitionAddIntervalPartitionsCnt: readCounter(TelemetryTablePartitionAddIntervalPartitionsCnt),
TablePartitionDropIntervalPartitionsCnt: readCounter(TelemetryTablePartitionDropIntervalPartitionsCnt),
TablePartitionComactCnt: readCounter(TelemetryCompactPartitionCnt),
TablePartitionReorganizePartitionCnt: readCounter(TelemetryReorganizePartitionCnt),
}
}
// NonTransactionalStmtCounter records the usages of non-transactional statements.
type NonTransactionalStmtCounter struct {
DeleteCount int64 `json:"delete"`
UpdateCount int64 `json:"update"`
InsertCount int64 `json:"insert"`
}
// Sub returns the difference of two counters.
func (n NonTransactionalStmtCounter) Sub(rhs NonTransactionalStmtCounter) NonTransactionalStmtCounter {
return NonTransactionalStmtCounter{
DeleteCount: n.DeleteCount - rhs.DeleteCount,
UpdateCount: n.UpdateCount - rhs.UpdateCount,
InsertCount: n.InsertCount - rhs.InsertCount,
}
}
// GetNonTransactionalStmtCounter gets the NonTransactionalStmtCounter.
func GetNonTransactionalStmtCounter() NonTransactionalStmtCounter {
return NonTransactionalStmtCounter{
DeleteCount: readCounter(NonTransactionalDMLCount.With(prometheus.Labels{LblType: "delete"})),
UpdateCount: readCounter(NonTransactionalDMLCount.With(prometheus.Labels{LblType: "update"})),
InsertCount: readCounter(NonTransactionalDMLCount.With(prometheus.Labels{LblType: "insert"})),
}
}
// GetSavepointStmtCounter gets the savepoint statement executed counter.
func GetSavepointStmtCounter() int64 {
return readCounter(StmtNodeCounter.WithLabelValues("Savepoint", "", "default"))
}
// GetLazyPessimisticUniqueCheckSetCounter returns the counter of setting tidb_constraint_check_in_place_pessimistic to false.
func GetLazyPessimisticUniqueCheckSetCounter() int64 {
return readCounter(LazyPessimisticUniqueCheckSetCount)
}
// DDLUsageCounter records the usages of DDL related features.
type DDLUsageCounter struct {
AddIndexIngestUsed int64 `json:"add_index_ingest_used"`
MetadataLockUsed bool `json:"metadata_lock_used"`
FlashbackClusterUsed int64 `json:"flashback_cluster_used"`
DistReorgUsed int64 `json:"dist_reorg_used"`
}
// Sub returns the difference of two counters.
func (a DDLUsageCounter) Sub(rhs DDLUsageCounter) DDLUsageCounter {
return DDLUsageCounter{
AddIndexIngestUsed: a.AddIndexIngestUsed - rhs.AddIndexIngestUsed,
FlashbackClusterUsed: a.FlashbackClusterUsed - rhs.FlashbackClusterUsed,
DistReorgUsed: a.DistReorgUsed - rhs.DistReorgUsed,
}
}
// GetDDLUsageCounter gets the add index acceleration solution counts.
func GetDDLUsageCounter() DDLUsageCounter {
return DDLUsageCounter{
AddIndexIngestUsed: readCounter(TelemetryAddIndexIngestCnt),
FlashbackClusterUsed: readCounter(TelemetryFlashbackClusterCnt),
DistReorgUsed: readCounter(TelemetryDistReorgCnt),
}
}
// IndexMergeUsageCounter records the usages of IndexMerge feature.
type IndexMergeUsageCounter struct {
IndexMergeUsed int64 `json:"index_merge_used"`
}
// Sub returns the difference of two counters.
func (i IndexMergeUsageCounter) Sub(rhs IndexMergeUsageCounter) IndexMergeUsageCounter {
return IndexMergeUsageCounter{
IndexMergeUsed: i.IndexMergeUsed - rhs.IndexMergeUsed,
}
}
// GetIndexMergeCounter gets the IndexMerge usage counter.
func GetIndexMergeCounter() IndexMergeUsageCounter {
return IndexMergeUsageCounter{
IndexMergeUsed: readCounter(TelemetryIndexMergeUsage),
}
}
// StoreBatchCoprCounter records the usages of batch copr statements.
type StoreBatchCoprCounter struct {
// BatchSize is the global value of `tidb_store_batch_size`
BatchSize int `json:"batch_size"`
// BatchedQuery is the counter of queries that use this feature.
BatchedQuery int64 `json:"query"`
// BatchedQueryTask is the counter of total tasks in queries above.
BatchedQueryTask int64 `json:"tasks"`
// BatchedCount is the counter of successfully batched tasks.
BatchedCount int64 `json:"batched"`
// BatchedFallbackCount is the counter of fallback batched tasks by region miss.
BatchedFallbackCount int64 `json:"batched_fallback"`
}
// Sub returns the difference of two counters.
func (n StoreBatchCoprCounter) Sub(rhs StoreBatchCoprCounter) StoreBatchCoprCounter {
return StoreBatchCoprCounter{
BatchedQuery: n.BatchedQuery - rhs.BatchedQuery,
BatchedQueryTask: n.BatchedQueryTask - rhs.BatchedQueryTask,
BatchedCount: n.BatchedCount - rhs.BatchedCount,
BatchedFallbackCount: n.BatchedFallbackCount - rhs.BatchedFallbackCount,
}
}
// GetStoreBatchCoprCounter gets the IndexMerge usage counter.
func GetStoreBatchCoprCounter() StoreBatchCoprCounter {
return StoreBatchCoprCounter{
BatchedQuery: readCounter(TelemetryStoreBatchedQueryCnt),
BatchedQueryTask: readCounter(TelemetryBatchedQueryTaskCnt),
BatchedCount: readCounter(TelemetryStoreBatchedCnt),
BatchedFallbackCount: readCounter(TelemetryStoreBatchedFallbackCnt),
}
}
// FairLockingUsageCounter records the usage of Fair Locking feature of pessimistic transaction.
type FairLockingUsageCounter struct {
TxnFairLockingUsed int64 `json:"txn_fair_locking_used"`
TxnFairLockingEffective int64 `json:"txn_fair_locking_effective"`
}
// Sub returns the difference of two counters.
func (i FairLockingUsageCounter) Sub(rhs FairLockingUsageCounter) FairLockingUsageCounter {
return FairLockingUsageCounter{
TxnFairLockingUsed: i.TxnFairLockingUsed - rhs.TxnFairLockingUsed,
TxnFairLockingEffective: i.TxnFairLockingEffective - rhs.TxnFairLockingEffective,
}
}
// GetFairLockingUsageCounter returns the Fair Locking usage counter.
func GetFairLockingUsageCounter() FairLockingUsageCounter {
return FairLockingUsageCounter{
TxnFairLockingUsed: readCounter(FairLockingUsageCount.WithLabelValues(LblFairLockingTxnUsed)),
TxnFairLockingEffective: readCounter(FairLockingUsageCount.WithLabelValues(LblFairLockingTxnEffective)),
}
}
// Copyright 2021 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package metrics
import (
metricscommon "github.com/pingcap/tidb/pkg/metrics/common"
"github.com/prometheus/client_golang/prometheus"
)
// Top SQL metrics.
var (
TopSQLIgnoredCounter *prometheus.CounterVec
TopSQLReportDurationHistogram *prometheus.HistogramVec
TopSQLReportDataHistogram *prometheus.HistogramVec
)
// InitTopSQLMetrics initializes top-sql metrics.
func InitTopSQLMetrics() {
TopSQLIgnoredCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "topsql",
Name: "ignored_total",
Help: "Counter of ignored top-sql metrics (register-sql, register-plan, collect-data and report-data), normally it should be 0.",
}, []string{LblType})
TopSQLReportDurationHistogram = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "topsql",
Name: "report_duration_seconds",
Help: "Bucket histogram of reporting time (s) to the top-sql agent",
Buckets: prometheus.ExponentialBuckets(0.001, 2, 24), // 1ms ~ 2.3h
}, []string{LblType, LblResult})
TopSQLReportDataHistogram = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "topsql",
Name: "report_data_total",
Help: "Bucket histogram of reporting records/sql/plan count to the top-sql agent.",
Buckets: prometheus.ExponentialBuckets(1, 2, 20), // 1 ~ 524288
}, []string{LblType})
}
// Copyright 2022 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package metrics
import (
metricscommon "github.com/pingcap/tidb/pkg/metrics/common"
"github.com/prometheus/client_golang/prometheus"
)
// TTL metrics
var (
TTLQueryDuration *prometheus.HistogramVec
TTLProcessedExpiredRowsCounter *prometheus.CounterVec
TTLJobStatus *prometheus.GaugeVec
TTLTaskStatus *prometheus.GaugeVec
TTLPhaseTime *prometheus.CounterVec
TTLInsertRowsCount prometheus.Counter
TTLWatermarkDelay *prometheus.GaugeVec
TTLEventCounter *prometheus.CounterVec
TTLSyncTimerCounter prometheus.Counter
TTLFullRefreshTimersCounter prometheus.Counter
)
// InitTTLMetrics initializes ttl metrics.
func InitTTLMetrics() {
TTLQueryDuration = metricscommon.NewHistogramVec(
prometheus.HistogramOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "ttl_query_duration",
Help: "Bucketed histogram of processing time (s) of handled TTL queries.",
Buckets: prometheus.ExponentialBuckets(0.01, 2, 20), // 10ms ~ 1.45hour
}, []string{LblSQLType, LblResult})
TTLProcessedExpiredRowsCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "ttl_processed_expired_rows",
Help: "The count of expired rows processed in TTL jobs",
}, []string{LblSQLType, LblResult})
TTLJobStatus = metricscommon.NewGaugeVec(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "ttl_job_status",
Help: "The jobs count in the specified status",
}, []string{LblType})
TTLTaskStatus = metricscommon.NewGaugeVec(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "ttl_task_status",
Help: "The tasks count in the specified status",
}, []string{LblType})
TTLPhaseTime = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "ttl_phase_time",
Help: "The time spent in each phase",
}, []string{LblType, LblPhase})
TTLInsertRowsCount = metricscommon.NewCounter(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "ttl_insert_rows",
Help: "The count of TTL rows inserted",
})
TTLWatermarkDelay = metricscommon.NewGaugeVec(
prometheus.GaugeOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "ttl_watermark_delay",
Help: "Bucketed delay time in seconds for TTL tables.",
}, []string{LblType, LblName})
TTLEventCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "ttl_event_count",
Help: "Counter of ttl event.",
}, []string{LblType})
TTLSyncTimerCounter = TTLEventCounter.WithLabelValues("sync_one_timer")
TTLFullRefreshTimersCounter = TTLEventCounter.WithLabelValues("full_refresh_timers")
}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
// Package ast is the abstract syntax tree parsed from a SQL statement by parser.
// It can be analysed and transformed by optimizer.
package ast
import (
"io"
"github.com/pingcap/tidb/pkg/parser/charset"
"github.com/pingcap/tidb/pkg/parser/format"
"github.com/pingcap/tidb/pkg/parser/types"
)
// Node is the basic element of the AST.
// Interfaces embed Node should have 'Node' name suffix.
type Node interface {
// Restore returns the sql text from ast tree
Restore(ctx *format.RestoreCtx) error
// Accept accepts Visitor to visit itself.
// The returned node should replace original node.
// ok returns false to stop visiting.
//
// Implementation of this method should first call visitor.Enter,
// assign the returned node to its method receiver, if skipChildren returns true,
// children should be skipped. Otherwise, call its children in particular order that
// later elements depends on former elements. Finally, return visitor.Leave.
Accept(v Visitor) (node Node, ok bool)
// Text returns the utf8 encoding text of the element.
Text() string
// OriginalText returns the original text of the element.
OriginalText() string
// SetText sets original text to the Node.
SetText(enc charset.Encoding, text string)
// SetOriginTextPosition set the start offset of this node in the origin text.
// Only be called when `parser.lexer.skipPositionRecording` equals to false.
SetOriginTextPosition(offset int)
// OriginTextPosition get the start offset of this node in the origin text.
OriginTextPosition() int
}
// Flags indicates whether an expression contains certain types of expression.
const (
FlagConstant uint64 = 0
FlagHasParamMarker uint64 = 1 << iota
FlagHasFunc
FlagHasReference
FlagHasAggregateFunc
FlagHasSubquery
FlagHasVariable
FlagHasDefault
FlagPreEvaluated
FlagHasWindowFunc
)
// ExprNode is a node that can be evaluated.
// Name of implementations should have 'Expr' suffix.
type ExprNode interface {
// Node is embedded in ExprNode.
Node
// SetType sets evaluation type to the expression.
SetType(tp *types.FieldType)
// GetType gets the evaluation type of the expression.
GetType() *types.FieldType
// SetFlag sets flag to the expression.
// Flag indicates whether the expression contains
// parameter marker, reference, aggregate function...
SetFlag(flag uint64)
// GetFlag returns the flag of the expression.
GetFlag() uint64
// Format formats the AST into a writer.
Format(w io.Writer)
}
// OptBinary is used for parser.
type OptBinary struct {
IsBinary bool
Charset string
}
// OptVectorType represents the element type of the vector.
type VectorElementType struct {
Tp byte // Only FLOAT and DOUBLE is accepted.
}
// FuncNode represents function call expression node.
type FuncNode interface {
ExprNode
functionExpression()
}
// StmtNode represents statement node.
// Name of implementations should have 'Stmt' suffix.
type StmtNode interface {
Node
statement()
// SEMCommand generates a string that represents the command type of the statement.
// It's only used for Security Enforcement Mode (SEM) for now. If it's going to be
// re-used for other purposes, we may need to rename and give it a clearer definition.
//
// The function of this method is similar to `GetStmtLabel`, but it returns more detail.
SEMCommand() string
}
// DDLNode represents DDL statement node.
type DDLNode interface {
StmtNode
ddlStatement()
}
// DMLNode represents DML statement node.
type DMLNode interface {
StmtNode
dmlStatement()
}
// ResultSetNode interface has a ResultFields property, represents a Node that returns result set.
// Implementations include SelectStmt, SubqueryExpr, TableSource, TableName, Join and SetOprStmt.
type ResultSetNode interface {
Node
resultSet()
}
// SensitiveStmtNode overloads StmtNode and provides a SecureText method.
type SensitiveStmtNode interface {
StmtNode
// SecureText is different from Text that it hide password information.
SecureText() string
}
// Visitor visits a Node.
type Visitor interface {
// Enter is called before children nodes are visited.
// The returned node must be the same type as the input node n.
// skipChildren returns true means children nodes should be skipped,
// this is useful when work is done in Enter and there is no need to visit children.
Enter(n Node) (node Node, skipChildren bool)
// Leave is called after children nodes have been visited.
// The returned node's type can be different from the input node if it is a ExprNode,
// Non-expression node must be the same type as the input node n.
// ok returns false to stop visiting.
Leave(n Node) (node Node, ok bool)
}
// GetStmtLabel generates a label for a statement.
func GetStmtLabel(stmtNode StmtNode) string {
switch x := stmtNode.(type) {
case *AlterTableStmt:
return "AlterTable"
case *AnalyzeTableStmt:
return "AnalyzeTable"
case *BeginStmt:
return "Begin"
case *CommitStmt:
return "Commit"
case *CompactTableStmt:
return "CompactTable"
case *CreateDatabaseStmt:
return "CreateDatabase"
case *CreateIndexStmt:
return "CreateIndex"
case *CreateTableStmt:
return "CreateTable"
case *CreateViewStmt:
return "CreateView"
case *CreateUserStmt:
return "CreateUser"
case *DeleteStmt:
return "Delete"
case *DropDatabaseStmt:
return "DropDatabase"
case *DropIndexStmt:
return "DropIndex"
case *DropTableStmt:
if x.IsView {
return "DropView"
}
return "DropTable"
case *ExplainStmt:
if _, ok := x.Stmt.(*ShowStmt); ok {
return "DescTable"
}
if x.Analyze {
return "ExplainAnalyzeSQL"
}
return "ExplainSQL"
case *InsertStmt:
if x.IsReplace {
return "Replace"
}
return "Insert"
case *ImportIntoStmt:
return "ImportInto"
case *LoadDataStmt:
return "LoadData"
case *RollbackStmt:
return "Rollback"
case *SelectStmt:
return "Select"
case *SetStmt, *SetPwdStmt:
return "Set"
case *ShowStmt:
return "Show"
case *TruncateTableStmt:
return "TruncateTable"
case *UpdateStmt:
return "Update"
case *GrantStmt:
return "Grant"
case *RevokeStmt:
return "Revoke"
case *DeallocateStmt:
return "Deallocate"
case *ExecuteStmt:
return "Execute"
case *PrepareStmt:
return "Prepare"
case *UseStmt:
return "Use"
case *CreateBindingStmt:
return "CreateBinding"
case *DropBindingStmt:
return "DropBinding"
case *TraceStmt:
return "Trace"
case *ShutdownStmt:
return "Shutdown"
case *SavepointStmt:
return "Savepoint"
case *OptimizeTableStmt:
return "Optimize"
}
return "other"
}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package ast
import (
"bytes"
"sync"
"unicode"
"unicode/utf8"
"github.com/pingcap/tidb/pkg/parser/charset"
"github.com/pingcap/tidb/pkg/parser/types"
"github.com/pingcap/tidb/pkg/parser/util"
)
const hexDigits = "0123456789abcdef"
// node is the struct implements Node interface except for Accept method.
// Node implementations should embed it in.
type node struct {
utf8Text string
enc charset.Encoding
noBackslashEscapes bool
once *sync.Once
text string
offset int
}
// SetOriginTextPosition implements Node interface.
func (n *node) SetOriginTextPosition(offset int) {
n.offset = offset
}
// OriginTextPosition implements Node interface.
func (n *node) OriginTextPosition() int {
return n.offset
}
// SetText implements Node interface.
func (n *node) SetText(enc charset.Encoding, text string) {
n.enc = enc
n.text = text
n.once = &sync.Once{}
}
// SetNoBackslashEscapes marks that the SQL mode NO_BACKSLASH_ESCAPES was active
// when this node was parsed, so backslash is not treated as an escape character
// in string literals
func (n *node) SetNoBackslashEscapes(val bool) {
if n.noBackslashEscapes == val {
return
}
n.noBackslashEscapes = val
if n.once != nil {
n.once = &sync.Once{}
}
}
// Text implements Node interface.
func (n *node) Text() string {
if n.once == nil {
return n.text
}
n.once.Do(func() {
if n.enc == nil {
n.utf8Text = n.text
return
}
n.utf8Text = convertBinaryStringLiterals(n.text, n.enc, n.noBackslashEscapes)
})
return n.utf8Text
}
// OriginalText implements Node interface.
func (n *node) OriginalText() string {
return n.text
}
func isPrintable(s []byte) bool {
for len(s) > 0 {
r, size := utf8.DecodeRune(s)
if r == utf8.RuneError && size <= 1 {
return false
}
if unicode.IsControl(r) {
return false
}
s = s[size:]
}
return true
}
func isIdentChar(b byte) bool {
return b == '_' ||
(b >= '0' && b <= '9') ||
(b >= 'a' && b <= 'z') ||
(b >= 'A' && b <= 'Z')
}
// needsSpaceBeforeHexLiteral returns true when replacing a quoted string with a
// hex literal would otherwise merge with a preceding identifier-like token
// (e.g. "_binary'...'" -> "_binary0x..."), producing invalid SQL.
func needsSpaceBeforeHexLiteral(utf8Text []byte, quoteStart int) bool {
if quoteStart <= 0 {
return false
}
return isIdentChar(utf8Text[quoteStart-1])
}
// convertBinaryStringLiterals processes raw SQL text, converting non-printable
// single- or double-quoted string literals to 0x hex literals and decoding
// everything else to UTF-8.
//
// The function first transforms the entire text to UTF-8 and then scans the
// UTF-8 result for string literal boundaries. This avoids ambiguity in
// encodings like GBK/GB18030 where ASCII-range bytes (e.g. 0x5C backslash)
// can appear as trail bytes of multibyte characters — UTF-8 never reuses
// ASCII byte values in multibyte sequences, so quote and backslash detection
// is always correct.
//
// A parallel index into the original byte sequence is maintained so that
// non-printable strings can be hex-encoded from their original bytes.
// Quote bytes (0x22, 0x27) are below the trail-byte range of all supported
// multibyte encodings, so finding them in the original text is always safe.
func convertBinaryStringLiterals(text string, enc charset.Encoding, noBackslashEscapes bool) string {
src := charset.HackSlice(text)
// Fast path: if no quotes, just transform the whole thing.
if bytes.IndexByte(src, '\'') < 0 && bytes.IndexByte(src, '"') < 0 {
result, _ := enc.Transform(nil, src, charset.OpDecodeReplace)
return charset.HackString(result)
}
// Transform entire text to UTF-8 for safe scanning.
utf8Text, _ := enc.Transform(nil, src, charset.OpDecodeReplace)
var buf *bytes.Buffer
lastCopiedIdx := 0 // tracks position in utf8Text for output assembly
origIdx := 0 // tracks position in src (original bytes)
i := 0 // scan position in utf8Text
for i < len(utf8Text) {
// Skip SQL comments so that quote characters inside comments are not
// mistaken for string-literal boundaries.
if skipped := skipComment(utf8Text, src, &i, &origIdx); skipped {
continue
}
if utf8Text[i] != '\'' && utf8Text[i] != '"' {
i++
continue
}
utf8QuoteStart := i
quote := utf8Text[i]
i++
// Find the corresponding opening quote in the original text.
origQuoteStart := advanceOrigTo(src, &origIdx, quote)
if origQuoteStart < 0 {
break
}
// Find closing quote in UTF-8 text, keeping origIdx in sync.
terminated := false
var origQuoteEnd int
for i < len(utf8Text) {
ch := utf8Text[i]
if ch == quote {
i++
origClose := advanceOrigTo(src, &origIdx, quote)
if origClose < 0 {
break
}
if i >= len(utf8Text) || utf8Text[i] != quote {
// Closing quote.
terminated = true
origQuoteEnd = origClose + 1
break
}
// Doubled quote escape — advance past second quote in original.
i++
if advanceOrigTo(src, &origIdx, quote) < 0 {
break
}
} else if ch == '\\' && !noBackslashEscapes && i+1 < len(utf8Text) {
nextCh := utf8Text[i+1]
i += 2
// If the escaped character is a quote byte, advance origIdx
// past the corresponding quote in the original text so the
// pairing stays in sync.
if nextCh == '\'' || nextCh == '"' {
if advanceOrigTo(src, &origIdx, nextCh) < 0 {
break
}
}
} else {
i++
}
}
if !terminated {
continue
}
// Check printability by decoding the original string content.
// OpDecode returns an error if the bytes are invalid in the source encoding;
// isPrintable then rejects control characters in the decoded UTF-8.
decoded, err := enc.Transform(nil, src[origQuoteStart+1:origQuoteEnd-1], charset.OpDecode)
if err == nil && isPrintable(decoded) {
continue
}
// Non-printable: extract content from original bytes and hex-encode.
var content []byte
j := origQuoteStart + 1
origEnd := origQuoteEnd - 1
for j < origEnd {
ch := src[j]
if ch == quote {
j++
if j < origEnd && src[j] == quote {
content = append(content, quote)
j++
}
} else if ch == '\\' && !noBackslashEscapes && j+1 < origEnd {
j++
content = append(content, util.UnescapeChar(src[j])...)
j++
} else {
content = append(content, ch)
j++
}
}
// Lazy-allocate output buffer on first binary string found.
if buf == nil {
buf = &bytes.Buffer{}
buf.Grow(len(utf8Text))
}
buf.Write(utf8Text[lastCopiedIdx:utf8QuoteStart])
if needsSpaceBeforeHexLiteral(utf8Text, utf8QuoteStart) {
buf.WriteByte(' ')
}
buf.WriteString("0x")
for _, b := range content {
buf.WriteByte(hexDigits[b>>4])
buf.WriteByte(hexDigits[b&0xf])
}
lastCopiedIdx = i
}
if buf == nil {
return charset.HackString(utf8Text)
}
if lastCopiedIdx < len(utf8Text) {
buf.Write(utf8Text[lastCopiedIdx:])
}
return buf.String()
}
// skipComment checks whether the current position in utf8Text is the start of
// a SQL comment. If so it advances *i past the comment in utf8Text and returns
// true. While scanning the comment bytes, it also advances *origIdx past any
// quote bytes (' or ") found inside the comment so that the dual-index pairing
// used by the caller for string-literal matching stays correct. Bytes that are
// not quote characters do NOT advance *origIdx.
//
// Recognised comment forms:
// - "--" followed by Unicode whitespace or end-of-input: line comment to EOL
// (matches lexer startWithDash which uses unicode.IsSpace)
// - "#": line comment to EOL
// - "/*" ... "*/": block comment, UNLESS the opener is "/*!" or "/*+"
// which are MySQL executable/hint comments whose content is parsed as SQL
//
// TiDB-specific "/*T!" and MariaDB "/*M!" comments are always skipped here
// because their executability depends on runtime feature gates that are not
// available in the ast package. This is conservative: string literals inside
// an actually-executed /*T![feature] block will not be hex-encoded by this
// fallback path, but the primary litRange path handles them correctly.
func skipComment(utf8Text, src []byte, i, origIdx *int) bool {
pos := *i
ch := utf8Text[pos]
// -- line comment (MySQL requires whitespace after --, checked via
// unicode.IsSpace to match the lexer's startWithDash predicate).
if ch == '-' && pos+1 < len(utf8Text) && utf8Text[pos+1] == '-' {
if pos+2 >= len(utf8Text) || unicode.IsSpace(rune(utf8Text[pos+2])) {
skipToEOL(utf8Text, src, i, origIdx)
return true
}
}
// # line comment
if ch == '#' {
skipToEOL(utf8Text, src, i, origIdx)
return true
}
// /* */ block comment — only /*! and /*+ are executable (MySQL syntax).
if ch == '/' && pos+1 < len(utf8Text) && utf8Text[pos+1] == '*' {
if pos+2 < len(utf8Text) {
next := utf8Text[pos+2]
if next == '!' || next == '+' {
// MySQL version comment or optimizer hint — content is SQL.
return false
}
}
skipToBlockEnd(utf8Text, src, i, origIdx)
return true
}
return false
}
// skipToEOL advances *i to past the newline (or EOF) and advances *origIdx
// past any quote bytes encountered along the way, in a single pass.
func skipToEOL(utf8Text, src []byte, i, origIdx *int) {
for *i < len(utf8Text) {
ch := utf8Text[*i]
if ch == '\'' || ch == '"' {
advanceOrigTo(src, origIdx, ch)
}
*i++
if ch == '\n' {
return
}
}
}
// skipToBlockEnd advances *i past the closing "*/" (or EOF) and advances
// *origIdx past any quote bytes encountered along the way, in a single pass.
func skipToBlockEnd(utf8Text, src []byte, i, origIdx *int) {
// Skip past the opening "/*".
*i += 2
for *i < len(utf8Text) {
ch := utf8Text[*i]
if ch == '\'' || ch == '"' {
advanceOrigTo(src, origIdx, ch)
}
if ch == '*' && *i+1 < len(utf8Text) && utf8Text[*i+1] == '/' {
*i += 2 // skip past "*/"
return
}
*i++
}
}
// advanceOrigTo scans src from *idx forward until it finds a byte equal to b.
// It returns the position of that byte and advances *idx past it, or returns -1
// if not found.
func advanceOrigTo(src []byte, idx *int, b byte) int {
for *idx < len(src) {
if src[*idx] == b {
pos := *idx
*idx++
return pos
}
*idx++
}
return -1
}
// stmtNode implements StmtNode interface.
// Statement implementations should embed it in.
type stmtNode struct {
node
}
// statement implements StmtNode interface.
func (sn *stmtNode) statement() {}
// ddlNode implements DDLNode interface.
// DDL implementations should embed it in.
type ddlNode struct {
stmtNode
}
// ddlStatement implements DDLNode interface.
func (dn *ddlNode) ddlStatement() {}
// dmlNode is the struct implements DMLNode interface.
// DML implementations should embed it in.
type dmlNode struct {
stmtNode
}
// dmlStatement implements DMLNode interface.
func (dn *dmlNode) dmlStatement() {}
// exprNode is the struct implements Expression interface.
// Expression implementations should embed it in.
type exprNode struct {
node
Type types.FieldType
flag uint64
}
// TexprNode is exported for parser driver.
type TexprNode = exprNode
// SetType implements ExprNode interface.
func (en *exprNode) SetType(tp *types.FieldType) {
en.Type = *tp
}
// GetType implements ExprNode interface.
func (en *exprNode) GetType() *types.FieldType {
return &en.Type
}
// SetFlag implements ExprNode interface.
func (en *exprNode) SetFlag(flag uint64) {
en.flag = flag
}
// GetFlag implements ExprNode interface.
func (en *exprNode) GetFlag() uint64 {
return en.flag
}
type funcNode struct {
exprNode
}
// functionExpression implements FunctionNode interface.
func (fn *funcNode) functionExpression() {}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package ast
import (
"strings"
"github.com/pingcap/errors"
"github.com/pingcap/tidb/pkg/parser/auth"
"github.com/pingcap/tidb/pkg/parser/format"
"github.com/pingcap/tidb/pkg/parser/mysql"
"github.com/pingcap/tidb/pkg/parser/terror"
"github.com/pingcap/tidb/pkg/parser/tidb"
"github.com/pingcap/tidb/pkg/parser/types"
)
var (
_ DDLNode = &AlterTableStmt{}
_ DDLNode = &AlterSequenceStmt{}
_ DDLNode = &AlterPlacementPolicyStmt{}
_ DDLNode = &AlterResourceGroupStmt{}
_ DDLNode = &CreateDatabaseStmt{}
_ DDLNode = &CreateIndexStmt{}
_ DDLNode = &CreateTableStmt{}
_ DDLNode = &CreateViewStmt{}
_ DDLNode = &CreateSequenceStmt{}
_ DDLNode = &CreatePlacementPolicyStmt{}
_ DDLNode = &CreateMaskingPolicyStmt{}
_ DDLNode = &CreateResourceGroupStmt{}
_ DDLNode = &DropDatabaseStmt{}
_ DDLNode = &FlashBackDatabaseStmt{}
_ DDLNode = &DropIndexStmt{}
_ DDLNode = &DropTableStmt{}
_ DDLNode = &DropSequenceStmt{}
_ DDLNode = &DropPlacementPolicyStmt{}
_ DDLNode = &DropResourceGroupStmt{}
_ DDLNode = &OptimizeTableStmt{}
_ DDLNode = &RenameTableStmt{}
_ DDLNode = &TruncateTableStmt{}
_ DDLNode = &RepairTableStmt{}
_ Node = &AlterTableSpec{}
_ Node = &ColumnDef{}
_ Node = &ColumnOption{}
_ Node = &ColumnPosition{}
_ Node = &Constraint{}
_ Node = &IndexPartSpecification{}
_ Node = &ReferenceDef{}
)
// CharsetOpt is used for parsing charset option from SQL.
type CharsetOpt struct {
Chs string
Col string
}
// NullString represents a string that may be nil.
type NullString struct {
String string
Empty bool // Empty is true if String is empty backtick.
}
// DatabaseOptionType is the type for database options.
type DatabaseOptionType int
// Database option types.
const (
DatabaseOptionNone DatabaseOptionType = iota
DatabaseOptionCharset
DatabaseOptionCollate
DatabaseOptionEncryption
DatabaseSetTiFlashReplica
DatabaseOptionPlacementPolicy = DatabaseOptionType(PlacementOptionPolicy)
)
// DatabaseOption represents database option.
type DatabaseOption struct {
Tp DatabaseOptionType
Value string
UintValue uint64
TiFlashReplica *TiFlashReplicaSpec
}
// Restore implements Node interface.
func (n *DatabaseOption) Restore(ctx *format.RestoreCtx) error {
switch n.Tp {
case DatabaseOptionCharset:
ctx.WriteKeyWord("CHARACTER SET")
ctx.WritePlain(" = ")
ctx.WritePlain(n.Value)
case DatabaseOptionCollate:
ctx.WriteKeyWord("COLLATE")
ctx.WritePlain(" = ")
ctx.WritePlain(n.Value)
case DatabaseOptionEncryption:
ctx.WriteKeyWord("ENCRYPTION")
ctx.WritePlain(" = ")
ctx.WriteString(n.Value)
case DatabaseOptionPlacementPolicy:
placementOpt := PlacementOption{
Tp: PlacementOptionPolicy,
UintValue: n.UintValue,
StrValue: n.Value,
}
return placementOpt.Restore(ctx)
case DatabaseSetTiFlashReplica:
ctx.WriteKeyWord("SET TIFLASH REPLICA ")
ctx.WritePlainf("%d", n.TiFlashReplica.Count)
if len(n.TiFlashReplica.Labels) == 0 {
break
}
ctx.WriteKeyWord(" LOCATION LABELS ")
for i, v := range n.TiFlashReplica.Labels {
if i > 0 {
ctx.WritePlain(", ")
}
ctx.WriteString(v)
}
default:
return errors.Errorf("invalid DatabaseOptionType: %d", n.Tp)
}
return nil
}
// CreateDatabaseStmt is a statement to create a database.
// See https://dev.mysql.com/doc/refman/5.7/en/create-database.html
type CreateDatabaseStmt struct {
ddlNode
IfNotExists bool
Name CIStr
Options []*DatabaseOption
}
// Restore implements Node interface.
func (n *CreateDatabaseStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("CREATE DATABASE ")
if n.IfNotExists {
ctx.WriteKeyWord("IF NOT EXISTS ")
}
ctx.WriteName(n.Name.O)
for i, option := range n.Options {
ctx.WritePlain(" ")
err := option.Restore(ctx)
if err != nil {
return errors.Annotatef(err, "An error occurred while splicing CreateDatabaseStmt DatabaseOption: [%v]", i)
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *CreateDatabaseStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*CreateDatabaseStmt)
return v.Leave(n)
}
// AlterDatabaseStmt is a statement to change the structure of a database.
// See https://dev.mysql.com/doc/refman/5.7/en/alter-database.html
type AlterDatabaseStmt struct {
ddlNode
Name CIStr
AlterDefaultDatabase bool
Options []*DatabaseOption
}
// Restore implements Node interface.
func (n *AlterDatabaseStmt) Restore(ctx *format.RestoreCtx) error {
if ctx.Flags.HasSkipPlacementRuleForRestoreFlag() && n.isAllPlacementOptions() {
return nil
}
// If all options placement options and RestoreTiDBSpecialComment flag is on,
// we should restore the whole node in special comment. For example, the restore result should be:
// /*T![placement] ALTER DATABASE `db1` PLACEMENT POLICY = `p1` */
// instead of
// ALTER DATABASE `db1` /*T![placement] PLACEMENT POLICY = `p1` */
// because altering a database without any options is not a legal syntax in mysql
if n.isAllPlacementOptions() && ctx.Flags.HasTiDBSpecialCommentFlag() {
return restorePlacementStmtInSpecialComment(ctx, n)
}
ctx.WriteKeyWord("ALTER DATABASE")
if !n.AlterDefaultDatabase {
ctx.WritePlain(" ")
ctx.WriteName(n.Name.O)
}
for i, option := range n.Options {
ctx.WritePlain(" ")
err := option.Restore(ctx)
if err != nil {
return errors.Annotatef(err, "An error occurred while splicing AlterDatabaseStmt DatabaseOption: [%v]", i)
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *AlterDatabaseStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*AlterDatabaseStmt)
return v.Leave(n)
}
func (n *AlterDatabaseStmt) isAllPlacementOptions() bool {
for _, n := range n.Options {
switch n.Tp {
case DatabaseOptionPlacementPolicy:
default:
return false
}
}
return true
}
// DropDatabaseStmt is a statement to drop a database and all tables in the database.
// See https://dev.mysql.com/doc/refman/5.7/en/drop-database.html
type DropDatabaseStmt struct {
ddlNode
IfExists bool
Name CIStr
}
// Restore implements Node interface.
func (n *DropDatabaseStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("DROP DATABASE ")
if n.IfExists {
ctx.WriteKeyWord("IF EXISTS ")
}
ctx.WriteName(n.Name.O)
return nil
}
// Accept implements Node Accept interface.
func (n *DropDatabaseStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*DropDatabaseStmt)
return v.Leave(n)
}
// FlashBackDatabaseStmt is a statement to restore a database and all tables in the database.
type FlashBackDatabaseStmt struct {
ddlNode
DBName CIStr
NewName string
}
// Restore implements Node interface.
func (n *FlashBackDatabaseStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("FLASHBACK DATABASE ")
ctx.WriteName(n.DBName.O)
if len(n.NewName) > 0 {
ctx.WriteKeyWord(" TO ")
ctx.WriteName(n.NewName)
}
return nil
}
// Accept implements Node Accept interface.
func (n *FlashBackDatabaseStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*FlashBackDatabaseStmt)
return v.Leave(n)
}
// IndexPartSpecifications is used for parsing index column name or index expression from SQL.
type IndexPartSpecification struct {
node
Column *ColumnName
Length int
// Order is parsed but should be ignored because MySQL v5.7 doesn't support it.
Desc bool
Expr ExprNode
}
// Restore implements Node interface.
func (n *IndexPartSpecification) Restore(ctx *format.RestoreCtx) error {
if n.Expr != nil {
ctx.WritePlain("(")
if err := n.Expr.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while splicing IndexPartSpecifications")
}
ctx.WritePlain(")")
if n.Desc {
ctx.WritePlain(" DESC")
}
return nil
}
if err := n.Column.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while splicing IndexPartSpecifications")
}
if n.Length > 0 {
ctx.WritePlainf("(%d)", n.Length)
}
if n.Desc {
ctx.WritePlain(" DESC")
}
return nil
}
// Accept implements Node Accept interface.
func (n *IndexPartSpecification) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*IndexPartSpecification)
if n.Expr != nil {
node, ok := n.Expr.Accept(v)
if !ok {
return n, false
}
n.Expr = node.(ExprNode)
return v.Leave(n)
}
node, ok := n.Column.Accept(v)
if !ok {
return n, false
}
n.Column = node.(*ColumnName)
return v.Leave(n)
}
// MatchType is the type for reference match type.
type MatchType int
// match type
const (
MatchNone MatchType = iota
MatchFull
MatchPartial
MatchSimple
)
// ReferenceDef is used for parsing foreign key reference option from SQL.
// See http://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html
type ReferenceDef struct {
node
Table *TableName
IndexPartSpecifications []*IndexPartSpecification
OnDelete *OnDeleteOpt
OnUpdate *OnUpdateOpt
Match MatchType
}
// Restore implements Node interface.
func (n *ReferenceDef) Restore(ctx *format.RestoreCtx) error {
if n.Table != nil {
ctx.WriteKeyWord("REFERENCES ")
if err := n.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while splicing ReferenceDef")
}
}
if n.IndexPartSpecifications != nil {
ctx.WritePlain("(")
for i, indexColNames := range n.IndexPartSpecifications {
if i > 0 {
ctx.WritePlain(", ")
}
if err := indexColNames.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while splicing IndexPartSpecifications: [%v]", i)
}
}
ctx.WritePlain(")")
}
if n.Match != MatchNone {
ctx.WriteKeyWord(" MATCH ")
switch n.Match {
case MatchFull:
ctx.WriteKeyWord("FULL")
case MatchPartial:
ctx.WriteKeyWord("PARTIAL")
case MatchSimple:
ctx.WriteKeyWord("SIMPLE")
}
}
if n.OnDelete.ReferOpt != ReferOptionNoOption {
ctx.WritePlain(" ")
if err := n.OnDelete.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while splicing OnDelete")
}
}
if n.OnUpdate.ReferOpt != ReferOptionNoOption {
ctx.WritePlain(" ")
if err := n.OnUpdate.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while splicing OnUpdate")
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *ReferenceDef) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ReferenceDef)
if n.Table != nil {
node, ok := n.Table.Accept(v)
if !ok {
return n, false
}
n.Table = node.(*TableName)
}
for i, val := range n.IndexPartSpecifications {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.IndexPartSpecifications[i] = node.(*IndexPartSpecification)
}
onDelete, ok := n.OnDelete.Accept(v)
if !ok {
return n, false
}
n.OnDelete = onDelete.(*OnDeleteOpt)
onUpdate, ok := n.OnUpdate.Accept(v)
if !ok {
return n, false
}
n.OnUpdate = onUpdate.(*OnUpdateOpt)
return v.Leave(n)
}
// OnDeleteOpt is used for optional on delete clause.
type OnDeleteOpt struct {
node
ReferOpt ReferOptionType
}
// Restore implements Node interface.
func (n *OnDeleteOpt) Restore(ctx *format.RestoreCtx) error {
if n.ReferOpt != ReferOptionNoOption {
ctx.WriteKeyWord("ON DELETE ")
ctx.WriteKeyWord(n.ReferOpt.String())
}
return nil
}
// Accept implements Node Accept interface.
func (n *OnDeleteOpt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*OnDeleteOpt)
return v.Leave(n)
}
// OnUpdateOpt is used for optional on update clause.
type OnUpdateOpt struct {
node
ReferOpt ReferOptionType
}
// Restore implements Node interface.
func (n *OnUpdateOpt) Restore(ctx *format.RestoreCtx) error {
if n.ReferOpt != ReferOptionNoOption {
ctx.WriteKeyWord("ON UPDATE ")
ctx.WriteKeyWord(n.ReferOpt.String())
}
return nil
}
// Accept implements Node Accept interface.
func (n *OnUpdateOpt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*OnUpdateOpt)
return v.Leave(n)
}
// ColumnOptionType is the type for ColumnOption.
type ColumnOptionType int
// ColumnOption types.
const (
ColumnOptionNoOption ColumnOptionType = iota
ColumnOptionPrimaryKey
ColumnOptionNotNull
ColumnOptionAutoIncrement
ColumnOptionDefaultValue
ColumnOptionUniqKey
ColumnOptionNull
ColumnOptionOnUpdate // For Timestamp and Datetime only.
ColumnOptionFulltext
ColumnOptionComment
ColumnOptionGenerated
ColumnOptionReference
ColumnOptionCollate
ColumnOptionCheck
ColumnOptionColumnFormat
ColumnOptionStorage
ColumnOptionAutoRandom
ColumnOptionSecondaryEngineAttribute
)
var (
invalidOptionForGeneratedColumn = map[ColumnOptionType]string{
ColumnOptionAutoIncrement: "AUTO_INCREMENT",
ColumnOptionOnUpdate: "ON UPDATE",
ColumnOptionDefaultValue: "DEFAULT",
}
)
// ColumnOptionList stores column options.
type ColumnOptionList struct {
HasCollateOption bool
Options []*ColumnOption
}
// ColumnOption is used for parsing column constraint info from SQL.
type ColumnOption struct {
node
Tp ColumnOptionType
// Expr is used for ColumnOptionDefaultValue/ColumnOptionOnUpdateColumnOptionGenerated.
// For ColumnOptionDefaultValue or ColumnOptionOnUpdate, it's the target value.
// For ColumnOptionGenerated, it's the target expression.
Expr ExprNode
// Stored is only for ColumnOptionGenerated, default is false.
Stored bool
// Refer is used for foreign key.
Refer *ReferenceDef
StrValue string
AutoRandOpt AutoRandomOption
// Enforced is only for Check, default is true.
Enforced bool
// Name is only used for Check Constraint name.
ConstraintName string
PrimaryKeyTp PrimaryKeyType
SecondaryEngineAttr string
}
// Restore implements Node interface.
func (n *ColumnOption) Restore(ctx *format.RestoreCtx) error {
switch n.Tp {
case ColumnOptionNoOption:
return nil
case ColumnOptionPrimaryKey:
ctx.WriteKeyWord("PRIMARY KEY")
pkTp := n.PrimaryKeyTp.String()
if len(pkTp) != 0 {
ctx.WritePlain(" ")
ctx.WriteKeyWordWithSpecialComments(tidb.FeatureIDClusteredIndex, pkTp)
}
if n.StrValue == "Global" {
ctx.WriteKeyWord(" GLOBAL")
}
case ColumnOptionNotNull:
ctx.WriteKeyWord("NOT NULL")
case ColumnOptionAutoIncrement:
ctx.WriteKeyWord("AUTO_INCREMENT")
case ColumnOptionDefaultValue:
ctx.WriteKeyWord("DEFAULT ")
printOuterParentheses := false
if funcCallExpr, ok := n.Expr.(*FuncCallExpr); ok {
if name := funcCallExpr.FnName.L; name != CurrentTimestamp {
printOuterParentheses = true
}
}
if _, ok := n.Expr.(*ColumnNameExpr); ok {
printOuterParentheses = true
}
if printOuterParentheses {
ctx.WritePlain("(")
}
if err := n.Expr.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while splicing ColumnOption DefaultValue Expr")
}
if printOuterParentheses {
ctx.WritePlain(")")
}
case ColumnOptionUniqKey:
ctx.WriteKeyWord("UNIQUE KEY")
if n.StrValue == "Global" {
ctx.WriteKeyWord(" GLOBAL")
}
case ColumnOptionNull:
ctx.WriteKeyWord("NULL")
case ColumnOptionOnUpdate:
ctx.WriteKeyWord("ON UPDATE ")
if err := n.Expr.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while splicing ColumnOption ON UPDATE Expr")
}
case ColumnOptionFulltext:
return errors.New("TiDB Parser ignore the `ColumnOptionFulltext` type now")
case ColumnOptionComment:
ctx.WriteKeyWord("COMMENT ")
if err := n.Expr.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while splicing ColumnOption COMMENT Expr")
}
case ColumnOptionGenerated:
ctx.WriteKeyWord("GENERATED ALWAYS AS")
ctx.WritePlain("(")
if err := n.Expr.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while splicing ColumnOption GENERATED ALWAYS Expr")
}
ctx.WritePlain(")")
if n.Stored {
ctx.WriteKeyWord(" STORED")
} else {
ctx.WriteKeyWord(" VIRTUAL")
}
case ColumnOptionReference:
if err := n.Refer.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while splicing ColumnOption ReferenceDef")
}
case ColumnOptionCollate:
if n.StrValue == "" {
return errors.New("Empty ColumnOption COLLATE")
}
ctx.WriteKeyWord("COLLATE ")
ctx.WritePlain(n.StrValue)
case ColumnOptionCheck:
if n.ConstraintName != "" {
ctx.WriteKeyWord("CONSTRAINT ")
ctx.WriteName(n.ConstraintName)
ctx.WritePlain(" ")
}
ctx.WriteKeyWord("CHECK")
ctx.WritePlain("(")
if err := n.Expr.Restore(ctx); err != nil {
return errors.Trace(err)
}
ctx.WritePlain(")")
if n.Enforced {
ctx.WriteKeyWord(" ENFORCED")
} else {
ctx.WriteKeyWord(" NOT ENFORCED")
}
case ColumnOptionColumnFormat:
ctx.WriteKeyWord("COLUMN_FORMAT ")
ctx.WriteKeyWord(n.StrValue)
case ColumnOptionStorage:
ctx.WriteKeyWord("STORAGE ")
ctx.WriteKeyWord(n.StrValue)
case ColumnOptionAutoRandom:
_ = ctx.WriteWithSpecialComments(tidb.FeatureIDAutoRandom, func() error {
ctx.WriteKeyWord("AUTO_RANDOM")
opt := n.AutoRandOpt
if opt.ShardBits != types.UnspecifiedLength {
if opt.RangeBits != types.UnspecifiedLength {
ctx.WritePlainf("(%d, %d)", opt.ShardBits, opt.RangeBits)
} else {
ctx.WritePlainf("(%d)", opt.ShardBits)
}
}
return nil
})
case ColumnOptionSecondaryEngineAttribute:
ctx.WriteKeyWord("SECONDARY_ENGINE_ATTRIBUTE")
ctx.WritePlain(" = ")
ctx.WriteString(n.StrValue)
default:
return errors.New("An error occurred while splicing ColumnOption")
}
return nil
}
// Accept implements Node Accept interface.
func (n *ColumnOption) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ColumnOption)
if n.Expr != nil {
node, ok := n.Expr.Accept(v)
if !ok {
return n, false
}
n.Expr = node.(ExprNode)
}
return v.Leave(n)
}
// AutoRandomOption contains the length of shard bits and range bits.
type AutoRandomOption struct {
// ShardBits is the number of bits used to store the shard.
ShardBits int
// RangeBits is the number of int primary key bits that will be used by TiDB.
RangeBits int
}
// IndexVisibility is the option for index visibility.
type IndexVisibility int
// IndexVisibility options.
const (
IndexVisibilityDefault IndexVisibility = iota
IndexVisibilityVisible
IndexVisibilityInvisible
)
// IndexOption is the index options.
//
// KEY_BLOCK_SIZE [=] value
// | index_type
// | WITH PARSER parser_name
// | COMMENT 'string'
// | GLOBAL
//
// See http://dev.mysql.com/doc/refman/5.7/en/create-table.html
// with the addition of Global Index
type IndexOption struct {
node
KeyBlockSize uint64
Tp IndexType
Comment string
ParserName CIStr
Visibility IndexVisibility
PrimaryKeyTp PrimaryKeyType
Global bool
SplitOpt *SplitOption `json:"-"` // SplitOption contains expr nodes, which cannot marshal for DDL job arguments.
SecondaryEngineAttr string
AddColumnarReplicaOnDemand int
Condition ExprNode `json:"-"` // Condition contains expr nodes, which cannot marshal for DDL job arguments. It's used for partial index.
}
// IsEmpty is true if only default options are given
// and it should not be added to the output
func (n *IndexOption) IsEmpty() bool {
if n.PrimaryKeyTp != PrimaryKeyTypeDefault ||
n.KeyBlockSize > 0 ||
n.Tp != IndexTypeInvalid ||
len(n.ParserName.O) > 0 ||
n.Comment != "" ||
n.Global ||
n.Visibility != IndexVisibilityDefault ||
n.SplitOpt != nil ||
len(n.SecondaryEngineAttr) > 0 ||
n.Condition != nil {
return false
}
return true
}
// Restore implements Node interface.
func (n *IndexOption) Restore(ctx *format.RestoreCtx) error {
hasPrevOption := false
if n.AddColumnarReplicaOnDemand > 0 {
ctx.WriteKeyWord("ADD_COLUMNAR_REPLICA_ON_DEMAND")
hasPrevOption = true
}
if n.PrimaryKeyTp != PrimaryKeyTypeDefault {
if hasPrevOption {
ctx.WritePlain(" ")
}
ctx.WriteKeyWordWithSpecialComments(tidb.FeatureIDClusteredIndex, n.PrimaryKeyTp.String())
hasPrevOption = true
}
if n.KeyBlockSize > 0 {
if hasPrevOption {
ctx.WritePlain(" ")
}
ctx.WriteKeyWord("KEY_BLOCK_SIZE")
ctx.WritePlainf("=%d", n.KeyBlockSize)
hasPrevOption = true
}
if n.Tp != IndexTypeInvalid {
if hasPrevOption {
ctx.WritePlain(" ")
}
ctx.WriteKeyWord("USING ")
ctx.WritePlain(n.Tp.String())
hasPrevOption = true
}
if len(n.ParserName.O) > 0 {
if hasPrevOption {
ctx.WritePlain(" ")
}
ctx.WriteKeyWord("WITH PARSER ")
ctx.WriteName(n.ParserName.O)
hasPrevOption = true
}
if n.Comment != "" {
if hasPrevOption {
ctx.WritePlain(" ")
}
ctx.WriteKeyWord("COMMENT ")
ctx.WriteString(n.Comment)
hasPrevOption = true
}
if n.Global {
if hasPrevOption {
ctx.WritePlain(" ")
}
_ = ctx.WriteWithSpecialComments(tidb.FeatureIDGlobalIndex, func() error {
ctx.WriteKeyWord("GLOBAL")
return nil
})
hasPrevOption = true
}
if n.Visibility != IndexVisibilityDefault {
if hasPrevOption {
ctx.WritePlain(" ")
}
switch n.Visibility {
case IndexVisibilityVisible:
ctx.WriteKeyWord("VISIBLE")
case IndexVisibilityInvisible:
ctx.WriteKeyWord("INVISIBLE")
}
hasPrevOption = true
}
if n.SplitOpt != nil {
if hasPrevOption {
ctx.WritePlain(" ")
}
err := ctx.WriteWithSpecialComments(tidb.FeatureIDPresplit, func() error {
ctx.WriteKeyWord("PRE_SPLIT_REGIONS")
ctx.WritePlain(" = ")
if n.SplitOpt.Num != 0 && len(n.SplitOpt.Lower) == 0 {
ctx.WritePlainf("%d", n.SplitOpt.Num)
} else {
ctx.WritePlain("(")
if err := n.SplitOpt.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while splicing IndexOption SplitOpt")
}
ctx.WritePlain(")")
}
return nil
})
if err != nil {
return err
}
hasPrevOption = true
}
if n.SecondaryEngineAttr != "" {
if hasPrevOption {
ctx.WritePlain(" ")
}
ctx.WriteKeyWord("SECONDARY_ENGINE_ATTRIBUTE")
ctx.WritePlain(" = ")
ctx.WriteString(n.SecondaryEngineAttr)
// If a new option is added after, please also uncomment:
//hasPrevOption = true
}
if n.Condition != nil {
if hasPrevOption {
ctx.WritePlain(" ")
}
ctx.WriteKeyWord("WHERE ")
if err := n.Condition.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while splicing IndexOption Condition")
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *IndexOption) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*IndexOption)
if n.SplitOpt != nil {
node, ok := n.SplitOpt.Accept(v)
if !ok {
return n, false
}
n.SplitOpt = node.(*SplitOption)
}
return v.Leave(n)
}
// ConstraintType is the type for Constraint.
type ConstraintType int
// ConstraintTypes
const (
ConstraintNoConstraint ConstraintType = iota
ConstraintPrimaryKey
ConstraintKey
ConstraintIndex
ConstraintUniq
ConstraintUniqKey
ConstraintUniqIndex
ConstraintForeignKey
// ConstraintFulltext is only used in AST.
// It will be rewritten into ConstraintIndex after preprocessor phase.
ConstraintFulltext
ConstraintCheck
// ConstraintVector is only used in AST.
// It will be rewritten into ConstraintColumnar after preprocessor phase.
ConstraintVector
ConstraintColumnar
)
// Constraint is constraint for table definition.
type Constraint struct {
node
// only supported by MariaDB 10.0.2+ (ADD {INDEX|KEY}, ADD FOREIGN KEY),
// see https://mariadb.com/kb/en/library/alter-table/
IfNotExists bool
Tp ConstraintType
Name string
Keys []*IndexPartSpecification // Used for PRIMARY KEY, UNIQUE, ......
Refer *ReferenceDef // Used for foreign key.
Option *IndexOption // Index Options
Expr ExprNode // Used for Check
Enforced bool // Used for Check
InColumn bool // Used for Check
InColumnName string // Used for Check
IsEmptyIndex bool // Used for Check
}
// Restore implements Node interface.
func (n *Constraint) Restore(ctx *format.RestoreCtx) error {
switch n.Tp {
case ConstraintNoConstraint:
return nil
case ConstraintPrimaryKey:
ctx.WriteKeyWord("PRIMARY KEY")
case ConstraintKey:
ctx.WriteKeyWord("KEY")
if n.IfNotExists {
ctx.WriteKeyWordWithSpecialComments(tidb.FeatureIDTiDB, " IF NOT EXISTS")
}
case ConstraintIndex:
ctx.WriteKeyWord("INDEX")
if n.IfNotExists {
ctx.WriteKeyWordWithSpecialComments(tidb.FeatureIDTiDB, " IF NOT EXISTS")
}
case ConstraintUniq:
ctx.WriteKeyWord("UNIQUE")
case ConstraintUniqKey:
ctx.WriteKeyWord("UNIQUE KEY")
case ConstraintUniqIndex:
ctx.WriteKeyWord("UNIQUE INDEX")
case ConstraintFulltext:
ctx.WriteKeyWord("FULLTEXT")
case ConstraintCheck:
if n.Name != "" {
ctx.WriteKeyWord("CONSTRAINT ")
ctx.WriteName(n.Name)
ctx.WritePlain(" ")
}
ctx.WriteKeyWord("CHECK")
ctx.WritePlain("(")
if err := n.Expr.Restore(ctx); err != nil {
return errors.Trace(err)
}
ctx.WritePlain(") ")
if n.Enforced {
ctx.WriteKeyWord("ENFORCED")
} else {
ctx.WriteKeyWord("NOT ENFORCED")
}
return nil
case ConstraintVector:
ctx.WriteKeyWord("VECTOR INDEX")
if n.IfNotExists {
ctx.WriteKeyWordWithSpecialComments(tidb.FeatureIDTiDB, " IF NOT EXISTS")
}
case ConstraintColumnar:
ctx.WriteKeyWord("COLUMNAR INDEX")
if n.IfNotExists {
ctx.WriteKeyWordWithSpecialComments(tidb.FeatureIDTiDB, " IF NOT EXISTS")
}
}
if n.Tp == ConstraintForeignKey {
ctx.WriteKeyWord("CONSTRAINT ")
if n.Name != "" {
ctx.WriteName(n.Name)
ctx.WritePlain(" ")
}
ctx.WriteKeyWord("FOREIGN KEY ")
if n.IfNotExists {
ctx.WriteKeyWordWithSpecialComments(tidb.FeatureIDTiDB, "IF NOT EXISTS ")
}
} else if n.Name != "" || n.IsEmptyIndex {
ctx.WritePlain(" ")
ctx.WriteName(n.Name)
}
ctx.WritePlain("(")
for i, keys := range n.Keys {
if i > 0 {
ctx.WritePlain(", ")
}
if err := keys.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while splicing Constraint Keys: [%v]", i)
}
}
ctx.WritePlain(")")
if n.Refer != nil {
ctx.WritePlain(" ")
if err := n.Refer.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while splicing Constraint Refer")
}
}
if n.Option != nil && !n.Option.IsEmpty() {
ctx.WritePlain(" ")
if err := n.Option.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while splicing Constraint Option")
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *Constraint) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*Constraint)
for i, val := range n.Keys {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.Keys[i] = node.(*IndexPartSpecification)
}
if n.Refer != nil {
node, ok := n.Refer.Accept(v)
if !ok {
return n, false
}
n.Refer = node.(*ReferenceDef)
}
if n.Option != nil {
node, ok := n.Option.Accept(v)
if !ok {
return n, false
}
n.Option = node.(*IndexOption)
}
if n.Expr != nil {
node, ok := n.Expr.Accept(v)
if !ok {
return n, false
}
n.Expr = node.(ExprNode)
}
return v.Leave(n)
}
// ColumnDef is used for parsing column definition from SQL.
type ColumnDef struct {
node
Name *ColumnName
Tp *types.FieldType
Options []*ColumnOption
}
// Restore implements Node interface.
func (n *ColumnDef) Restore(ctx *format.RestoreCtx) error {
if err := n.Name.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while splicing ColumnDef Name")
}
if n.Tp != nil {
ctx.WritePlain(" ")
if err := n.Tp.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while splicing ColumnDef Type")
}
}
for i, options := range n.Options {
ctx.WritePlain(" ")
if err := options.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while splicing ColumnDef ColumnOption: [%v]", i)
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *ColumnDef) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ColumnDef)
node, ok := n.Name.Accept(v)
if !ok {
return n, false
}
n.Name = node.(*ColumnName)
for i, val := range n.Options {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.Options[i] = node.(*ColumnOption)
}
return v.Leave(n)
}
// Validate checks if a column definition is legal.
// For example, generated column definitions that contain such
// column options as `ON UPDATE`, `AUTO_INCREMENT`, `DEFAULT`
// are illegal.
func (n *ColumnDef) Validate() error {
generatedCol := false
var illegalOpt4gc string
for _, opt := range n.Options {
if opt.Tp == ColumnOptionGenerated {
generatedCol = true
}
msg, found := invalidOptionForGeneratedColumn[opt.Tp]
if found {
illegalOpt4gc = msg
}
}
if generatedCol && illegalOpt4gc != "" {
return ErrWrongUsage.GenWithStackByArgs(illegalOpt4gc, "generated column")
}
return nil
}
type TemporaryKeyword int
const (
TemporaryNone TemporaryKeyword = iota
TemporaryGlobal
TemporaryLocal
)
// CreateTableStmt is a statement to create a table.
// See https://dev.mysql.com/doc/refman/5.7/en/create-table.html
type CreateTableStmt struct {
ddlNode
IfNotExists bool
TemporaryKeyword
// Meanless when TemporaryKeyword is not TemporaryGlobal.
// ON COMMIT DELETE ROWS => true
// ON COMMIT PRESERVE ROW => false
OnCommitDelete bool
Table *TableName
ReferTable *TableName
Cols []*ColumnDef
Constraints []*Constraint
SplitIndex []*SplitIndexOption
Options []*TableOption
Partition *PartitionOptions
OnDuplicate OnDuplicateKeyHandlingType
Select ResultSetNode
}
// Restore implements Node interface.
func (n *CreateTableStmt) Restore(ctx *format.RestoreCtx) error {
switch n.TemporaryKeyword {
case TemporaryNone:
ctx.WriteKeyWord("CREATE TABLE ")
case TemporaryGlobal:
ctx.WriteKeyWord("CREATE GLOBAL TEMPORARY TABLE ")
case TemporaryLocal:
ctx.WriteKeyWord("CREATE TEMPORARY TABLE ")
}
if n.IfNotExists {
ctx.WriteKeyWord("IF NOT EXISTS ")
}
if err := n.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while splicing CreateTableStmt Table")
}
if n.ReferTable != nil {
ctx.WriteKeyWord(" LIKE ")
if err := n.ReferTable.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while splicing CreateTableStmt ReferTable")
}
}
lenCols := len(n.Cols)
lenConstraints := len(n.Constraints)
if lenCols+lenConstraints > 0 {
ctx.WritePlain(" (")
for i, col := range n.Cols {
if i > 0 {
ctx.WritePlain(",")
}
if err := col.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while splicing CreateTableStmt ColumnDef: [%v]", i)
}
}
for i, constraint := range n.Constraints {
if i > 0 || lenCols >= 1 {
ctx.WritePlain(",")
}
if err := constraint.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while splicing CreateTableStmt Constraints: [%v]", i)
}
}
ctx.WritePlain(")")
}
options := tableOptionsWithRestoreTTLFlag(ctx.Flags, n.Options)
for i, option := range options {
ctx.WritePlain(" ")
if err := option.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while splicing CreateTableStmt TableOption: [%v]", i)
}
}
if n.Partition != nil {
ctx.WritePlain(" ")
if err := n.Partition.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while splicing CreateTableStmt Partition")
}
}
for _, opt := range n.SplitIndex {
ctx.WritePlain(" ")
if err := opt.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while splicing CreateTableStmt SplitIndex")
}
}
if n.Select != nil {
switch n.OnDuplicate {
case OnDuplicateKeyHandlingError:
ctx.WriteKeyWord(" AS ")
case OnDuplicateKeyHandlingIgnore:
ctx.WriteKeyWord(" IGNORE AS ")
case OnDuplicateKeyHandlingReplace:
ctx.WriteKeyWord(" REPLACE AS ")
}
if err := n.Select.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while splicing CreateTableStmt Select")
}
}
if n.TemporaryKeyword == TemporaryGlobal {
if n.OnCommitDelete {
ctx.WriteKeyWord(" ON COMMIT DELETE ROWS")
} else {
ctx.WriteKeyWord(" ON COMMIT PRESERVE ROWS")
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *CreateTableStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*CreateTableStmt)
node, ok := n.Table.Accept(v)
if !ok {
return n, false
}
n.Table = node.(*TableName)
if n.ReferTable != nil {
node, ok = n.ReferTable.Accept(v)
if !ok {
return n, false
}
n.ReferTable = node.(*TableName)
}
for i, val := range n.Cols {
node, ok = val.Accept(v)
if !ok {
return n, false
}
n.Cols[i] = node.(*ColumnDef)
}
for i, val := range n.Constraints {
node, ok = val.Accept(v)
if !ok {
return n, false
}
n.Constraints[i] = node.(*Constraint)
}
for i, val := range n.SplitIndex {
node, ok = val.Accept(v)
if !ok {
return n, false
}
n.SplitIndex[i] = node.(*SplitIndexOption)
}
if n.Select != nil {
node, ok := n.Select.Accept(v)
if !ok {
return n, false
}
n.Select = node.(ResultSetNode)
}
if n.Partition != nil {
node, ok := n.Partition.Accept(v)
if !ok {
return n, false
}
n.Partition = node.(*PartitionOptions)
}
for i, option := range n.Options {
node, ok = option.Accept(v)
if !ok {
return n, false
}
n.Options[i] = node.(*TableOption)
}
return v.Leave(n)
}
// DropTableStmt is a statement to drop one or more tables.
// See https://dev.mysql.com/doc/refman/5.7/en/drop-table.html
type DropTableStmt struct {
ddlNode
IfExists bool
Tables []*TableName
IsView bool
TemporaryKeyword // make sense ONLY if/when IsView == false
}
// Restore implements Node interface.
func (n *DropTableStmt) Restore(ctx *format.RestoreCtx) error {
if n.IsView {
ctx.WriteKeyWord("DROP VIEW ")
} else {
switch n.TemporaryKeyword {
case TemporaryNone:
ctx.WriteKeyWord("DROP TABLE ")
case TemporaryGlobal:
ctx.WriteKeyWord("DROP GLOBAL TEMPORARY TABLE ")
case TemporaryLocal:
ctx.WriteKeyWord("DROP TEMPORARY TABLE ")
}
}
if n.IfExists {
ctx.WriteKeyWord("IF EXISTS ")
}
for index, table := range n.Tables {
if index != 0 {
ctx.WritePlain(", ")
}
if err := table.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore DropTableStmt.Tables[%d]", index)
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *DropTableStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*DropTableStmt)
for i, val := range n.Tables {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.Tables[i] = node.(*TableName)
}
return v.Leave(n)
}
// DropPlacementPolicyStmt is a statement to drop a Policy.
type DropPlacementPolicyStmt struct {
ddlNode
IfExists bool
PolicyName CIStr
}
// Restore implements Restore interface.
func (n *DropPlacementPolicyStmt) Restore(ctx *format.RestoreCtx) error {
if ctx.Flags.HasTiDBSpecialCommentFlag() {
return restorePlacementStmtInSpecialComment(ctx, n)
}
ctx.WriteKeyWord("DROP PLACEMENT POLICY ")
if n.IfExists {
ctx.WriteKeyWord("IF EXISTS ")
}
ctx.WriteName(n.PolicyName.O)
return nil
}
func (n *DropPlacementPolicyStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*DropPlacementPolicyStmt)
return v.Leave(n)
}
type DropResourceGroupStmt struct {
ddlNode
IfExists bool
ResourceGroupName CIStr
}
// Restore implements Restore interface.
func (n *DropResourceGroupStmt) Restore(ctx *format.RestoreCtx) error {
if ctx.Flags.HasTiDBSpecialCommentFlag() {
return restoreStmtInSpecialComment(ctx, n, tidb.FeatureIDResourceGroup)
}
ctx.WriteKeyWord("DROP RESOURCE GROUP ")
if n.IfExists {
ctx.WriteKeyWord("IF EXISTS ")
}
ctx.WriteName(n.ResourceGroupName.O)
return nil
}
func (n *DropResourceGroupStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*DropResourceGroupStmt)
return v.Leave(n)
}
type OptimizeTableStmt struct {
ddlNode
NoWriteToBinLog bool
Tables []*TableName
}
func (n *OptimizeTableStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("OPTIMIZE ")
if n.NoWriteToBinLog {
ctx.WriteKeyWord("NO_WRITE_TO_BINLOG ")
}
ctx.WriteKeyWord("TABLE ")
for index, table := range n.Tables {
if index != 0 {
ctx.WritePlain(", ")
}
if err := table.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore OptimizeTableStmt.Tables[%d]", index)
}
}
return nil
}
func (n *OptimizeTableStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*OptimizeTableStmt)
return v.Leave(n)
}
// DropSequenceStmt is a statement to drop a Sequence.
type DropSequenceStmt struct {
ddlNode
IfExists bool
Sequences []*TableName
}
// Restore implements Node interface.
func (n *DropSequenceStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("DROP SEQUENCE ")
if n.IfExists {
ctx.WriteKeyWord("IF EXISTS ")
}
for i, sequence := range n.Sequences {
if i != 0 {
ctx.WritePlain(", ")
}
if err := sequence.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore DropSequenceStmt.Sequences[%d]", i)
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *DropSequenceStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*DropSequenceStmt)
for i, val := range n.Sequences {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.Sequences[i] = node.(*TableName)
}
return v.Leave(n)
}
// RenameTableStmt is a statement to rename a table.
// See http://dev.mysql.com/doc/refman/5.7/en/rename-table.html
type RenameTableStmt struct {
ddlNode
TableToTables []*TableToTable
}
// Restore implements Node interface.
func (n *RenameTableStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("RENAME TABLE ")
for index, table2table := range n.TableToTables {
if index != 0 {
ctx.WritePlain(", ")
}
if err := table2table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore RenameTableStmt.TableToTables")
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *RenameTableStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*RenameTableStmt)
for i, t := range n.TableToTables {
node, ok := t.Accept(v)
if !ok {
return n, false
}
n.TableToTables[i] = node.(*TableToTable)
}
return v.Leave(n)
}
// TableToTable represents renaming old table to new table used in RenameTableStmt.
type TableToTable struct {
node
OldTable *TableName
NewTable *TableName
}
// Restore implements Node interface.
func (n *TableToTable) Restore(ctx *format.RestoreCtx) error {
if err := n.OldTable.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore TableToTable.OldTable")
}
ctx.WriteKeyWord(" TO ")
if err := n.NewTable.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore TableToTable.NewTable")
}
return nil
}
// Accept implements Node Accept interface.
func (n *TableToTable) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*TableToTable)
node, ok := n.OldTable.Accept(v)
if !ok {
return n, false
}
n.OldTable = node.(*TableName)
node, ok = n.NewTable.Accept(v)
if !ok {
return n, false
}
n.NewTable = node.(*TableName)
return v.Leave(n)
}
// CreateViewStmt is a statement to create a View.
// See https://dev.mysql.com/doc/refman/5.7/en/create-view.html
type CreateViewStmt struct {
ddlNode
OrReplace bool
ViewName *TableName
Cols []CIStr
Select StmtNode
SchemaCols []CIStr
Algorithm ViewAlgorithm
Definer *auth.UserIdentity
Security ViewSecurity
CheckOption ViewCheckOption
}
// Restore implements Node interface.
func (n *CreateViewStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("CREATE ")
if n.OrReplace {
ctx.WriteKeyWord("OR REPLACE ")
}
ctx.WriteKeyWord("ALGORITHM")
ctx.WritePlain(" = ")
ctx.WriteKeyWord(n.Algorithm.String())
ctx.WriteKeyWord(" DEFINER")
ctx.WritePlain(" = ")
// todo Use n.Definer.Restore(ctx) to replace this part
if n.Definer.CurrentUser {
ctx.WriteKeyWord("current_user")
} else {
ctx.WriteName(n.Definer.Username)
if n.Definer.Hostname != "" {
ctx.WritePlain("@")
ctx.WriteName(n.Definer.Hostname)
}
}
ctx.WriteKeyWord(" SQL SECURITY ")
ctx.WriteKeyWord(n.Security.String())
ctx.WriteKeyWord(" VIEW ")
if err := n.ViewName.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while create CreateViewStmt.ViewName")
}
for i, col := range n.Cols {
if i == 0 {
ctx.WritePlain(" (")
} else {
ctx.WritePlain(",")
}
ctx.WriteName(col.O)
if i == len(n.Cols)-1 {
ctx.WritePlain(")")
}
}
ctx.WriteKeyWord(" AS ")
if err := n.Select.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while create CreateViewStmt.Select")
}
if n.CheckOption != CheckOptionCascaded {
ctx.WriteKeyWord(" WITH ")
ctx.WriteKeyWord(n.CheckOption.String())
ctx.WriteKeyWord(" CHECK OPTION")
}
return nil
}
// Accept implements Node Accept interface.
func (n *CreateViewStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*CreateViewStmt)
node, ok := n.ViewName.Accept(v)
if !ok {
return n, false
}
n.ViewName = node.(*TableName)
selnode, ok := n.Select.Accept(v)
if !ok {
return n, false
}
n.Select = selnode.(StmtNode)
return v.Leave(n)
}
// CreatePlacementPolicyStmt is a statement to create a policy.
type CreatePlacementPolicyStmt struct {
ddlNode
OrReplace bool
IfNotExists bool
PolicyName CIStr
PlacementOptions []*PlacementOption
}
// Restore implements Node interface.
func (n *CreatePlacementPolicyStmt) Restore(ctx *format.RestoreCtx) error {
if ctx.Flags.HasTiDBSpecialCommentFlag() {
return restorePlacementStmtInSpecialComment(ctx, n)
}
ctx.WriteKeyWord("CREATE ")
if n.OrReplace {
ctx.WriteKeyWord("OR REPLACE ")
}
ctx.WriteKeyWord("PLACEMENT POLICY ")
if n.IfNotExists {
ctx.WriteKeyWord("IF NOT EXISTS ")
}
ctx.WriteName(n.PolicyName.O)
for i, option := range n.PlacementOptions {
ctx.WritePlain(" ")
if err := option.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while splicing CreatePlacementPolicy TableOption: [%v]", i)
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *CreatePlacementPolicyStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*CreatePlacementPolicyStmt)
return v.Leave(n)
}
// MaskingPolicyState represents the optional ENABLE/DISABLE state of a masking policy.
type MaskingPolicyState struct {
Enabled bool
Explicit bool
}
// MaskingPolicyRestrictOps is a bitmask of operations restricted by a masking policy.
type MaskingPolicyRestrictOps uint64
// Masking policy restricted operation values.
const (
MaskingPolicyRestrictOpNone MaskingPolicyRestrictOps = 0
MaskingPolicyRestrictOpInsertIntoSelect MaskingPolicyRestrictOps = 1 << iota
MaskingPolicyRestrictOpUpdateSelect
MaskingPolicyRestrictOpDeleteSelect
MaskingPolicyRestrictOpCTAS
)
// Masking policy restricted operation names.
const (
MaskingPolicyRestrictNameInsertIntoSelect = "INSERT_INTO_SELECT"
MaskingPolicyRestrictNameUpdateSelect = "UPDATE_SELECT"
MaskingPolicyRestrictNameDeleteSelect = "DELETE_SELECT"
MaskingPolicyRestrictNameCTAS = "CTAS"
)
func (ops MaskingPolicyRestrictOps) names() []string {
if ops == MaskingPolicyRestrictOpNone {
return nil
}
names := make([]string, 0, 4)
if ops&MaskingPolicyRestrictOpInsertIntoSelect != 0 {
names = append(names, MaskingPolicyRestrictNameInsertIntoSelect)
}
if ops&MaskingPolicyRestrictOpUpdateSelect != 0 {
names = append(names, MaskingPolicyRestrictNameUpdateSelect)
}
if ops&MaskingPolicyRestrictOpDeleteSelect != 0 {
names = append(names, MaskingPolicyRestrictNameDeleteSelect)
}
if ops&MaskingPolicyRestrictOpCTAS != 0 {
names = append(names, MaskingPolicyRestrictNameCTAS)
}
return names
}
func restoreMaskingPolicyRestrictOn(ctx *format.RestoreCtx, ops MaskingPolicyRestrictOps, writeNone bool) {
if ops == MaskingPolicyRestrictOpNone {
if !writeNone {
return
}
ctx.WriteKeyWord("RESTRICT ON NONE")
return
}
ctx.WriteKeyWord("RESTRICT ON (")
for i, name := range ops.names() {
if i > 0 {
ctx.WritePlain(", ")
}
ctx.WriteKeyWord(name)
}
ctx.WritePlain(")")
}
// CreateMaskingPolicyStmt is a statement to create a masking policy.
type CreateMaskingPolicyStmt struct {
ddlNode
OrReplace bool
IfNotExists bool
PolicyName CIStr
Table *TableName
Column *ColumnName
Expr ExprNode
RestrictOps MaskingPolicyRestrictOps
MaskingPolicyState MaskingPolicyState
}
// Restore implements Node interface.
func (n *CreateMaskingPolicyStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("CREATE ")
if n.OrReplace {
ctx.WriteKeyWord("OR REPLACE ")
}
ctx.WriteKeyWord("MASKING POLICY ")
if n.IfNotExists {
ctx.WriteKeyWord("IF NOT EXISTS ")
}
ctx.WriteName(n.PolicyName.O)
ctx.WriteKeyWord(" ON ")
if err := n.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore CreateMaskingPolicyStmt.Table")
}
ctx.WritePlain(" (")
if err := n.Column.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore CreateMaskingPolicyStmt.Column")
}
ctx.WritePlain(") ")
ctx.WriteKeyWord("AS ")
if err := n.Expr.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore CreateMaskingPolicyStmt.Expr")
}
if n.RestrictOps != MaskingPolicyRestrictOpNone {
ctx.WritePlain(" ")
restoreMaskingPolicyRestrictOn(ctx, n.RestrictOps, false)
}
if n.MaskingPolicyState.Explicit {
ctx.WritePlain(" ")
if n.MaskingPolicyState.Enabled {
ctx.WriteKeyWord("ENABLE")
} else {
ctx.WriteKeyWord("DISABLE")
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *CreateMaskingPolicyStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*CreateMaskingPolicyStmt)
if n.Table != nil {
node, ok := n.Table.Accept(v)
if !ok {
return n, false
}
n.Table = node.(*TableName)
}
if n.Column != nil {
node, ok := n.Column.Accept(v)
if !ok {
return n, false
}
n.Column = node.(*ColumnName)
}
if n.Expr != nil {
node, ok := n.Expr.Accept(v)
if !ok {
return n, false
}
n.Expr = node.(ExprNode)
}
return v.Leave(n)
}
// CreateResourceGroupStmt is a statement to create a policy.
type CreateResourceGroupStmt struct {
ddlNode
IfNotExists bool
ResourceGroupName CIStr
ResourceGroupOptionList []*ResourceGroupOption
}
// Restore implements Node interface.
func (n *CreateResourceGroupStmt) Restore(ctx *format.RestoreCtx) error {
if ctx.Flags.HasTiDBSpecialCommentFlag() {
return restoreStmtInSpecialComment(ctx, n, tidb.FeatureIDResourceGroup)
}
ctx.WriteKeyWord("CREATE ")
ctx.WriteKeyWord("RESOURCE GROUP ")
if n.IfNotExists {
ctx.WriteKeyWord("IF NOT EXISTS ")
}
ctx.WriteName(n.ResourceGroupName.O)
for i, option := range n.ResourceGroupOptionList {
if i > 0 {
ctx.WritePlain(",")
}
ctx.WritePlain(" ")
if err := option.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while splicing CreateResourceGroupStmt Option: [%v]", i)
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *CreateResourceGroupStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*CreateResourceGroupStmt)
return v.Leave(n)
}
// CreateSequenceStmt is a statement to create a Sequence.
type CreateSequenceStmt struct {
ddlNode
// TODO : support or replace if need : care for it will conflict on temporaryOpt.
IfNotExists bool
Name *TableName
SeqOptions []*SequenceOption
TblOptions []*TableOption
}
// Restore implements Node interface.
func (n *CreateSequenceStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("CREATE ")
ctx.WriteKeyWord("SEQUENCE ")
if n.IfNotExists {
ctx.WriteKeyWord("IF NOT EXISTS ")
}
if err := n.Name.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while create CreateSequenceStmt.Name")
}
for i, option := range n.SeqOptions {
ctx.WritePlain(" ")
if err := option.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while splicing CreateSequenceStmt SequenceOption: [%v]", i)
}
}
for i, option := range n.TblOptions {
ctx.WritePlain(" ")
if err := option.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while splicing CreateSequenceStmt TableOption: [%v]", i)
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *CreateSequenceStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*CreateSequenceStmt)
node, ok := n.Name.Accept(v)
if !ok {
return n, false
}
n.Name = node.(*TableName)
return v.Leave(n)
}
// IndexLockAndAlgorithm stores the algorithm option and the lock option.
type IndexLockAndAlgorithm struct {
node
LockTp LockType
AlgorithmTp AlgorithmType
}
// Restore implements Node interface.
func (n *IndexLockAndAlgorithm) Restore(ctx *format.RestoreCtx) error {
hasPrevOption := false
if n.AlgorithmTp != AlgorithmTypeDefault {
ctx.WriteKeyWord("ALGORITHM")
ctx.WritePlain(" = ")
ctx.WriteKeyWord(n.AlgorithmTp.String())
hasPrevOption = true
}
if n.LockTp != LockTypeDefault {
if hasPrevOption {
ctx.WritePlain(" ")
}
ctx.WriteKeyWord("LOCK")
ctx.WritePlain(" = ")
ctx.WriteKeyWord(n.LockTp.String())
}
return nil
}
// Accept implements Node Accept interface.
func (n *IndexLockAndAlgorithm) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*IndexLockAndAlgorithm)
return v.Leave(n)
}
// IndexKeyType is the type for index key.
type IndexKeyType int
// Index key types.
const (
IndexKeyTypeNone IndexKeyType = iota
IndexKeyTypeUnique
IndexKeyTypeSpatial
// IndexKeyTypeFulltext is only used in AST.
// It will be rewritten into IndexKeyTypeFulltext after preprocessor phase.
IndexKeyTypeFulltext
// IndexKeyTypeVector is only used in AST.
// It will be rewritten into IndexKeyTypeColumnar after preprocessor phase.
IndexKeyTypeVector
IndexKeyTypeColumnar
)
// CreateIndexStmt is a statement to create an index.
// See https://dev.mysql.com/doc/refman/5.7/en/create-index.html
type CreateIndexStmt struct {
ddlNode
// only supported by MariaDB 10.0.2+,
// see https://mariadb.com/kb/en/library/create-index/
IfNotExists bool
IndexName string
Table *TableName
IndexPartSpecifications []*IndexPartSpecification
IndexOption *IndexOption
KeyType IndexKeyType
LockAlg *IndexLockAndAlgorithm
}
// Restore implements Node interface.
func (n *CreateIndexStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("CREATE ")
switch n.KeyType {
case IndexKeyTypeUnique:
ctx.WriteKeyWord("UNIQUE ")
case IndexKeyTypeSpatial:
ctx.WriteKeyWord("SPATIAL ")
case IndexKeyTypeFulltext:
ctx.WriteKeyWord("FULLTEXT ")
case IndexKeyTypeVector:
ctx.WriteKeyWord("VECTOR ")
case IndexKeyTypeColumnar:
ctx.WriteKeyWord("COLUMNAR ")
}
ctx.WriteKeyWord("INDEX ")
if n.IfNotExists {
ctx.WriteKeyWordWithSpecialComments(tidb.FeatureIDTiDB, "IF NOT EXISTS ")
}
ctx.WriteName(n.IndexName)
ctx.WriteKeyWord(" ON ")
if err := n.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore CreateIndexStmt.Table")
}
ctx.WritePlain(" (")
for i, indexColName := range n.IndexPartSpecifications {
if i != 0 {
ctx.WritePlain(", ")
}
if err := indexColName.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore CreateIndexStmt.IndexPartSpecifications: [%v]", i)
}
}
ctx.WritePlain(")")
if n.IndexOption != nil && !n.IndexOption.IsEmpty() {
ctx.WritePlain(" ")
if err := n.IndexOption.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore CreateIndexStmt.IndexOption")
}
}
if n.LockAlg != nil {
ctx.WritePlain(" ")
if err := n.LockAlg.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore CreateIndexStmt.LockAlg")
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *CreateIndexStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*CreateIndexStmt)
node, ok := n.Table.Accept(v)
if !ok {
return n, false
}
n.Table = node.(*TableName)
for i, val := range n.IndexPartSpecifications {
node, ok = val.Accept(v)
if !ok {
return n, false
}
n.IndexPartSpecifications[i] = node.(*IndexPartSpecification)
}
if n.IndexOption != nil {
node, ok := n.IndexOption.Accept(v)
if !ok {
return n, false
}
n.IndexOption = node.(*IndexOption)
}
if n.LockAlg != nil {
node, ok := n.LockAlg.Accept(v)
if !ok {
return n, false
}
n.LockAlg = node.(*IndexLockAndAlgorithm)
}
return v.Leave(n)
}
// DropIndexStmt is a statement to drop the index.
// See https://dev.mysql.com/doc/refman/5.7/en/drop-index.html
type DropIndexStmt struct {
ddlNode
IfExists bool
IndexName string
Table *TableName
LockAlg *IndexLockAndAlgorithm
IsHypo bool // whether this operation is for a hypothetical index.
}
// Restore implements Node interface.
func (n *DropIndexStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("DROP INDEX ")
if n.IfExists {
ctx.WriteKeyWordWithSpecialComments(tidb.FeatureIDTiDB, "IF EXISTS ")
}
ctx.WriteName(n.IndexName)
ctx.WriteKeyWord(" ON ")
if err := n.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while add index")
}
if n.LockAlg != nil {
ctx.WritePlain(" ")
if err := n.LockAlg.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore CreateIndexStmt.LockAlg")
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *DropIndexStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*DropIndexStmt)
node, ok := n.Table.Accept(v)
if !ok {
return n, false
}
n.Table = node.(*TableName)
if n.LockAlg != nil {
node, ok := n.LockAlg.Accept(v)
if !ok {
return n, false
}
n.LockAlg = node.(*IndexLockAndAlgorithm)
}
return v.Leave(n)
}
// LockTablesStmt is a statement to lock tables.
type LockTablesStmt struct {
ddlNode
TableLocks []TableLock
}
// TableLock contains the table name and lock type.
type TableLock struct {
Table *TableName
Type TableLockType
}
// Accept implements Node Accept interface.
func (n *LockTablesStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*LockTablesStmt)
for i := range n.TableLocks {
node, ok := n.TableLocks[i].Table.Accept(v)
if !ok {
return n, false
}
n.TableLocks[i].Table = node.(*TableName)
}
return v.Leave(n)
}
// Restore implements Node interface.
func (n *LockTablesStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("LOCK TABLES ")
for i, tl := range n.TableLocks {
if i != 0 {
ctx.WritePlain(", ")
}
if err := tl.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while add index")
}
ctx.WriteKeyWord(" " + tl.Type.String())
}
return nil
}
// UnlockTablesStmt is a statement to unlock tables.
type UnlockTablesStmt struct {
ddlNode
}
// Accept implements Node Accept interface.
func (n *UnlockTablesStmt) Accept(v Visitor) (Node, bool) {
_, _ = v.Enter(n)
return v.Leave(n)
}
// Restore implements Node interface.
func (n *UnlockTablesStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("UNLOCK TABLES")
return nil
}
// CleanupTableLockStmt is a statement to cleanup table lock.
type CleanupTableLockStmt struct {
ddlNode
Tables []*TableName
}
// Accept implements Node Accept interface.
func (n *CleanupTableLockStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*CleanupTableLockStmt)
for i := range n.Tables {
node, ok := n.Tables[i].Accept(v)
if !ok {
return n, false
}
n.Tables[i] = node.(*TableName)
}
return v.Leave(n)
}
// Restore implements Node interface.
func (n *CleanupTableLockStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("ADMIN CLEANUP TABLE LOCK ")
for i, v := range n.Tables {
if i != 0 {
ctx.WritePlain(", ")
}
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore CleanupTableLockStmt.Tables[%d]", i)
}
}
return nil
}
// RepairTableStmt is a statement to repair tableInfo.
type RepairTableStmt struct {
ddlNode
Table *TableName
CreateStmt *CreateTableStmt
}
// Accept implements Node Accept interface.
func (n *RepairTableStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*RepairTableStmt)
node, ok := n.Table.Accept(v)
if !ok {
return n, false
}
n.Table = node.(*TableName)
node, ok = n.CreateStmt.Accept(v)
if !ok {
return n, false
}
n.CreateStmt = node.(*CreateTableStmt)
return v.Leave(n)
}
// Restore implements Node interface.
func (n *RepairTableStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("ADMIN REPAIR TABLE ")
if err := n.Table.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore RepairTableStmt.table : [%v]", n.Table)
}
ctx.WritePlain(" ")
if err := n.CreateStmt.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore RepairTableStmt.createStmt : [%v]", n.CreateStmt)
}
return nil
}
// PlacementOptionType is the type for PlacementOption
type PlacementOptionType int
// PlacementOption types.
const (
PlacementOptionPrimaryRegion PlacementOptionType = 0x3000 + iota
PlacementOptionRegions
PlacementOptionFollowerCount
PlacementOptionVoterCount
PlacementOptionLearnerCount
PlacementOptionSchedule
PlacementOptionConstraints
PlacementOptionLeaderConstraints
PlacementOptionLearnerConstraints
PlacementOptionFollowerConstraints
PlacementOptionVoterConstraints
PlacementOptionSurvivalPreferences
PlacementOptionPolicy
)
// PlacementOption is used for parsing placement option.
type PlacementOption struct {
Tp PlacementOptionType
StrValue string
UintValue uint64
}
func (n *PlacementOption) Restore(ctx *format.RestoreCtx) error {
if ctx.Flags.HasSkipPlacementRuleForRestoreFlag() {
return nil
}
fn := func() error {
switch n.Tp {
case PlacementOptionPrimaryRegion:
ctx.WriteKeyWord("PRIMARY_REGION ")
ctx.WritePlain("= ")
ctx.WriteString(n.StrValue)
case PlacementOptionRegions:
ctx.WriteKeyWord("REGIONS ")
ctx.WritePlain("= ")
ctx.WriteString(n.StrValue)
case PlacementOptionFollowerCount:
ctx.WriteKeyWord("FOLLOWERS ")
ctx.WritePlain("= ")
ctx.WritePlainf("%d", n.UintValue)
case PlacementOptionVoterCount:
ctx.WriteKeyWord("VOTERS ")
ctx.WritePlain("= ")
ctx.WritePlainf("%d", n.UintValue)
case PlacementOptionLearnerCount:
ctx.WriteKeyWord("LEARNERS ")
ctx.WritePlain("= ")
ctx.WritePlainf("%d", n.UintValue)
case PlacementOptionSchedule:
ctx.WriteKeyWord("SCHEDULE ")
ctx.WritePlain("= ")
ctx.WriteString(n.StrValue)
case PlacementOptionConstraints:
ctx.WriteKeyWord("CONSTRAINTS ")
ctx.WritePlain("= ")
ctx.WriteString(n.StrValue)
case PlacementOptionLeaderConstraints:
ctx.WriteKeyWord("LEADER_CONSTRAINTS ")
ctx.WritePlain("= ")
ctx.WriteString(n.StrValue)
case PlacementOptionFollowerConstraints:
ctx.WriteKeyWord("FOLLOWER_CONSTRAINTS ")
ctx.WritePlain("= ")
ctx.WriteString(n.StrValue)
case PlacementOptionVoterConstraints:
ctx.WriteKeyWord("VOTER_CONSTRAINTS ")
ctx.WritePlain("= ")
ctx.WriteString(n.StrValue)
case PlacementOptionLearnerConstraints:
ctx.WriteKeyWord("LEARNER_CONSTRAINTS ")
ctx.WritePlain("= ")
ctx.WriteString(n.StrValue)
case PlacementOptionPolicy:
ctx.WriteKeyWord("PLACEMENT POLICY ")
ctx.WritePlain("= ")
ctx.WriteName(n.StrValue)
case PlacementOptionSurvivalPreferences:
ctx.WriteKeyWord("SURVIVAL_PREFERENCES ")
ctx.WritePlain("= ")
ctx.WriteString(n.StrValue)
default:
return errors.Errorf("invalid PlacementOption: %d", n.Tp)
}
return nil
}
// WriteSpecialComment
return ctx.WriteWithSpecialComments(tidb.FeatureIDPlacement, fn)
}
// ResourceGroupOption is used for parsing resource group option.
type ResourceGroupOption struct {
Tp ResourceUnitType
StrValue string
UintValue uint64
Burstable BurstableType
RunawayOptionList []*ResourceGroupRunawayOption
BackgroundOptions []*ResourceGroupBackgroundOption
}
type ResourceUnitType int
const (
// RU mode
ResourceRURate ResourceUnitType = iota
ResourcePriority
ResourceBurstable
// Raw mode
ResourceUnitCPU
ResourceUnitIOReadBandwidth
ResourceUnitIOWriteBandwidth
// Options
ResourceBurstableOpiton
ResourceUnlimitedOption
ResourceGroupRunaway
ResourceGroupBackground
)
type BurstableType int
const (
BurstableDisable BurstableType = iota
BurstableModerated
BurstableUnlimited
)
func (n *ResourceGroupOption) Restore(ctx *format.RestoreCtx) error {
switch n.Tp {
case ResourceRURate:
ctx.WriteKeyWord("RU_PER_SEC ")
ctx.WritePlain("= ")
if n.Burstable == BurstableUnlimited {
ctx.WriteKeyWord("UNLIMITED")
} else {
ctx.WritePlainf("%d", n.UintValue)
}
case ResourcePriority:
ctx.WriteKeyWord("PRIORITY ")
ctx.WritePlain("= ")
ctx.WriteKeyWord(PriorityValueToName(n.UintValue))
case ResourceUnitCPU:
ctx.WriteKeyWord("CPU ")
ctx.WritePlain("= ")
ctx.WriteString(n.StrValue)
case ResourceUnitIOReadBandwidth:
ctx.WriteKeyWord("IO_READ_BANDWIDTH ")
ctx.WritePlain("= ")
ctx.WriteString(n.StrValue)
case ResourceUnitIOWriteBandwidth:
ctx.WriteKeyWord("IO_WRITE_BANDWIDTH ")
ctx.WritePlain("= ")
ctx.WriteString(n.StrValue)
case ResourceBurstable:
ctx.WriteKeyWord("BURSTABLE ")
ctx.WritePlain("= ")
switch n.Burstable {
case BurstableDisable:
ctx.WritePlain("OFF")
case BurstableModerated:
ctx.WritePlain("MODERATED")
case BurstableUnlimited:
ctx.WritePlain("UNLIMITED")
}
case ResourceGroupRunaway:
ctx.WritePlain("QUERY_LIMIT ")
ctx.WritePlain("= ")
if len(n.RunawayOptionList) > 0 {
ctx.WritePlain("(")
for i, option := range n.RunawayOptionList {
if i > 0 {
ctx.WritePlain(" ")
}
if err := option.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while splicing ResourceGroupRunaway Option: [%v]", option)
}
}
ctx.WritePlain(")")
} else {
ctx.WritePlain("NULL")
}
case ResourceGroupBackground:
ctx.WritePlain("BACKGROUND ")
ctx.WritePlain("= ")
if len(n.BackgroundOptions) > 0 {
ctx.WritePlain("(")
for i, option := range n.BackgroundOptions {
if i > 0 {
ctx.WritePlain(", ")
}
if err := option.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while splicing ResourceGroup Background Option: [%v]", option)
}
}
ctx.WritePlain(")")
} else {
ctx.WritePlain("NULL")
}
default:
return errors.Errorf("invalid ResourceGroupOption: %d", n.Tp)
}
return nil
}
// ResourceGroupRunawayOption is used for parsing resource group runaway rule option.
type ResourceGroupRunawayOption struct {
Tp RunawayOptionType
RuleOption *ResourceGroupRunawayRuleOption
ActionOption *ResourceGroupRunawayActionOption
WatchOption *ResourceGroupRunawayWatchOption
}
func (n *ResourceGroupRunawayOption) Restore(ctx *format.RestoreCtx) error {
switch n.Tp {
case RunawayRule:
n.RuleOption.restore(ctx)
case RunawayAction:
n.ActionOption.Restore(ctx)
case RunawayWatch:
n.WatchOption.restore(ctx)
default:
return errors.Errorf("invalid ResourceGroupRunawayOption: %d", n.Tp)
}
return nil
}
// ResourceGroupRunawayRuleOption is used for parsing the resource group/query watch runaway rule.
type ResourceGroupRunawayRuleOption struct {
Tp RunawayRuleOptionType
ExecElapsed string
ProcessedKeys int64
RequestUnit int64
}
type RunawayRuleOptionType int
const (
RunawayRuleExecElapsed RunawayRuleOptionType = iota
RunawayRuleProcessedKeys
RunawayRuleRequestUnit
)
func (n *ResourceGroupRunawayRuleOption) restore(ctx *format.RestoreCtx) error {
switch n.Tp {
case RunawayRuleExecElapsed:
ctx.WriteKeyWord("EXEC_ELAPSED ")
ctx.WritePlain("= ")
ctx.WriteString(n.ExecElapsed)
case RunawayRuleProcessedKeys:
ctx.WriteKeyWord("PROCESSED_KEYS ")
ctx.WritePlain("= ")
ctx.WritePlainf("%d", n.ProcessedKeys)
case RunawayRuleRequestUnit:
ctx.WriteKeyWord("RU ")
ctx.WritePlain("= ")
ctx.WritePlainf("%d", n.RequestUnit)
}
return nil
}
// ResourceGroupRunawayActionOption is used for parsing the resource group runaway action.
type ResourceGroupRunawayActionOption struct {
node
Type RunawayActionType
SwitchGroupName CIStr
}
// Restore implements Node interface.
func (n *ResourceGroupRunawayActionOption) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("ACTION ")
ctx.WritePlain("= ")
switch n.Type {
case RunawayActionNone, RunawayActionDryRun, RunawayActionCooldown, RunawayActionKill:
ctx.WriteKeyWord(n.Type.String())
case RunawayActionSwitchGroup:
switchGroup := n.SwitchGroupName.String()
if len(switchGroup) == 0 {
return errors.New("SWITCH_GROUP runaway watch action requires a non-empty group name")
}
ctx.WriteKeyWord("SWITCH_GROUP")
ctx.WritePlain("(")
ctx.WriteName(switchGroup)
ctx.WritePlain(")")
}
return nil
}
// Accept implements Node Accept interface.
func (n *ResourceGroupRunawayActionOption) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
return v.Leave(n)
}
// ResourceGroupRunawayWatchOption is used for parsing the resource group runaway watch.
type ResourceGroupRunawayWatchOption struct {
Type RunawayWatchType
Duration string
}
func (n *ResourceGroupRunawayWatchOption) restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("WATCH ")
ctx.WritePlain("= ")
ctx.WriteKeyWord(n.Type.String())
ctx.WritePlain(" ")
ctx.WriteKeyWord("DURATION ")
ctx.WritePlain("= ")
if len(n.Duration) > 0 {
ctx.WriteString(n.Duration)
} else {
ctx.WriteKeyWord("UNLIMITED")
}
return nil
}
type BackgroundOptionType int
const (
BackgroundOptionNone BackgroundOptionType = iota
BackgroundOptionTaskNames
BackgroundUtilizationLimit
)
// ResourceGroupBackgroundOption is used to config background job settings.
type ResourceGroupBackgroundOption struct {
Type BackgroundOptionType
StrValue string
UintValue uint64
}
func (n *ResourceGroupBackgroundOption) Restore(ctx *format.RestoreCtx) error {
switch n.Type {
case BackgroundOptionTaskNames:
ctx.WriteKeyWord("TASK_TYPES")
ctx.WritePlain(" = ")
ctx.WriteString(n.StrValue)
case BackgroundUtilizationLimit:
ctx.WriteKeyWord("UTILIZATION_LIMIT")
ctx.WritePlain(" = ")
ctx.WritePlainf("%d", n.UintValue)
default:
return errors.Errorf("unknown ResourceGroupBackgroundOption: %d", n.Type)
}
return nil
}
type StatsOptionType int
const (
StatsOptionBuckets StatsOptionType = 0x5000 + iota
StatsOptionTopN
StatsOptionColsChoice
StatsOptionColList
StatsOptionSampleRate
)
// TableOptionType is the type for TableOption
type TableOptionType int
// TableOption types.
const (
TableOptionNone TableOptionType = iota
TableOptionEngine
TableOptionCharset
TableOptionCollate
TableOptionAutoIdCache //nolint:revive
TableOptionAutoIncrement
TableOptionAutoRandomBase
TableOptionComment
TableOptionAvgRowLength
TableOptionCheckSum
TableOptionCompression
TableOptionConnection
TableOptionPassword
TableOptionKeyBlockSize
TableOptionMaxRows
TableOptionMinRows
TableOptionDelayKeyWrite
TableOptionRowFormat
TableOptionStatsPersistent
TableOptionStatsAutoRecalc
TableOptionShardRowID
TableOptionPreSplitRegion
TableOptionPackKeys
TableOptionTablespace
TableOptionNodegroup
TableOptionDataDirectory
TableOptionIndexDirectory
TableOptionStorageMedia
TableOptionStatsSamplePages
TableOptionSecondaryEngine
TableOptionSecondaryEngineNull
TableOptionInsertMethod
TableOptionTableCheckSum
TableOptionUnion
TableOptionEncryption
TableOptionTTL
TableOptionTTLEnable
TableOptionTTLJobInterval
TableOptionEngineAttribute
TableOptionSecondaryEngineAttribute
TableOptionAutoextendSize
TableOptionPageChecksum
TableOptionPageCompressed
TableOptionPageCompressionLevel
TableOptionTransactional
TableOptionIetfQuotes
TableOptionSequence
TableOptionAffinity
TableOptionPlacementPolicy = TableOptionType(PlacementOptionPolicy)
TableOptionStatsBuckets = TableOptionType(StatsOptionBuckets)
TableOptionStatsTopN = TableOptionType(StatsOptionTopN)
TableOptionStatsColsChoice = TableOptionType(StatsOptionColsChoice)
TableOptionStatsColList = TableOptionType(StatsOptionColList)
TableOptionStatsSampleRate = TableOptionType(StatsOptionSampleRate)
)
// RowFormat types
const (
RowFormatDefault uint64 = iota + 1
RowFormatDynamic
RowFormatFixed
RowFormatCompressed
RowFormatRedundant
RowFormatCompact
TokuDBRowFormatDefault
TokuDBRowFormatFast
TokuDBRowFormatSmall
TokuDBRowFormatZlib
TokuDBRowFormatQuickLZ
TokuDBRowFormatLzma
TokuDBRowFormatSnappy
TokuDBRowFormatUncompressed
TokuDBRowFormatZstd
)
// OnDuplicateKeyHandlingType is the option that handle unique key values in 'CREATE TABLE ... SELECT' or `LOAD DATA`.
// See https://dev.mysql.com/doc/refman/5.7/en/create-table-select.html
// See https://dev.mysql.com/doc/refman/5.7/en/load-data.html
type OnDuplicateKeyHandlingType int
// OnDuplicateKeyHandling types
const (
OnDuplicateKeyHandlingError OnDuplicateKeyHandlingType = iota
OnDuplicateKeyHandlingIgnore
OnDuplicateKeyHandlingReplace
)
const (
TableOptionCharsetWithoutConvertTo uint64 = 0
TableOptionCharsetWithConvertTo uint64 = 1
)
const (
// TableAffinityLevelNone means no affinity.
TableAffinityLevelNone = "none"
// TableAffinityLevelTable means table-level affinity.
TableAffinityLevelTable = "table"
// TableAffinityLevelPartition means partition-level affinity.
TableAffinityLevelPartition = "partition"
)
// NormalizeTableAffinityLevel normalizes the affinity level to lower case and checks if it's valid.
func NormalizeTableAffinityLevel(s string) (string, bool) {
lower := strings.ToLower(s)
switch lower {
case TableAffinityLevelNone, TableAffinityLevelTable, TableAffinityLevelPartition:
return lower, true
case "":
return TableAffinityLevelNone, true
default:
return s, false
}
}
// TableOption is used for parsing table option from SQL.
type TableOption struct {
node
Tp TableOptionType
Default bool
StrValue string
UintValue uint64
BoolValue bool
TimeUnitValue *TimeUnitExpr
Value ValueExpr
TableNames []*TableName
ColumnName *ColumnName
}
func (n *TableOption) Restore(ctx *format.RestoreCtx) error {
switch n.Tp {
case TableOptionEngine:
ctx.WriteKeyWord("ENGINE ")
ctx.WritePlain("= ")
if n.StrValue != "" {
ctx.WritePlain(n.StrValue)
} else {
ctx.WritePlain("''")
}
case TableOptionCharset:
if n.UintValue == TableOptionCharsetWithConvertTo {
ctx.WriteKeyWord("CONVERT TO ")
} else {
ctx.WriteKeyWord("DEFAULT ")
}
ctx.WriteKeyWord("CHARACTER SET ")
if n.UintValue == TableOptionCharsetWithoutConvertTo {
ctx.WriteKeyWord("= ")
}
if n.Default {
ctx.WriteKeyWord("DEFAULT")
} else {
ctx.WriteKeyWord(n.StrValue)
}
case TableOptionCollate:
ctx.WriteKeyWord("DEFAULT COLLATE ")
ctx.WritePlain("= ")
ctx.WriteKeyWord(n.StrValue)
case TableOptionAutoIncrement:
if n.BoolValue {
ctx.WriteKeyWordWithSpecialComments(tidb.FeatureIDForceAutoInc, "FORCE ")
}
ctx.WriteKeyWord("AUTO_INCREMENT ")
ctx.WritePlain("= ")
ctx.WritePlainf("%d", n.UintValue)
case TableOptionAutoIdCache:
_ = ctx.WriteWithSpecialComments(tidb.FeatureIDAutoIDCache, func() error {
ctx.WriteKeyWord("AUTO_ID_CACHE ")
ctx.WritePlain("= ")
ctx.WritePlainf("%d", n.UintValue)
return nil
})
case TableOptionAutoRandomBase:
if n.BoolValue {
ctx.WriteKeyWordWithSpecialComments(tidb.FeatureIDForceAutoInc, "FORCE ")
}
_ = ctx.WriteWithSpecialComments(tidb.FeatureIDAutoRandomBase, func() error {
ctx.WriteKeyWord("AUTO_RANDOM_BASE ")
ctx.WritePlain("= ")
ctx.WritePlainf("%d", n.UintValue)
return nil
})
case TableOptionComment:
ctx.WriteKeyWord("COMMENT ")
ctx.WritePlain("= ")
ctx.WriteString(n.StrValue)
case TableOptionAvgRowLength:
ctx.WriteKeyWord("AVG_ROW_LENGTH ")
ctx.WritePlain("= ")
ctx.WritePlainf("%d", n.UintValue)
case TableOptionCheckSum:
ctx.WriteKeyWord("CHECKSUM ")
ctx.WritePlain("= ")
ctx.WritePlainf("%d", n.UintValue)
case TableOptionCompression:
ctx.WriteKeyWord("COMPRESSION ")
ctx.WritePlain("= ")
ctx.WriteString(n.StrValue)
case TableOptionConnection:
ctx.WriteKeyWord("CONNECTION ")
ctx.WritePlain("= ")
ctx.WriteString(n.StrValue)
case TableOptionPassword:
ctx.WriteKeyWord("PASSWORD ")
ctx.WritePlain("= ")
ctx.WriteString(n.StrValue)
case TableOptionKeyBlockSize:
ctx.WriteKeyWord("KEY_BLOCK_SIZE ")
ctx.WritePlain("= ")
ctx.WritePlainf("%d", n.UintValue)
case TableOptionMaxRows:
ctx.WriteKeyWord("MAX_ROWS ")
ctx.WritePlain("= ")
ctx.WritePlainf("%d", n.UintValue)
case TableOptionMinRows:
ctx.WriteKeyWord("MIN_ROWS ")
ctx.WritePlain("= ")
ctx.WritePlainf("%d", n.UintValue)
case TableOptionDelayKeyWrite:
ctx.WriteKeyWord("DELAY_KEY_WRITE ")
ctx.WritePlain("= ")
ctx.WritePlainf("%d", n.UintValue)
case TableOptionRowFormat:
ctx.WriteKeyWord("ROW_FORMAT ")
ctx.WritePlain("= ")
switch n.UintValue {
case RowFormatDefault:
ctx.WriteKeyWord("DEFAULT")
case RowFormatDynamic:
ctx.WriteKeyWord("DYNAMIC")
case RowFormatFixed:
ctx.WriteKeyWord("FIXED")
case RowFormatCompressed:
ctx.WriteKeyWord("COMPRESSED")
case RowFormatRedundant:
ctx.WriteKeyWord("REDUNDANT")
case RowFormatCompact:
ctx.WriteKeyWord("COMPACT")
case TokuDBRowFormatDefault:
ctx.WriteKeyWord("TOKUDB_DEFAULT")
case TokuDBRowFormatFast:
ctx.WriteKeyWord("TOKUDB_FAST")
case TokuDBRowFormatSmall:
ctx.WriteKeyWord("TOKUDB_SMALL")
case TokuDBRowFormatZlib:
ctx.WriteKeyWord("TOKUDB_ZLIB")
case TokuDBRowFormatQuickLZ:
ctx.WriteKeyWord("TOKUDB_QUICKLZ")
case TokuDBRowFormatLzma:
ctx.WriteKeyWord("TOKUDB_LZMA")
case TokuDBRowFormatSnappy:
ctx.WriteKeyWord("TOKUDB_SNAPPY")
case TokuDBRowFormatZstd:
ctx.WriteKeyWord("TOKUDB_ZSTD")
case TokuDBRowFormatUncompressed:
ctx.WriteKeyWord("TOKUDB_UNCOMPRESSED")
default:
return errors.Errorf("invalid TableOption: TableOptionRowFormat: %d", n.UintValue)
}
case TableOptionStatsPersistent:
// TODO: not support
ctx.WriteKeyWord("STATS_PERSISTENT ")
ctx.WritePlain("= ")
ctx.WriteKeyWord("DEFAULT")
ctx.WritePlain(" /* TableOptionStatsPersistent is not supported */ ")
case TableOptionStatsAutoRecalc:
ctx.WriteKeyWord("STATS_AUTO_RECALC ")
ctx.WritePlain("= ")
if n.Default {
ctx.WriteKeyWord("DEFAULT")
} else {
ctx.WritePlainf("%d", n.UintValue)
}
case TableOptionShardRowID:
_ = ctx.WriteWithSpecialComments(tidb.FeatureIDTiDB, func() error {
ctx.WriteKeyWord("SHARD_ROW_ID_BITS ")
ctx.WritePlainf("= %d", n.UintValue)
return nil
})
case TableOptionPreSplitRegion:
_ = ctx.WriteWithSpecialComments(tidb.FeatureIDTiDB, func() error {
ctx.WriteKeyWord("PRE_SPLIT_REGIONS ")
ctx.WritePlainf("= %d", n.UintValue)
return nil
})
case TableOptionPackKeys:
// TODO: not support
ctx.WriteKeyWord("PACK_KEYS ")
ctx.WritePlain("= ")
ctx.WriteKeyWord("DEFAULT")
ctx.WritePlain(" /* TableOptionPackKeys is not supported */ ")
case TableOptionTablespace:
ctx.WriteKeyWord("TABLESPACE ")
ctx.WritePlain("= ")
ctx.WriteName(n.StrValue)
case TableOptionNodegroup:
ctx.WriteKeyWord("NODEGROUP ")
ctx.WritePlainf("= %d", n.UintValue)
case TableOptionDataDirectory:
ctx.WriteKeyWord("DATA DIRECTORY ")
ctx.WritePlain("= ")
ctx.WriteString(n.StrValue)
case TableOptionIndexDirectory:
ctx.WriteKeyWord("INDEX DIRECTORY ")
ctx.WritePlain("= ")
ctx.WriteString(n.StrValue)
case TableOptionStorageMedia:
ctx.WriteKeyWord("STORAGE ")
ctx.WriteKeyWord(n.StrValue)
case TableOptionStatsSamplePages:
ctx.WriteKeyWord("STATS_SAMPLE_PAGES ")
ctx.WritePlain("= ")
if n.Default {
ctx.WriteKeyWord("DEFAULT")
} else {
ctx.WritePlainf("%d", n.UintValue)
}
case TableOptionSecondaryEngine:
ctx.WriteKeyWord("SECONDARY_ENGINE ")
ctx.WritePlain("= ")
ctx.WriteString(n.StrValue)
case TableOptionSecondaryEngineNull:
ctx.WriteKeyWord("SECONDARY_ENGINE ")
ctx.WritePlain("= ")
ctx.WriteKeyWord("NULL")
case TableOptionSecondaryEngineAttribute:
ctx.WriteKeyWord("SECONDARY_ENGINE_ATTRIBUTE ")
ctx.WritePlain("= ")
ctx.WriteString(n.StrValue)
case TableOptionInsertMethod:
ctx.WriteKeyWord("INSERT_METHOD ")
ctx.WritePlain("= ")
ctx.WriteKeyWord(n.StrValue)
case TableOptionTableCheckSum:
ctx.WriteKeyWord("TABLE_CHECKSUM ")
ctx.WritePlain("= ")
ctx.WritePlainf("%d", n.UintValue)
case TableOptionUnion:
ctx.WriteKeyWord("UNION ")
ctx.WritePlain("= (")
for i, tableName := range n.TableNames {
if i != 0 {
ctx.WritePlain(",")
}
tableName.Restore(ctx)
}
ctx.WritePlain(")")
case TableOptionEncryption:
ctx.WriteKeyWord("ENCRYPTION ")
ctx.WritePlain("= ")
ctx.WriteString(n.StrValue)
case TableOptionPlacementPolicy:
if ctx.Flags.HasSkipPlacementRuleForRestoreFlag() {
return nil
}
placementOpt := PlacementOption{
Tp: PlacementOptionPolicy,
UintValue: n.UintValue,
StrValue: n.StrValue,
}
return placementOpt.Restore(ctx)
case TableOptionStatsBuckets:
ctx.WriteKeyWord("STATS_BUCKETS ")
ctx.WritePlain("= ")
if n.Default {
ctx.WriteKeyWord("DEFAULT")
} else {
ctx.WritePlainf("%d", n.UintValue)
}
case TableOptionStatsTopN:
ctx.WriteKeyWord("STATS_TOPN ")
ctx.WritePlain("= ")
if n.Default {
ctx.WriteKeyWord("DEFAULT")
} else {
ctx.WritePlainf("%d", n.UintValue)
}
case TableOptionStatsSampleRate:
ctx.WriteKeyWord("STATS_SAMPLE_RATE ")
ctx.WritePlain("= ")
if n.Default {
ctx.WriteKeyWord("DEFAULT")
} else {
ctx.WritePlainf("%v", n.Value.GetValue())
}
case TableOptionStatsColsChoice:
ctx.WriteKeyWord("STATS_COL_CHOICE ")
ctx.WritePlain("= ")
if n.Default {
ctx.WriteKeyWord("DEFAULT")
} else {
ctx.WriteString(n.StrValue)
}
case TableOptionStatsColList:
ctx.WriteKeyWord("STATS_COL_LIST ")
ctx.WritePlain("= ")
if n.Default {
ctx.WriteKeyWord("DEFAULT")
} else {
ctx.WriteString(n.StrValue)
}
case TableOptionTTL:
_ = ctx.WriteWithSpecialComments(tidb.FeatureIDTTL, func() error {
ctx.WriteKeyWord("TTL ")
ctx.WritePlain("= ")
ctx.WriteName(n.ColumnName.Name.String())
ctx.WritePlain(" + INTERVAL ")
err := n.Value.Restore(ctx)
ctx.WritePlain(" ")
if err != nil {
return err
}
return n.TimeUnitValue.Restore(ctx)
})
case TableOptionTTLEnable:
_ = ctx.WriteWithSpecialComments(tidb.FeatureIDTTL, func() error {
ctx.WriteKeyWord("TTL_ENABLE ")
ctx.WritePlain("= ")
if n.BoolValue {
ctx.WriteString("ON")
} else {
ctx.WriteString("OFF")
}
return nil
})
case TableOptionTTLJobInterval:
_ = ctx.WriteWithSpecialComments(tidb.FeatureIDTTL, func() error {
ctx.WriteKeyWord("TTL_JOB_INTERVAL ")
ctx.WritePlain("= ")
ctx.WriteString(n.StrValue)
return nil
})
case TableOptionAutoextendSize:
ctx.WriteKeyWord("AUTOEXTEND_SIZE ")
ctx.WritePlain("= ")
ctx.WritePlain(n.StrValue) // e.g. '4M'
// MariaDB specific options
case TableOptionPageChecksum:
ctx.WriteKeyWord("PAGE_CHECKSUM ")
ctx.WritePlain("= ")
ctx.WritePlainf("%d", n.UintValue)
return nil
case TableOptionPageCompressed:
ctx.WriteKeyWord("PAGE_COMPRESSED ")
ctx.WritePlain("= ")
ctx.WritePlainf("%d", n.UintValue)
return nil
case TableOptionPageCompressionLevel:
ctx.WriteKeyWord("PAGE_COMPRESSION_LEVEL ")
ctx.WritePlain("= ")
ctx.WritePlainf("%d", n.UintValue)
return nil
case TableOptionTransactional:
ctx.WriteKeyWord("TRANSACTIONAL ")
ctx.WritePlain("= ")
ctx.WritePlainf("%d", n.UintValue)
return nil
case TableOptionIetfQuotes:
ctx.WriteKeyWord("IETF_QUOTES ")
ctx.WritePlain("= ")
ctx.WritePlainf("%s", n.StrValue)
return nil
case TableOptionSequence:
ctx.WriteKeyWord("SEQUENCE ")
ctx.WritePlain("= ")
ctx.WritePlainf("%d", n.UintValue)
return nil
case TableOptionAffinity:
_ = ctx.WriteWithSpecialComments(tidb.FeatureIDAffinity, func() error {
ctx.WriteKeyWord("AFFINITY ")
ctx.WritePlain("= ")
ctx.WriteString(n.StrValue)
return nil
})
default:
return errors.Errorf("invalid TableOption: %d", n.Tp)
}
return nil
}
// Accept implements Node Accept interface.
func (n *TableOption) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*TableOption)
if n.Value != nil {
node, ok := n.Value.Accept(v)
if !ok {
return n, false
}
n.Value = node.(ValueExpr)
}
if n.TimeUnitValue != nil {
node, ok := n.TimeUnitValue.Accept(v)
if !ok {
return n, false
}
n.TimeUnitValue = node.(*TimeUnitExpr)
}
return v.Leave(n)
}
// SequenceOptionType is the type for SequenceOption
type SequenceOptionType int
// SequenceOption types.
const (
SequenceOptionNone SequenceOptionType = iota
SequenceOptionIncrementBy
SequenceStartWith
SequenceNoMinValue
SequenceMinValue
SequenceNoMaxValue
SequenceMaxValue
SequenceNoCache
SequenceCache
SequenceNoCycle
SequenceCycle
// SequenceRestart is only used in alter sequence statement.
SequenceRestart
SequenceRestartWith
)
// SequenceOption is used for parsing sequence option from SQL.
type SequenceOption struct {
Tp SequenceOptionType
IntValue int64
}
func (n *SequenceOption) Restore(ctx *format.RestoreCtx) error {
switch n.Tp {
case SequenceOptionIncrementBy:
ctx.WriteKeyWord("INCREMENT BY ")
ctx.WritePlainf("%d", n.IntValue)
case SequenceStartWith:
ctx.WriteKeyWord("START WITH ")
ctx.WritePlainf("%d", n.IntValue)
case SequenceNoMinValue:
ctx.WriteKeyWord("NO MINVALUE")
case SequenceMinValue:
ctx.WriteKeyWord("MINVALUE ")
ctx.WritePlainf("%d", n.IntValue)
case SequenceNoMaxValue:
ctx.WriteKeyWord("NO MAXVALUE")
case SequenceMaxValue:
ctx.WriteKeyWord("MAXVALUE ")
ctx.WritePlainf("%d", n.IntValue)
case SequenceNoCache:
ctx.WriteKeyWord("NOCACHE")
case SequenceCache:
ctx.WriteKeyWord("CACHE ")
ctx.WritePlainf("%d", n.IntValue)
case SequenceNoCycle:
ctx.WriteKeyWord("NOCYCLE")
case SequenceCycle:
ctx.WriteKeyWord("CYCLE")
case SequenceRestart:
ctx.WriteKeyWord("RESTART")
case SequenceRestartWith:
ctx.WriteKeyWord("RESTART WITH ")
ctx.WritePlainf("%d", n.IntValue)
default:
return errors.Errorf("invalid SequenceOption: %d", n.Tp)
}
return nil
}
// ColumnPositionType is the type for ColumnPosition.
type ColumnPositionType int
// ColumnPosition Types
const (
ColumnPositionNone ColumnPositionType = iota
ColumnPositionFirst
ColumnPositionAfter
)
// ColumnPosition represent the position of the newly added column
type ColumnPosition struct {
node
// Tp is either ColumnPositionNone, ColumnPositionFirst or ColumnPositionAfter.
Tp ColumnPositionType
// RelativeColumn is the column the newly added column after if type is ColumnPositionAfter
RelativeColumn *ColumnName
}
// Restore implements Node interface.
func (n *ColumnPosition) Restore(ctx *format.RestoreCtx) error {
switch n.Tp {
case ColumnPositionNone:
// do nothing
case ColumnPositionFirst:
ctx.WriteKeyWord("FIRST")
case ColumnPositionAfter:
ctx.WriteKeyWord("AFTER ")
if err := n.RelativeColumn.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ColumnPosition.RelativeColumn")
}
default:
return errors.Errorf("invalid ColumnPositionType: %d", n.Tp)
}
return nil
}
// Accept implements Node Accept interface.
func (n *ColumnPosition) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ColumnPosition)
if n.RelativeColumn != nil {
node, ok := n.RelativeColumn.Accept(v)
if !ok {
return n, false
}
n.RelativeColumn = node.(*ColumnName)
}
return v.Leave(n)
}
// AlterTableType is the type for AlterTableSpec.
type AlterTableType int
// AlterTable types.
const (
AlterTableOption AlterTableType = iota + 1
AlterTableAddColumns
AlterTableAddConstraint
AlterTableDropColumn
AlterTableDropPrimaryKey
AlterTableDropIndex
AlterTableDropForeignKey
AlterTableModifyColumn
AlterTableChangeColumn
AlterTableRenameColumn
AlterTableRenameTable
AlterTableAlterColumn
AlterTableLock
AlterTableWriteable
AlterTableAlgorithm
AlterTableRenameIndex
AlterTableForce
AlterTableAddPartitions
// A tombstone for `AlterTableAlterPartition`. It will never be used anymore.
// Just left a tombstone here to keep the enum number unchanged.
__DEPRECATED_AlterTableAlterPartition //nolint:revive
AlterTablePartitionAttributes
AlterTablePartitionOptions
AlterTableCoalescePartitions
AlterTableDropPartition
AlterTableTruncatePartition
AlterTablePartition
AlterTableEnableKeys
AlterTableDisableKeys
AlterTableRemovePartitioning
AlterTableWithValidation
AlterTableWithoutValidation
AlterTableSecondaryLoad
AlterTableSecondaryUnload
AlterTableRebuildPartition
AlterTableReorganizePartition
AlterTableCheckPartitions
AlterTableExchangePartition
AlterTableOptimizePartition
AlterTableRepairPartition
AlterTableImportPartitionTablespace
AlterTableDiscardPartitionTablespace
AlterTableAlterCheck
AlterTableDropCheck
AlterTableImportTablespace
AlterTableDiscardTablespace
AlterTableIndexInvisible
// TODO: Add more actions
AlterTableOrderByColumns
// AlterTableSetTiFlashReplica uses to set the table TiFlash replica.
AlterTableSetTiFlashReplica
// A tombstone for `AlterTablePlacement`. It will never be used anymore.
// Just left a tombstone here to keep the enum number unchanged.
__DEPRECATED_AlterTablePlacement //nolint:revive
AlterTableAddStatistics
AlterTableDropStatistics
AlterTableAttributes
AlterTableCache
AlterTableNoCache
AlterTableStatsOptions
AlterTableDropFirstPartition
AlterTableAddLastPartition
AlterTableReorganizeLastPartition
AlterTableReorganizeFirstPartition
AlterTableRemoveTTL
AlterTableSplitIndex
AlterTableAddMaskingPolicy
AlterTableEnableMaskingPolicy
AlterTableDisableMaskingPolicy
AlterTableDropMaskingPolicy
AlterTableModifyMaskingPolicyExpression
AlterTableModifyMaskingPolicyRestrictOn
)
// LockType is the type for AlterTableSpec.
// See https://dev.mysql.com/doc/refman/5.7/en/alter-table.html#alter-table-concurrency
type LockType byte
func (n LockType) String() string {
switch n {
case LockTypeNone:
return "NONE"
case LockTypeDefault:
return "DEFAULT"
case LockTypeShared:
return "SHARED"
case LockTypeExclusive:
return "EXCLUSIVE"
}
return ""
}
// Lock Types.
const (
LockTypeNone LockType = iota + 1
LockTypeDefault
LockTypeShared
LockTypeExclusive
)
// AlgorithmType is the algorithm of the DDL operations.
// See https://dev.mysql.com/doc/refman/8.0/en/alter-table.html#alter-table-performance.
type AlgorithmType byte
// DDL algorithms.
// For now, TiDB only supported inplace and instance algorithms. If the user specify `copy`,
// will get an error.
const (
AlgorithmTypeDefault AlgorithmType = iota
AlgorithmTypeCopy
AlgorithmTypeInplace
AlgorithmTypeInstant
)
func (a AlgorithmType) String() string {
switch a {
case AlgorithmTypeDefault:
return "DEFAULT"
case AlgorithmTypeCopy:
return "COPY"
case AlgorithmTypeInplace:
return "INPLACE"
case AlgorithmTypeInstant:
return "INSTANT"
default:
return "DEFAULT"
}
}
// AlterTableSpec represents alter table specification.
type AlterTableSpec struct {
node
// only supported by MariaDB 10.0.2+ (DROP COLUMN, CHANGE COLUMN, MODIFY COLUMN, DROP INDEX, DROP FOREIGN KEY, DROP PARTITION)
// see https://mariadb.com/kb/en/library/alter-table/
IfExists bool
// only supported by MariaDB 10.0.2+ (ADD COLUMN, ADD PARTITION)
// see https://mariadb.com/kb/en/library/alter-table/
IfNotExists bool
NoWriteToBinlog bool
OnAllPartitions bool
Tp AlterTableType
Name string
IndexName CIStr
Constraint *Constraint
SplitIndex *SplitIndexOption
Options []*TableOption
OrderByList []*AlterOrderItem
NewTable *TableName
NewColumns []*ColumnDef
NewConstraints []*Constraint
OldColumnName *ColumnName
NewColumnName *ColumnName
Position *ColumnPosition
LockType LockType
Algorithm AlgorithmType
Comment string
FromKey CIStr
ToKey CIStr
Partition *PartitionOptions
PartitionNames []CIStr
PartDefinitions []*PartitionDefinition
WithValidation bool
Num uint64
Visibility IndexVisibility
TiFlashReplica *TiFlashReplicaSpec
Writeable bool
Statistics *StatisticsSpec
MaskingPolicyName CIStr
MaskingPolicyColumn *ColumnName
MaskingPolicyExpr ExprNode
MaskingPolicyRestrictOps MaskingPolicyRestrictOps
MaskingPolicyState MaskingPolicyState
AttributesSpec *AttributesSpec
StatsOptionsSpec *StatsOptionsSpec
}
type TiFlashReplicaSpec struct {
Count uint64
Labels []string
Hypo bool // hypothetical replica is used by index advisor
}
// AlterOrderItem represents an item in order by at alter table stmt.
type AlterOrderItem struct {
node
Column *ColumnName
Desc bool
}
// Restore implements Node interface.
func (n *AlterOrderItem) Restore(ctx *format.RestoreCtx) error {
if err := n.Column.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore AlterOrderItem.Column")
}
if n.Desc {
ctx.WriteKeyWord(" DESC")
}
return nil
}
func (n *AlterTableSpec) IsAllPlacementRule() bool {
switch n.Tp {
case AlterTablePartitionAttributes, AlterTablePartitionOptions, AlterTableOption, AlterTableAttributes:
for _, o := range n.Options {
if o.Tp != TableOptionPlacementPolicy {
return false
}
}
return true
default:
return false
}
}
// Restore implements Node interface.
func (n *AlterTableSpec) Restore(ctx *format.RestoreCtx) error {
if n.IsAllPlacementRule() && ctx.Flags.HasSkipPlacementRuleForRestoreFlag() {
return nil
}
switch n.Tp {
case AlterTableSetTiFlashReplica:
ctx.WriteKeyWord("SET TIFLASH REPLICA ")
ctx.WritePlainf("%d", n.TiFlashReplica.Count)
if len(n.TiFlashReplica.Labels) == 0 {
break
}
ctx.WriteKeyWord(" LOCATION LABELS ")
for i, v := range n.TiFlashReplica.Labels {
if i > 0 {
ctx.WritePlain(", ")
}
ctx.WriteString(v)
}
case AlterTableAddStatistics:
ctx.WriteKeyWord("ADD STATS_EXTENDED ")
if n.IfNotExists {
ctx.WriteKeyWord("IF NOT EXISTS ")
}
ctx.WriteName(n.Statistics.StatsName)
switch n.Statistics.StatsType {
case StatsTypeCardinality:
ctx.WriteKeyWord(" CARDINALITY(")
case StatsTypeDependency:
ctx.WriteKeyWord(" DEPENDENCY(")
case StatsTypeCorrelation:
ctx.WriteKeyWord(" CORRELATION(")
}
for i, col := range n.Statistics.Columns {
if i != 0 {
ctx.WritePlain(", ")
}
if err := col.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore AddStatisticsSpec.Columns: [%v]", i)
}
}
ctx.WritePlain(")")
case AlterTableDropStatistics:
ctx.WriteKeyWord("DROP STATS_EXTENDED ")
if n.IfExists {
ctx.WriteKeyWord("IF EXISTS ")
}
ctx.WriteName(n.Statistics.StatsName)
case AlterTableAddMaskingPolicy:
ctx.WriteKeyWord("ADD MASKING POLICY ")
ctx.WriteName(n.MaskingPolicyName.O)
ctx.WritePlain(" ON (")
if err := n.MaskingPolicyColumn.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore AlterTableSpec.MaskingPolicyColumn")
}
ctx.WritePlain(") ")
ctx.WriteKeyWord("AS ")
if err := n.MaskingPolicyExpr.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore AlterTableSpec.MaskingPolicyExpr")
}
if n.MaskingPolicyRestrictOps != MaskingPolicyRestrictOpNone {
ctx.WritePlain(" ")
restoreMaskingPolicyRestrictOn(ctx, n.MaskingPolicyRestrictOps, false)
}
if n.MaskingPolicyState.Explicit {
ctx.WritePlain(" ")
if n.MaskingPolicyState.Enabled {
ctx.WriteKeyWord("ENABLE")
} else {
ctx.WriteKeyWord("DISABLE")
}
}
case AlterTableEnableMaskingPolicy:
ctx.WriteKeyWord("ENABLE MASKING POLICY ")
ctx.WriteName(n.MaskingPolicyName.O)
case AlterTableDisableMaskingPolicy:
ctx.WriteKeyWord("DISABLE MASKING POLICY ")
ctx.WriteName(n.MaskingPolicyName.O)
case AlterTableDropMaskingPolicy:
ctx.WriteKeyWord("DROP MASKING POLICY ")
ctx.WriteName(n.MaskingPolicyName.O)
case AlterTableModifyMaskingPolicyExpression:
ctx.WriteKeyWord("MODIFY MASKING POLICY ")
ctx.WriteName(n.MaskingPolicyName.O)
ctx.WriteKeyWord(" SET EXPRESSION = ")
if err := n.MaskingPolicyExpr.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore AlterTableSpec.MaskingPolicyExpr")
}
case AlterTableModifyMaskingPolicyRestrictOn:
ctx.WriteKeyWord("MODIFY MASKING POLICY ")
ctx.WriteName(n.MaskingPolicyName.O)
ctx.WriteKeyWord(" SET ")
restoreMaskingPolicyRestrictOn(ctx, n.MaskingPolicyRestrictOps, true)
case AlterTableOption:
switch {
case len(n.Options) == 2 && n.Options[0].Tp == TableOptionCharset && n.Options[1].Tp == TableOptionCollate:
if n.Options[0].UintValue == TableOptionCharsetWithConvertTo {
ctx.WriteKeyWord("CONVERT TO ")
}
ctx.WriteKeyWord("CHARACTER SET ")
if n.Options[0].Default {
ctx.WriteKeyWord("DEFAULT")
} else {
ctx.WriteKeyWord(n.Options[0].StrValue)
}
ctx.WriteKeyWord(" COLLATE ")
ctx.WriteKeyWord(n.Options[1].StrValue)
case n.Options[0].Tp == TableOptionCharset && n.Options[0].Default:
if n.Options[0].UintValue == TableOptionCharsetWithConvertTo {
ctx.WriteKeyWord("CONVERT TO ")
}
ctx.WriteKeyWord("CHARACTER SET DEFAULT")
default:
for i, opt := range n.Options {
if i != 0 {
ctx.WritePlain(" ")
}
if err := opt.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore AlterTableSpec.Options[%d]", i)
}
}
}
case AlterTableAddColumns:
ctx.WriteKeyWord("ADD COLUMN ")
if n.IfNotExists {
ctx.WriteKeyWordWithSpecialComments(tidb.FeatureIDTiDB, "IF NOT EXISTS ")
}
if n.Position != nil && len(n.NewColumns) == 1 {
if err := n.NewColumns[0].Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore AlterTableSpec.NewColumns[%d]", 0)
}
if n.Position.Tp != ColumnPositionNone {
ctx.WritePlain(" ")
}
if err := n.Position.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore AlterTableSpec.Position")
}
} else {
lenCols := len(n.NewColumns)
ctx.WritePlain("(")
for i, col := range n.NewColumns {
if i != 0 {
ctx.WritePlain(", ")
}
if err := col.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore AlterTableSpec.NewColumns[%d]", i)
}
}
for i, constraint := range n.NewConstraints {
if i != 0 || lenCols >= 1 {
ctx.WritePlain(", ")
}
if err := constraint.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore AlterTableSpec.NewConstraints[%d]", i)
}
}
ctx.WritePlain(")")
}
case AlterTableAddConstraint:
ctx.WriteKeyWord("ADD ")
if err := n.Constraint.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore AlterTableSpec.Constraint")
}
case AlterTableDropColumn:
ctx.WriteKeyWord("DROP COLUMN ")
if n.IfExists {
ctx.WriteKeyWordWithSpecialComments(tidb.FeatureIDTiDB, "IF EXISTS ")
}
if err := n.OldColumnName.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore AlterTableSpec.OldColumnName")
}
// TODO: RestrictOrCascadeOpt not support
case AlterTableDropPrimaryKey:
ctx.WriteKeyWord("DROP PRIMARY KEY")
case AlterTableDropIndex:
ctx.WriteKeyWord("DROP INDEX ")
if n.IfExists {
ctx.WriteKeyWordWithSpecialComments(tidb.FeatureIDTiDB, "IF EXISTS ")
}
ctx.WriteName(n.Name)
case AlterTableDropForeignKey:
ctx.WriteKeyWord("DROP FOREIGN KEY ")
if n.IfExists {
ctx.WriteKeyWordWithSpecialComments(tidb.FeatureIDTiDB, "IF EXISTS ")
}
ctx.WriteName(n.Name)
case AlterTableModifyColumn:
ctx.WriteKeyWord("MODIFY COLUMN ")
if n.IfExists {
ctx.WriteKeyWordWithSpecialComments(tidb.FeatureIDTiDB, "IF EXISTS ")
}
if err := n.NewColumns[0].Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore AlterTableSpec.NewColumns[0]")
}
if n.Position.Tp != ColumnPositionNone {
ctx.WritePlain(" ")
}
if err := n.Position.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore AlterTableSpec.Position")
}
case AlterTableChangeColumn:
ctx.WriteKeyWord("CHANGE COLUMN ")
if n.IfExists {
ctx.WriteKeyWordWithSpecialComments(tidb.FeatureIDTiDB, "IF EXISTS ")
}
if err := n.OldColumnName.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore AlterTableSpec.OldColumnName")
}
ctx.WritePlain(" ")
if err := n.NewColumns[0].Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore AlterTableSpec.NewColumns[0]")
}
if n.Position.Tp != ColumnPositionNone {
ctx.WritePlain(" ")
}
if err := n.Position.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore AlterTableSpec.Position")
}
case AlterTableRenameColumn:
ctx.WriteKeyWord("RENAME COLUMN ")
if err := n.OldColumnName.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore AlterTableSpec.OldColumnName")
}
ctx.WriteKeyWord(" TO ")
if err := n.NewColumnName.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore AlterTableSpec.NewColumnName")
}
case AlterTableRenameTable:
ctx.WriteKeyWord("RENAME AS ")
if err := n.NewTable.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore AlterTableSpec.NewTable")
}
case AlterTableAlterColumn:
ctx.WriteKeyWord("ALTER COLUMN ")
if err := n.NewColumns[0].Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore AlterTableSpec.NewColumns[0]")
}
if len(n.NewColumns[0].Options) == 1 {
ctx.WriteKeyWord("SET DEFAULT ")
expr := n.NewColumns[0].Options[0].Expr
if valueExpr, ok := expr.(ValueExpr); ok {
if err := valueExpr.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore AlterTableSpec.NewColumns[0].Options[0].Expr")
}
} else {
ctx.WritePlain("(")
if err := expr.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore AlterTableSpec.NewColumns[0].Options[0].Expr")
}
ctx.WritePlain(")")
}
} else {
ctx.WriteKeyWord(" DROP DEFAULT")
}
case AlterTableLock:
ctx.WriteKeyWord("LOCK ")
ctx.WritePlain("= ")
ctx.WriteKeyWord(n.LockType.String())
case AlterTableWriteable:
ctx.WriteKeyWord("READ ")
if n.Writeable {
ctx.WriteKeyWord("WRITE")
} else {
ctx.WriteKeyWord("ONLY")
}
case AlterTableOrderByColumns:
ctx.WriteKeyWord("ORDER BY ")
for i, alterOrderItem := range n.OrderByList {
if i != 0 {
ctx.WritePlain(",")
}
if err := alterOrderItem.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore AlterTableSpec.OrderByList[%d]", i)
}
}
case AlterTableAlgorithm:
ctx.WriteKeyWord("ALGORITHM ")
ctx.WritePlain("= ")
ctx.WriteKeyWord(n.Algorithm.String())
case AlterTableRenameIndex:
ctx.WriteKeyWord("RENAME INDEX ")
ctx.WriteName(n.FromKey.O)
ctx.WriteKeyWord(" TO ")
ctx.WriteName(n.ToKey.O)
case AlterTableForce:
// TODO: not support
ctx.WriteKeyWord("FORCE")
ctx.WritePlain(" /* AlterTableForce is not supported */ ")
case AlterTableAddPartitions:
ctx.WriteKeyWord("ADD PARTITION")
if n.IfNotExists {
ctx.WriteKeyWordWithSpecialComments(tidb.FeatureIDTiDB, " IF NOT EXISTS")
}
if n.NoWriteToBinlog {
ctx.WriteKeyWord(" NO_WRITE_TO_BINLOG")
}
if n.PartDefinitions != nil {
ctx.WritePlain(" (")
for i, def := range n.PartDefinitions {
if i != 0 {
ctx.WritePlain(", ")
}
if err := def.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore AlterTableSpec.PartDefinitions[%d]", i)
}
}
ctx.WritePlain(")")
} else if n.Num != 0 {
ctx.WriteKeyWord(" PARTITIONS ")
ctx.WritePlainf("%d", n.Num)
}
case AlterTableDropFirstPartition:
ctx.WriteKeyWord("FIRST PARTITION LESS THAN (")
if err := n.Partition.PartitionMethod.Expr.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore AlterTableDropFirstPartition Exprs")
}
ctx.WriteKeyWord(")")
if n.NoWriteToBinlog {
ctx.WriteKeyWord(" NO_WRITE_TO_BINLOG")
}
case AlterTableAddLastPartition:
ctx.WriteKeyWord("LAST PARTITION LESS THAN (")
if err := n.Partition.PartitionMethod.Expr.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore AlterTableAddLastPartition Exprs")
}
ctx.WriteKeyWord(")")
if n.NoWriteToBinlog {
ctx.WriteKeyWord(" NO_WRITE_TO_BINLOG")
}
case AlterTablePartitionOptions:
restoreWithoutSpecialComment := func() error {
origFlags := ctx.Flags
defer func() {
ctx.Flags = origFlags
}()
ctx.Flags &= ^format.RestoreTiDBSpecialComment
ctx.WriteKeyWord("PARTITION ")
ctx.WriteName(n.PartitionNames[0].O)
ctx.WritePlain(" ")
for i, opt := range n.Options {
if i != 0 {
ctx.WritePlain(" ")
}
if err := opt.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore AlterTableSpec.Options[%d] for PARTITION `%s`", i, n.PartitionNames[0].O)
}
}
return nil
}
var err error
if ctx.Flags.HasTiDBSpecialCommentFlag() {
// AlterTablePartitionOptions now only supports placement options, so add put all options to special comment
err = ctx.WriteWithSpecialComments(tidb.FeatureIDPlacement, restoreWithoutSpecialComment)
} else {
err = restoreWithoutSpecialComment()
}
if err != nil {
return err
}
case AlterTablePartitionAttributes:
ctx.WriteKeyWord("PARTITION ")
ctx.WriteName(n.PartitionNames[0].O)
ctx.WritePlain(" ")
spec := n.AttributesSpec
if err := spec.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore AlterTableSpec.AttributesSpec")
}
case AlterTableCoalescePartitions:
ctx.WriteKeyWord("COALESCE PARTITION ")
if n.NoWriteToBinlog {
ctx.WriteKeyWord("NO_WRITE_TO_BINLOG ")
}
ctx.WritePlainf("%d", n.Num)
case AlterTableDropPartition:
ctx.WriteKeyWord("DROP PARTITION ")
if n.IfExists {
ctx.WriteKeyWordWithSpecialComments(tidb.FeatureIDTiDB, "IF EXISTS ")
}
for i, name := range n.PartitionNames {
if i != 0 {
ctx.WritePlain(",")
}
ctx.WriteName(name.O)
}
case AlterTableTruncatePartition:
ctx.WriteKeyWord("TRUNCATE PARTITION ")
if n.OnAllPartitions {
ctx.WriteKeyWord("ALL")
return nil
}
for i, name := range n.PartitionNames {
if i != 0 {
ctx.WritePlain(",")
}
ctx.WriteName(name.O)
}
case AlterTableCheckPartitions:
ctx.WriteKeyWord("CHECK PARTITION ")
if n.OnAllPartitions {
ctx.WriteKeyWord("ALL")
return nil
}
for i, name := range n.PartitionNames {
if i != 0 {
ctx.WritePlain(",")
}
ctx.WriteName(name.O)
}
case AlterTableOptimizePartition:
ctx.WriteKeyWord("OPTIMIZE PARTITION ")
if n.NoWriteToBinlog {
ctx.WriteKeyWord("NO_WRITE_TO_BINLOG ")
}
if n.OnAllPartitions {
ctx.WriteKeyWord("ALL")
return nil
}
for i, name := range n.PartitionNames {
if i != 0 {
ctx.WritePlain(",")
}
ctx.WriteName(name.O)
}
case AlterTableRepairPartition:
ctx.WriteKeyWord("REPAIR PARTITION ")
if n.NoWriteToBinlog {
ctx.WriteKeyWord("NO_WRITE_TO_BINLOG ")
}
if n.OnAllPartitions {
ctx.WriteKeyWord("ALL")
return nil
}
for i, name := range n.PartitionNames {
if i != 0 {
ctx.WritePlain(",")
}
ctx.WriteName(name.O)
}
case AlterTableImportPartitionTablespace:
ctx.WriteKeyWord("IMPORT PARTITION ")
if n.OnAllPartitions {
ctx.WriteKeyWord("ALL")
} else {
for i, name := range n.PartitionNames {
if i != 0 {
ctx.WritePlain(",")
}
ctx.WriteName(name.O)
}
}
ctx.WriteKeyWord(" TABLESPACE")
case AlterTableDiscardPartitionTablespace:
ctx.WriteKeyWord("DISCARD PARTITION ")
if n.OnAllPartitions {
ctx.WriteKeyWord("ALL")
} else {
for i, name := range n.PartitionNames {
if i != 0 {
ctx.WritePlain(",")
}
ctx.WriteName(name.O)
}
}
ctx.WriteKeyWord(" TABLESPACE")
case AlterTablePartition:
if err := n.Partition.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore AlterTableSpec.Partition")
}
case AlterTableEnableKeys:
ctx.WriteKeyWord("ENABLE KEYS")
case AlterTableDisableKeys:
ctx.WriteKeyWord("DISABLE KEYS")
case AlterTableRemovePartitioning:
ctx.WriteKeyWord("REMOVE PARTITIONING")
case AlterTableWithValidation:
ctx.WriteKeyWord("WITH VALIDATION")
case AlterTableWithoutValidation:
ctx.WriteKeyWord("WITHOUT VALIDATION")
case AlterTableRebuildPartition:
ctx.WriteKeyWord("REBUILD PARTITION ")
if n.NoWriteToBinlog {
ctx.WriteKeyWord("NO_WRITE_TO_BINLOG ")
}
if n.OnAllPartitions {
ctx.WriteKeyWord("ALL")
return nil
}
for i, name := range n.PartitionNames {
if i != 0 {
ctx.WritePlain(",")
}
ctx.WriteName(name.O)
}
case AlterTableReorganizeLastPartition:
ctx.WriteKeyWord("SPLIT MAXVALUE PARTITION LESS THAN (")
if err := n.Partition.PartitionMethod.Expr.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore AlterTableReorganizeLastPartition Exprs")
}
ctx.WriteKeyWord(")")
case AlterTableReorganizeFirstPartition:
ctx.WriteKeyWord("MERGE FIRST PARTITION LESS THAN (")
if err := n.Partition.PartitionMethod.Expr.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore AlterTableReorganizeLastPartition Exprs")
}
ctx.WriteKeyWord(")")
case AlterTableReorganizePartition:
ctx.WriteKeyWord("REORGANIZE PARTITION")
if n.NoWriteToBinlog {
ctx.WriteKeyWord(" NO_WRITE_TO_BINLOG")
}
if n.OnAllPartitions {
return nil
}
for i, name := range n.PartitionNames {
if i != 0 {
ctx.WritePlain(",")
} else {
ctx.WritePlain(" ")
}
ctx.WriteName(name.O)
}
ctx.WriteKeyWord(" INTO ")
if n.PartDefinitions != nil {
ctx.WritePlain("(")
for i, def := range n.PartDefinitions {
if i != 0 {
ctx.WritePlain(", ")
}
if err := def.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore AlterTableSpec.PartDefinitions[%d]", i)
}
}
ctx.WritePlain(")")
}
case AlterTableExchangePartition:
ctx.WriteKeyWord("EXCHANGE PARTITION ")
ctx.WriteName(n.PartitionNames[0].O)
ctx.WriteKeyWord(" WITH TABLE ")
n.NewTable.Restore(ctx)
if !n.WithValidation {
ctx.WriteKeyWord(" WITHOUT VALIDATION")
}
case AlterTableSecondaryLoad:
ctx.WriteKeyWord("SECONDARY_LOAD")
case AlterTableSecondaryUnload:
ctx.WriteKeyWord("SECONDARY_UNLOAD")
case AlterTableAlterCheck:
ctx.WriteKeyWord("ALTER CHECK ")
ctx.WriteName(n.Constraint.Name)
if !n.Constraint.Enforced {
ctx.WriteKeyWord(" NOT")
}
ctx.WriteKeyWord(" ENFORCED")
case AlterTableDropCheck:
ctx.WriteKeyWord("DROP CHECK ")
ctx.WriteName(n.Constraint.Name)
case AlterTableImportTablespace:
ctx.WriteKeyWord("IMPORT TABLESPACE")
case AlterTableDiscardTablespace:
ctx.WriteKeyWord("DISCARD TABLESPACE")
case AlterTableIndexInvisible:
ctx.WriteKeyWord("ALTER INDEX ")
ctx.WriteName(n.IndexName.O)
switch n.Visibility {
case IndexVisibilityVisible:
ctx.WriteKeyWord(" VISIBLE")
case IndexVisibilityInvisible:
ctx.WriteKeyWord(" INVISIBLE")
}
case AlterTableAttributes:
spec := n.AttributesSpec
if err := spec.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore AlterTableSpec.AttributesSpec")
}
case AlterTableCache:
ctx.WriteKeyWord("CACHE")
case AlterTableNoCache:
ctx.WriteKeyWord("NOCACHE")
case AlterTableStatsOptions:
spec := n.StatsOptionsSpec
if err := spec.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore AlterTableSpec.StatsOptionsSpec")
}
case AlterTableRemoveTTL:
ctx.WriteKeyWordWithSpecialComments(tidb.FeatureIDTTL, "REMOVE TTL")
case AlterTableSplitIndex:
spec := n.SplitIndex
if err := spec.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore AlterTableSpec.SplitIndex")
}
default:
// TODO: not support
ctx.WritePlainf(" /* AlterTableType(%d) is not supported */ ", n.Tp)
}
return nil
}
// Accept implements Node Accept interface.
func (n *AlterTableSpec) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*AlterTableSpec)
if n.Constraint != nil {
node, ok := n.Constraint.Accept(v)
if !ok {
return n, false
}
n.Constraint = node.(*Constraint)
}
if n.NewTable != nil {
node, ok := n.NewTable.Accept(v)
if !ok {
return n, false
}
n.NewTable = node.(*TableName)
}
if n.SplitIndex != nil {
node, ok := n.SplitIndex.Accept(v)
if !ok {
return n, false
}
n.SplitIndex = node.(*SplitIndexOption)
}
for i, col := range n.NewColumns {
node, ok := col.Accept(v)
if !ok {
return n, false
}
n.NewColumns[i] = node.(*ColumnDef)
}
for i, constraint := range n.NewConstraints {
node, ok := constraint.Accept(v)
if !ok {
return n, false
}
n.NewConstraints[i] = node.(*Constraint)
}
if n.OldColumnName != nil {
node, ok := n.OldColumnName.Accept(v)
if !ok {
return n, false
}
n.OldColumnName = node.(*ColumnName)
}
if n.Position != nil {
node, ok := n.Position.Accept(v)
if !ok {
return n, false
}
n.Position = node.(*ColumnPosition)
}
if n.MaskingPolicyColumn != nil {
node, ok := n.MaskingPolicyColumn.Accept(v)
if !ok {
return n, false
}
n.MaskingPolicyColumn = node.(*ColumnName)
}
if n.MaskingPolicyExpr != nil {
node, ok := n.MaskingPolicyExpr.Accept(v)
if !ok {
return n, false
}
n.MaskingPolicyExpr = node.(ExprNode)
}
if n.Partition != nil {
node, ok := n.Partition.Accept(v)
if !ok {
return n, false
}
n.Partition = node.(*PartitionOptions)
}
for i, option := range n.Options {
node, ok := option.Accept(v)
if !ok {
return n, false
}
n.Options[i] = node.(*TableOption)
}
for _, def := range n.PartDefinitions {
if !def.acceptInPlace(v) {
return n, false
}
}
return v.Leave(n)
}
// AlterTableStmt is a statement to change the structure of a table.
// See https://dev.mysql.com/doc/refman/5.7/en/alter-table.html
type AlterTableStmt struct {
ddlNode
Table *TableName
Specs []*AlterTableSpec
}
func (n *AlterTableStmt) HaveOnlyPlacementOptions() bool {
for _, n := range n.Specs {
if n.Tp != AlterTablePartitionOptions {
return false
}
if !n.IsAllPlacementRule() {
return false
}
}
return true
}
// Restore implements Node interface.
func (n *AlterTableStmt) Restore(ctx *format.RestoreCtx) error {
if ctx.Flags.HasSkipPlacementRuleForRestoreFlag() && n.HaveOnlyPlacementOptions() {
return nil
}
ctx.WriteKeyWord("ALTER TABLE ")
if err := n.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore AlterTableStmt.Table")
}
specs := make([]*AlterTableSpec, 0, len(n.Specs))
for _, spec := range n.Specs {
if spec.IsAllPlacementRule() && ctx.Flags.HasSkipPlacementRuleForRestoreFlag() {
continue
}
if spec.Tp == AlterTableOption {
newOptions := tableOptionsWithRestoreTTLFlag(ctx.Flags, spec.Options)
if len(newOptions) == 0 {
continue
}
newSpec := *spec
newSpec.Options = newOptions
spec = &newSpec
}
specs = append(specs, spec)
}
for i, spec := range specs {
if i == 0 || spec.Tp == AlterTablePartition || spec.Tp == AlterTableRemovePartitioning || spec.Tp == AlterTableImportTablespace || spec.Tp == AlterTableDiscardTablespace {
ctx.WritePlain(" ")
} else {
ctx.WritePlain(", ")
}
if err := spec.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore AlterTableStmt.Specs[%d]", i)
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *AlterTableStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*AlterTableStmt)
node, ok := n.Table.Accept(v)
if !ok {
return n, false
}
n.Table = node.(*TableName)
for i, val := range n.Specs {
node, ok = val.Accept(v)
if !ok {
return n, false
}
n.Specs[i] = node.(*AlterTableSpec)
}
return v.Leave(n)
}
// TruncateTableStmt is a statement to empty a table completely.
// See https://dev.mysql.com/doc/refman/5.7/en/truncate-table.html
type TruncateTableStmt struct {
ddlNode
Table *TableName
}
// Restore implements Node interface.
func (n *TruncateTableStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("TRUNCATE TABLE ")
if err := n.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore TruncateTableStmt.Table")
}
return nil
}
// Accept implements Node Accept interface.
func (n *TruncateTableStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*TruncateTableStmt)
node, ok := n.Table.Accept(v)
if !ok {
return n, false
}
n.Table = node.(*TableName)
return v.Leave(n)
}
var (
ErrNoParts = terror.ClassDDL.NewStd(mysql.ErrNoParts)
ErrPartitionColumnList = terror.ClassDDL.NewStd(mysql.ErrPartitionColumnList)
ErrPartitionRequiresValues = terror.ClassDDL.NewStd(mysql.ErrPartitionRequiresValues)
ErrPartitionsMustBeDefined = terror.ClassDDL.NewStd(mysql.ErrPartitionsMustBeDefined)
ErrPartitionWrongNoPart = terror.ClassDDL.NewStd(mysql.ErrPartitionWrongNoPart)
ErrPartitionWrongNoSubpart = terror.ClassDDL.NewStd(mysql.ErrPartitionWrongNoSubpart)
ErrPartitionWrongValues = terror.ClassDDL.NewStd(mysql.ErrPartitionWrongValues)
ErrRowSinglePartitionField = terror.ClassDDL.NewStd(mysql.ErrRowSinglePartitionField)
ErrSubpartition = terror.ClassDDL.NewStd(mysql.ErrSubpartition)
ErrSystemVersioningWrongPartitions = terror.ClassDDL.NewStd(mysql.ErrSystemVersioningWrongPartitions)
ErrTooManyValues = terror.ClassDDL.NewStd(mysql.ErrTooManyValues)
ErrWrongPartitionTypeExpectedSystemTime = terror.ClassDDL.NewStd(mysql.ErrWrongPartitionTypeExpectedSystemTime)
ErrUnknownCharacterSet = terror.ClassDDL.NewStd(mysql.ErrUnknownCharacterSet)
ErrCoalescePartitionNoPartition = terror.ClassDDL.NewStd(mysql.ErrCoalescePartitionNoPartition)
ErrWrongUsage = terror.ClassDDL.NewStd(mysql.ErrWrongUsage)
)
type SubPartitionDefinition struct {
Name CIStr
Options []*TableOption
}
func (spd *SubPartitionDefinition) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("SUBPARTITION ")
ctx.WriteName(spd.Name.O)
for i, opt := range spd.Options {
ctx.WritePlain(" ")
if err := opt.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore SubPartitionDefinition.Options[%d]", i)
}
}
return nil
}
type PartitionDefinitionClause interface {
restore(ctx *format.RestoreCtx) error
acceptInPlace(v Visitor) bool
// Validate checks if the clause is consistent with the given options.
// `pt` can be 0 and `columns` can be -1 to skip checking the clause against
// the partition type or number of columns in the expression list.
Validate(pt PartitionType, columns int) error
}
type PartitionDefinitionClauseNone struct{}
func (*PartitionDefinitionClauseNone) restore(_ *format.RestoreCtx) error {
return nil
}
func (*PartitionDefinitionClauseNone) acceptInPlace(_ Visitor) bool {
return true
}
func (*PartitionDefinitionClauseNone) Validate(pt PartitionType, _ int) error {
switch pt {
case 0:
case PartitionTypeRange:
return ErrPartitionRequiresValues.GenWithStackByArgs("RANGE", "LESS THAN")
case PartitionTypeList:
return ErrPartitionRequiresValues.GenWithStackByArgs("LIST", "IN")
case PartitionTypeSystemTime:
return ErrSystemVersioningWrongPartitions
}
return nil
}
type PartitionDefinitionClauseLessThan struct {
Exprs []ExprNode
}
func (n *PartitionDefinitionClauseLessThan) restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord(" VALUES LESS THAN ")
ctx.WritePlain("(")
for i, expr := range n.Exprs {
if i != 0 {
ctx.WritePlain(", ")
}
if err := expr.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore PartitionDefinitionClauseLessThan.Exprs[%d]", i)
}
}
ctx.WritePlain(")")
return nil
}
func (n *PartitionDefinitionClauseLessThan) acceptInPlace(v Visitor) bool {
for i, expr := range n.Exprs {
newExpr, ok := expr.Accept(v)
if !ok {
return false
}
n.Exprs[i] = newExpr.(ExprNode)
}
return true
}
func (n *PartitionDefinitionClauseLessThan) Validate(pt PartitionType, columns int) error {
switch pt {
case PartitionTypeRange, 0:
default:
return ErrPartitionWrongValues.GenWithStackByArgs("RANGE", "LESS THAN")
}
switch {
case columns == 0 && len(n.Exprs) != 1:
return ErrTooManyValues.GenWithStackByArgs("RANGE")
case columns > 0 && len(n.Exprs) != columns:
return ErrPartitionColumnList
}
return nil
}
type PartitionDefinitionClauseIn struct {
Values [][]ExprNode
}
func (n *PartitionDefinitionClauseIn) restore(ctx *format.RestoreCtx) error {
// we special-case an empty list of values to mean MariaDB's "DEFAULT" clause.
if len(n.Values) == 0 {
ctx.WriteKeyWord(" DEFAULT")
return nil
}
if len(n.Values) == 1 && len(n.Values[0]) == 1 {
if _, ok := n.Values[0][0].(*DefaultExpr); ok {
ctx.WriteKeyWord(" DEFAULT")
return nil
}
}
ctx.WriteKeyWord(" VALUES IN ")
ctx.WritePlain("(")
for i, valList := range n.Values {
if i != 0 {
ctx.WritePlain(", ")
}
if len(valList) == 1 {
if err := valList[0].Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore PartitionDefinitionClauseIn.Values[%d][0]", i)
}
} else {
ctx.WritePlain("(")
for j, val := range valList {
if j != 0 {
ctx.WritePlain(", ")
}
if err := val.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore PartitionDefinitionClauseIn.Values[%d][%d]", i, j)
}
}
ctx.WritePlain(")")
}
}
ctx.WritePlain(")")
return nil
}
func (n *PartitionDefinitionClauseIn) acceptInPlace(v Visitor) bool {
for _, valList := range n.Values {
for j, val := range valList {
newVal, ok := val.Accept(v)
if !ok {
return false
}
valList[j] = newVal.(ExprNode)
}
}
return true
}
func (n *PartitionDefinitionClauseIn) Validate(pt PartitionType, columns int) error {
switch pt {
case PartitionTypeList, 0:
default:
return ErrPartitionWrongValues.GenWithStackByArgs("LIST", "IN")
}
if len(n.Values) == 0 {
return nil
}
nextIdx := 1
expectedColCount := len(n.Values[0])
// OK if one of the n.Values is DefaultExpr as only value
if expectedColCount == 1 {
if _, ok := n.Values[0][0].(*DefaultExpr); ok {
// Only DEFAULT in the partition definition, OK
if len(n.Values) > 1 {
expectedColCount = len(n.Values[1])
nextIdx++
}
}
}
for _, val := range n.Values[nextIdx:] {
if len(val) != expectedColCount {
if _, ok := val[0].(*DefaultExpr); ok && len(val) == 1 {
continue
}
return ErrPartitionColumnList
}
}
switch {
case columns == 0 && expectedColCount != 1:
return ErrRowSinglePartitionField
case columns > 0 && expectedColCount != columns:
if len(n.Values) == 1 && expectedColCount == 1 {
if _, ok := n.Values[0][0].(*DefaultExpr); ok {
// Only one value, which is DEFAULT, which is OK
return nil
}
}
return ErrPartitionColumnList
}
return nil
}
type PartitionDefinitionClauseHistory struct {
Current bool
}
func (n *PartitionDefinitionClauseHistory) restore(ctx *format.RestoreCtx) error {
if n.Current {
ctx.WriteKeyWord(" CURRENT")
} else {
ctx.WriteKeyWord(" HISTORY")
}
return nil
}
func (*PartitionDefinitionClauseHistory) acceptInPlace(_ Visitor) bool {
return true
}
func (*PartitionDefinitionClauseHistory) Validate(pt PartitionType, _ int) error {
switch pt {
case 0, PartitionTypeSystemTime:
default:
return ErrWrongPartitionTypeExpectedSystemTime
}
return nil
}
// PartitionDefinition defines a single partition.
type PartitionDefinition struct {
Name CIStr
Clause PartitionDefinitionClause
Options []*TableOption
Sub []*SubPartitionDefinition
}
// Comment returns the comment option given to this definition.
// The second return value indicates if the comment option exists.
func (n *PartitionDefinition) Comment() (string, bool) {
for _, opt := range n.Options {
if opt.Tp == TableOptionComment {
return opt.StrValue, true
}
}
return "", false
}
func (n *PartitionDefinition) acceptInPlace(v Visitor) bool {
return n.Clause.acceptInPlace(v)
}
// Restore implements Node interface.
func (n *PartitionDefinition) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("PARTITION ")
ctx.WriteName(n.Name.O)
if err := n.Clause.restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore PartitionDefinition.Clause")
}
for i, opt := range n.Options {
ctx.WritePlain(" ")
if err := opt.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore PartitionDefinition.Options[%d]", i)
}
}
if len(n.Sub) > 0 {
ctx.WritePlain(" (")
for i, spd := range n.Sub {
if i != 0 {
ctx.WritePlain(",")
}
if err := spd.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore PartitionDefinition.Sub[%d]", i)
}
}
ctx.WritePlain(")")
}
return nil
}
type PartitionIntervalExpr struct {
Expr ExprNode
// TimeUnitInvalid if not Time based INTERVAL!
TimeUnit TimeUnitType
}
type PartitionInterval struct {
// To be able to get original text and replace the syntactic sugar with generated
// partition definitions
node
IntervalExpr PartitionIntervalExpr
FirstRangeEnd *ExprNode
LastRangeEnd *ExprNode
MaxValPart bool
NullPart bool
}
// PartitionMethod describes how partitions or subpartitions are constructed.
type PartitionMethod struct {
// To be able to get original text and replace the syntactic sugar with generated
// partition definitions
node
// Tp is the type of the partition function
Tp PartitionType
// Linear is a modifier to the HASH and KEY type for choosing a different
// algorithm
Linear bool
// Expr is an expression used as argument of HASH, RANGE AND LIST types
Expr ExprNode
// ColumnNames is a list of column names used as argument of KEY,
// RANGE COLUMNS and LIST COLUMNS types
ColumnNames []*ColumnName
// Unit is a time unit used as argument of SYSTEM_TIME type
Unit TimeUnitType
// Limit is a row count used as argument of the SYSTEM_TIME type
Limit uint64
// Num is the number of (sub)partitions required by the method.
Num uint64
// KeyAlgorithm is the optional hash algorithm type for `PARTITION BY [LINEAR] KEY` syntax.
KeyAlgorithm *PartitionKeyAlgorithm
Interval *PartitionInterval
}
type PartitionKeyAlgorithm struct {
Type uint64
}
// Restore implements the Node interface
func (n *PartitionMethod) Restore(ctx *format.RestoreCtx) error {
if n.Linear {
ctx.WriteKeyWord("LINEAR ")
}
ctx.WriteKeyWord(n.Tp.String())
if n.KeyAlgorithm != nil {
ctx.WriteKeyWord(" ALGORITHM")
ctx.WritePlainf(" = %d", n.KeyAlgorithm.Type)
}
switch {
case n.Tp == PartitionTypeSystemTime:
if n.Expr != nil && n.Unit != TimeUnitInvalid {
ctx.WriteKeyWord(" INTERVAL ")
if err := n.Expr.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore PartitionMethod.Expr")
}
ctx.WritePlain(" ")
ctx.WriteKeyWord(n.Unit.String())
}
if n.Limit > 0 {
ctx.WriteKeyWord(" LIMIT ")
ctx.WritePlainf("%d", n.Limit)
}
case n.Expr != nil:
ctx.WritePlain(" (")
if err := n.Expr.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore PartitionMethod.Expr")
}
ctx.WritePlain(")")
default:
if n.Tp == PartitionTypeRange || n.Tp == PartitionTypeList {
ctx.WriteKeyWord(" COLUMNS")
}
ctx.WritePlain(" (")
for i, col := range n.ColumnNames {
if i > 0 {
ctx.WritePlain(",")
}
if err := col.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while splicing PartitionMethod.ColumnName[%d]", i)
}
}
ctx.WritePlain(")")
}
if n.Interval != nil {
ctx.WritePlain(" INTERVAL (")
n.Interval.IntervalExpr.Expr.Restore(ctx)
if n.Interval.IntervalExpr.TimeUnit != TimeUnitInvalid {
ctx.WritePlain(" ")
ctx.WriteKeyWord(n.Interval.IntervalExpr.TimeUnit.String())
}
ctx.WritePlain(")")
if n.Interval.FirstRangeEnd != nil {
ctx.WritePlain(" FIRST PARTITION LESS THAN (")
(*n.Interval.FirstRangeEnd).Restore(ctx)
ctx.WritePlain(")")
}
if n.Interval.LastRangeEnd != nil {
ctx.WritePlain(" LAST PARTITION LESS THAN (")
(*n.Interval.LastRangeEnd).Restore(ctx)
ctx.WritePlain(")")
}
if n.Interval.NullPart {
ctx.WritePlain(" NULL PARTITION")
}
if n.Interval.MaxValPart {
ctx.WritePlain(" MAXVALUE PARTITION")
}
}
return nil
}
// acceptInPlace is like Node.Accept but does not allow replacing the node itself.
func (n *PartitionMethod) acceptInPlace(v Visitor) bool {
if n.Expr != nil {
expr, ok := n.Expr.Accept(v)
if !ok {
return false
}
n.Expr = expr.(ExprNode)
}
for i, colName := range n.ColumnNames {
newColName, ok := colName.Accept(v)
if !ok {
return false
}
n.ColumnNames[i] = newColName.(*ColumnName)
}
return true
}
// PartitionOptions specifies the partition options.
type PartitionOptions struct {
PartitionMethod
Sub *PartitionMethod
Definitions []*PartitionDefinition
UpdateIndexes []*Constraint
}
// Validate checks if the partition is well-formed.
func (n *PartitionOptions) Validate() error {
// if both a partition list and the partition numbers are specified, their values must match
if n.Num != 0 && len(n.Definitions) != 0 && n.Num != uint64(len(n.Definitions)) {
return ErrPartitionWrongNoPart
}
// now check the subpartition count
if len(n.Definitions) > 0 {
// ensure the subpartition count for every partitions are the same
// then normalize n.Num and n.Sub.Num so equality comparison works.
n.Num = uint64(len(n.Definitions))
subDefCount := len(n.Definitions[0].Sub)
for _, pd := range n.Definitions[1:] {
if len(pd.Sub) != subDefCount {
return ErrPartitionWrongNoSubpart
}
}
if n.Sub != nil {
if n.Sub.Num != 0 && subDefCount != 0 && n.Sub.Num != uint64(subDefCount) {
return ErrPartitionWrongNoSubpart
}
if subDefCount != 0 {
n.Sub.Num = uint64(subDefCount)
}
} else if subDefCount != 0 {
return ErrSubpartition
}
}
switch n.Tp {
case PartitionTypeHash, PartitionTypeKey:
if n.Num == 0 {
n.Num = 1
}
case PartitionTypeRange, PartitionTypeList:
if n.Interval == nil && len(n.Definitions) == 0 {
return ErrPartitionsMustBeDefined.GenWithStackByArgs(n.Tp)
}
case PartitionTypeSystemTime:
if len(n.Definitions) < 2 {
return ErrSystemVersioningWrongPartitions
}
}
for _, pd := range n.Definitions {
// ensure the partition definition types match the methods,
// e.g. RANGE partitions only allows VALUES LESS THAN
if err := pd.Clause.Validate(n.Tp, len(n.ColumnNames)); err != nil {
return err
}
}
return nil
}
func (n *PartitionOptions) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("PARTITION BY ")
if err := n.PartitionMethod.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore PartitionOptions.PartitionMethod")
}
if n.Num > 0 && len(n.Definitions) == 0 {
ctx.WriteKeyWord(" PARTITIONS ")
ctx.WritePlainf("%d", n.Num)
}
if n.Sub != nil {
ctx.WriteKeyWord(" SUBPARTITION BY ")
if err := n.Sub.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore PartitionOptions.Sub")
}
if n.Sub.Num > 0 {
ctx.WriteKeyWord(" SUBPARTITIONS ")
ctx.WritePlainf("%d", n.Sub.Num)
}
}
if len(n.Definitions) > 0 {
ctx.WritePlain(" (")
for i, def := range n.Definitions {
if i > 0 {
ctx.WritePlain(",")
}
if err := def.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore PartitionOptions.Definitions[%d]", i)
}
}
ctx.WritePlain(")")
}
if len(n.UpdateIndexes) > 0 {
ctx.WritePlain(" UPDATE INDEXES (")
for i, update := range n.UpdateIndexes {
if i > 0 {
ctx.WritePlain(",")
}
ctx.WriteName(update.Name)
if update.Option != nil && update.Option.Global {
ctx.WritePlain(" GLOBAL")
} else {
ctx.WritePlain(" LOCAL")
}
}
ctx.WritePlain(")")
}
return nil
}
func (n *PartitionOptions) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*PartitionOptions)
if !n.PartitionMethod.acceptInPlace(v) {
return n, false
}
if n.Sub != nil && !n.Sub.acceptInPlace(v) {
return n, false
}
for _, def := range n.Definitions {
if !def.acceptInPlace(v) {
return n, false
}
}
return v.Leave(n)
}
// RecoverTableStmt is a statement to recover dropped table.
type RecoverTableStmt struct {
ddlNode
JobID int64
Table *TableName
JobNum int64
}
// Restore implements Node interface.
func (n *RecoverTableStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("RECOVER TABLE ")
if n.Table != nil {
if err := n.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while splicing RecoverTableStmt Table")
}
if n.JobNum > 0 {
ctx.WritePlainf(" %d", n.JobNum)
}
} else {
ctx.WriteKeyWord("BY JOB ")
ctx.WritePlainf("%d", n.JobID)
}
return nil
}
// Accept implements Node Accept interface.
func (n *RecoverTableStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*RecoverTableStmt)
if n.Table != nil {
node, ok := n.Table.Accept(v)
if !ok {
return n, false
}
n.Table = node.(*TableName)
}
return v.Leave(n)
}
// FlashBackToTimestampStmt is a statement to restore the cluster to the specified timestamp
type FlashBackToTimestampStmt struct {
ddlNode
FlashbackTS ExprNode
FlashbackTSO uint64
Tables []*TableName
DBName CIStr
}
// Restore implements Node interface
func (n *FlashBackToTimestampStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("FLASHBACK ")
if len(n.Tables) != 0 {
ctx.WriteKeyWord("TABLE ")
for index, table := range n.Tables {
if index != 0 {
ctx.WritePlain(", ")
}
if err := table.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore DropTableStmt.Tables[%d]", index)
}
}
} else if n.DBName.O != "" {
ctx.WriteKeyWord("DATABASE ")
ctx.WriteName(n.DBName.O)
} else {
ctx.WriteKeyWord("CLUSTER")
}
if n.FlashbackTSO == 0 {
ctx.WriteKeyWord(" TO TIMESTAMP ")
if err := n.FlashbackTS.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while splicing FlashBackToTimestampStmt.FlashbackTS")
}
} else {
ctx.WriteKeyWord(" TO TSO ")
ctx.WritePlainf("%d", n.FlashbackTSO)
}
return nil
}
// Accept implements Node Accept interface.
func (n *FlashBackToTimestampStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*FlashBackToTimestampStmt)
if len(n.Tables) != 0 {
for i, val := range n.Tables {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.Tables[i] = node.(*TableName)
}
}
if n.FlashbackTSO == 0 {
node, ok := n.FlashbackTS.Accept(v)
if !ok {
return n, false
}
n.FlashbackTS = node.(ExprNode)
}
return v.Leave(n)
}
// FlashBackTableStmt is a statement to restore a dropped/truncate table.
type FlashBackTableStmt struct {
ddlNode
Table *TableName
NewName string
}
// Restore implements Node interface.
func (n *FlashBackTableStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("FLASHBACK TABLE ")
if err := n.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while splicing RecoverTableStmt Table")
}
if len(n.NewName) > 0 {
ctx.WriteKeyWord(" TO ")
ctx.WriteName(n.NewName)
}
return nil
}
// Accept implements Node Accept interface.
func (n *FlashBackTableStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*FlashBackTableStmt)
if n.Table != nil {
node, ok := n.Table.Accept(v)
if !ok {
return n, false
}
n.Table = node.(*TableName)
}
return v.Leave(n)
}
type AttributesSpec struct {
node
Attributes string
Default bool
}
func (n *AttributesSpec) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("ATTRIBUTES")
ctx.WritePlain("=")
if n.Default {
ctx.WriteKeyWord("DEFAULT")
return nil
}
ctx.WriteString(n.Attributes)
return nil
}
func (n *AttributesSpec) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*AttributesSpec)
return v.Leave(n)
}
type StatsOptionsSpec struct {
node
StatsOptions string
Default bool
}
func (n *StatsOptionsSpec) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("STATS_OPTIONS")
ctx.WritePlain("=")
if n.Default {
ctx.WriteKeyWord("DEFAULT")
return nil
}
ctx.WriteString(n.StatsOptions)
return nil
}
func (n *StatsOptionsSpec) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*StatsOptionsSpec)
return v.Leave(n)
}
// AlterPlacementPolicyStmt is a statement to alter placement policy option.
type AlterPlacementPolicyStmt struct {
ddlNode
PolicyName CIStr
IfExists bool
PlacementOptions []*PlacementOption
}
func (n *AlterPlacementPolicyStmt) Restore(ctx *format.RestoreCtx) error {
if ctx.Flags.HasSkipPlacementRuleForRestoreFlag() {
return nil
}
if ctx.Flags.HasTiDBSpecialCommentFlag() {
return restorePlacementStmtInSpecialComment(ctx, n)
}
ctx.WriteKeyWord("ALTER PLACEMENT POLICY ")
if n.IfExists {
ctx.WriteKeyWord("IF EXISTS ")
}
ctx.WriteName(n.PolicyName.O)
for i, option := range n.PlacementOptions {
ctx.WritePlain(" ")
if err := option.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while splicing AlterPlacementPolicyStmt TableOption: [%v]", i)
}
}
return nil
}
func (n *AlterPlacementPolicyStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*AlterPlacementPolicyStmt)
return v.Leave(n)
}
func CheckAppend(ops []*ResourceGroupOption, newOp *ResourceGroupOption) bool {
for _, op := range ops {
if op.Tp == newOp.Tp {
return false
}
}
return true
}
func CheckRunawayAppend(ops []*ResourceGroupRunawayOption, newOp *ResourceGroupRunawayOption) bool {
for _, op := range ops {
if op.Tp == newOp.Tp {
// support multiple runaway rules.
if op.Tp == RunawayRule {
continue
}
return false
}
}
return true
}
func CheckBackgroundAppend(ops []*ResourceGroupBackgroundOption, newOp *ResourceGroupBackgroundOption) bool {
for _, op := range ops {
if op.Type == newOp.Type {
return false
}
}
return true
}
// AlterResourceGroupStmt is a statement to alter placement policy option.
type AlterResourceGroupStmt struct {
ddlNode
ResourceGroupName CIStr
IfExists bool
ResourceGroupOptionList []*ResourceGroupOption
}
func (n *AlterResourceGroupStmt) Restore(ctx *format.RestoreCtx) error {
if ctx.Flags.HasTiDBSpecialCommentFlag() {
return restoreStmtInSpecialComment(ctx, n, tidb.FeatureIDResourceGroup)
}
ctx.WriteKeyWord("ALTER RESOURCE GROUP ")
if n.IfExists {
ctx.WriteKeyWord("IF EXISTS ")
}
ctx.WriteName(n.ResourceGroupName.O)
for i, option := range n.ResourceGroupOptionList {
if i > 0 {
ctx.WritePlain(",")
}
ctx.WritePlain(" ")
if err := option.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while splicing AlterResourceGroupStmt Options: [%v]", i)
}
}
return nil
}
func (n *AlterResourceGroupStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*AlterResourceGroupStmt)
return v.Leave(n)
}
// AlterSequenceStmt is a statement to alter sequence option.
type AlterSequenceStmt struct {
ddlNode
// sequence name
Name *TableName
IfExists bool
SeqOptions []*SequenceOption
}
func (n *AlterSequenceStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("ALTER SEQUENCE ")
if n.IfExists {
ctx.WriteKeyWord("IF EXISTS ")
}
if err := n.Name.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore AlterSequenceStmt.Table")
}
for i, option := range n.SeqOptions {
ctx.WritePlain(" ")
if err := option.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while splicing AlterSequenceStmt SequenceOption: [%v]", i)
}
}
return nil
}
func (n *AlterSequenceStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*AlterSequenceStmt)
node, ok := n.Name.Accept(v)
if !ok {
return n, false
}
n.Name = node.(*TableName)
return v.Leave(n)
}
func restorePlacementStmtInSpecialComment(ctx *format.RestoreCtx, n DDLNode) error {
return restoreStmtInSpecialComment(ctx, n, tidb.FeatureIDPlacement)
}
func restoreStmtInSpecialComment(ctx *format.RestoreCtx, n DDLNode, feature string) error {
origFlags := ctx.Flags
defer func() {
ctx.Flags = origFlags
}()
ctx.Flags |= format.RestoreTiDBSpecialComment
return ctx.WriteWithSpecialComments(feature, func() error {
ctx.Flags &= ^format.RestoreTiDBSpecialComment
return n.Restore(ctx)
})
}
func tableOptionsWithRestoreTTLFlag(flags format.RestoreFlags, options []*TableOption) []*TableOption {
if !flags.HasRestoreWithTTLEnableOff() {
return options
}
newOptions := make([]*TableOption, 0, len(options))
for _, opt := range options {
if opt.Tp == TableOptionTTLEnable {
continue
}
newOptions = append(newOptions, opt)
if opt.Tp == TableOptionTTL {
newOptions = append(newOptions, &TableOption{
Tp: TableOptionTTLEnable,
BoolValue: false,
})
}
}
return newOptions
}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package ast
import (
"reflect"
"strings"
"github.com/pingcap/errors"
"github.com/pingcap/tidb/pkg/parser/auth"
"github.com/pingcap/tidb/pkg/parser/format"
"github.com/pingcap/tidb/pkg/parser/mysql"
"github.com/pingcap/tidb/pkg/parser/util"
)
var (
_ DMLNode = &DeleteStmt{}
_ DMLNode = &DistributeTableStmt{}
_ DMLNode = &InsertStmt{}
_ DMLNode = &SetOprStmt{}
_ DMLNode = &UpdateStmt{}
_ DMLNode = &SelectStmt{}
_ DMLNode = &CallStmt{}
_ DMLNode = &ShowStmt{}
_ DMLNode = &LoadDataStmt{}
_ DMLNode = &ImportIntoStmt{}
_ DMLNode = &SplitRegionStmt{}
_ DMLNode = &NonTransactionalDMLStmt{}
_ Node = &Assignment{}
_ Node = &ByItem{}
_ Node = &FieldList{}
_ Node = &GroupByClause{}
_ Node = &HavingClause{}
_ Node = &AsOfClause{}
_ Node = &Join{}
_ Node = &Limit{}
_ Node = &OnCondition{}
_ Node = &OrderByClause{}
_ Node = &SelectField{}
_ Node = &TableName{}
_ Node = &TableRefsClause{}
_ Node = &TableSource{}
_ Node = &SetOprSelectList{}
_ Node = &WildCardField{}
_ Node = &WindowSpec{}
_ Node = &PartitionByClause{}
_ Node = &FrameClause{}
_ Node = &FrameBound{}
)
// JoinType is join type, including cross/left/right/full.
type JoinType int
const (
// CrossJoin is cross join type.
CrossJoin JoinType = iota + 1
// LeftJoin is left Join type.
LeftJoin
// RightJoin is right Join type.
RightJoin
)
// Join represents table join.
type Join struct {
node
// Left table can be TableSource or JoinNode.
Left ResultSetNode
// Right table can be TableSource or JoinNode or nil.
Right ResultSetNode
// Tp represents join type.
Tp JoinType
// On represents join on condition.
On *OnCondition
// Using represents join using clause.
Using []*ColumnName
// NaturalJoin represents join is natural join.
NaturalJoin bool
// StraightJoin represents a straight join.
StraightJoin bool
ExplicitParens bool
}
func (*Join) resultSet() {}
// NewCrossJoin builds a cross join without `on` or `using` clause.
// If the right child is a join tree, we need to handle it differently to make the precedence get right.
// Here is the example: t1 join t2 join t3
//
// JOIN ON t2.a = t3.a
// t1 join / \
// t2 t3
//
// (left) (right)
//
// We can not build it directly to:
//
// JOIN
// / \
// t1 JOIN ON t2.a = t3.a
// / \
// t2 t3
//
// The precedence would be t1 join (t2 join t3 on t2.a=t3.a), not (t1 join t2) join t3 on t2.a=t3.a
// We need to find the left-most child of the right child, and build a cross join of the left-hand side
// of the left child(t1), and the right hand side with the original left-most child of the right child(t2).
//
// JOIN t2.a = t3.a
// / \
// JOIN t3
// / \
// t1 t2
//
// Besides, if the right handle side join tree's join type is right join and has explicit parentheses, we need to rewrite it to left join.
// So t1 join t2 right join t3 would be rewrite to t1 join t3 left join t2.
// If not, t1 join (t2 right join t3) would be (t1 join t2) right join t3. After rewrite the right join to left join.
// We get (t1 join t3) left join t2, the semantics is correct.
func NewCrossJoin(left, right ResultSetNode) (n *Join) {
rj, ok := right.(*Join)
// don't break the explicit parents name scope constraints.
// this kind of join re-order can be done in logical-phase after the name resolution.
if !ok || rj.Right == nil || rj.ExplicitParens {
return &Join{Left: left, Right: right, Tp: CrossJoin}
}
var leftMostLeafFatherOfRight = rj
// Walk down the right hand side.
for {
if leftMostLeafFatherOfRight.Tp == RightJoin && leftMostLeafFatherOfRight.ExplicitParens {
// Rewrite right join to left join.
tmpChild := leftMostLeafFatherOfRight.Right
leftMostLeafFatherOfRight.Right = leftMostLeafFatherOfRight.Left
leftMostLeafFatherOfRight.Left = tmpChild
leftMostLeafFatherOfRight.Tp = LeftJoin
}
leftChild := leftMostLeafFatherOfRight.Left
join, ok := leftChild.(*Join)
if !(ok && join.Right != nil) {
break
}
leftMostLeafFatherOfRight = join
}
newCrossJoin := &Join{Left: left, Right: leftMostLeafFatherOfRight.Left, Tp: CrossJoin}
leftMostLeafFatherOfRight.Left = newCrossJoin
return rj
}
// Restore implements Node interface.
func (n *Join) Restore(ctx *format.RestoreCtx) error {
useCommaJoin := false
_, leftIsJoin := n.Left.(*Join)
if leftIsJoin && n.Left.(*Join).Right == nil {
if ts, ok := n.Left.(*Join).Left.(*TableSource); ok {
switch ts.Source.(type) {
case *SelectStmt, *SetOprStmt:
useCommaJoin = true
}
}
}
if leftIsJoin && !useCommaJoin {
ctx.WritePlain("(")
}
if err := n.Left.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore Join.Left")
}
if leftIsJoin && !useCommaJoin {
ctx.WritePlain(")")
}
if n.Right == nil {
return nil
}
if n.NaturalJoin {
ctx.WriteKeyWord(" NATURAL")
}
switch n.Tp {
case LeftJoin:
ctx.WriteKeyWord(" LEFT")
case RightJoin:
ctx.WriteKeyWord(" RIGHT")
}
if n.StraightJoin {
ctx.WriteKeyWord(" STRAIGHT_JOIN ")
} else {
if useCommaJoin {
ctx.WritePlain(", ")
} else {
ctx.WriteKeyWord(" JOIN ")
}
}
_, rightIsJoin := n.Right.(*Join)
if rightIsJoin {
ctx.WritePlain("(")
}
if err := n.Right.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore Join.Right")
}
if rightIsJoin {
ctx.WritePlain(")")
}
if n.On != nil {
ctx.WritePlain(" ")
if err := n.On.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore Join.On")
}
}
if len(n.Using) != 0 {
ctx.WriteKeyWord(" USING ")
ctx.WritePlain("(")
for i, v := range n.Using {
if i != 0 {
ctx.WritePlain(",")
}
if err := v.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore Join.Using")
}
}
ctx.WritePlain(")")
}
return nil
}
// Accept implements Node Accept interface.
func (n *Join) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*Join)
node, ok := n.Left.Accept(v)
if !ok {
return n, false
}
n.Left = node.(ResultSetNode)
if n.Right != nil {
node, ok = n.Right.Accept(v)
if !ok {
return n, false
}
n.Right = node.(ResultSetNode)
}
if n.On != nil {
node, ok = n.On.Accept(v)
if !ok {
return n, false
}
n.On = node.(*OnCondition)
}
for i, col := range n.Using {
node, ok = col.Accept(v)
if !ok {
return n, false
}
n.Using[i] = node.(*ColumnName)
}
return v.Leave(n)
}
// TableName represents a table name.
type TableName struct {
node
Schema CIStr
Name CIStr
IndexHints []*IndexHint
PartitionNames []CIStr
TableSample *TableSample
// AS OF is used to see the data as it was at a specific point in time.
AsOf *AsOfClause
// IsAlias is true if this table name is an alias.
// sometime, we need to distinguish the table name is an alias or not.
// for example ```delete tt1 from t1 tt1,(select max(id) id from t2)tt2 where tt1.id<=tt2.id```
// ```tt1``` is a alias name. so we need to set IsAlias to true and restore the table name without database name.
IsAlias bool
}
func (*TableName) resultSet() {}
// Restore implements Node interface.
func (n *TableName) restoreName(ctx *format.RestoreCtx) {
if !ctx.Flags.HasWithoutSchemaNameFlag() {
// restore db name
if n.Schema.String() != "" {
ctx.WriteName(n.Schema.String())
ctx.WritePlain(".")
} else if ctx.DefaultDB != "" && !n.IsAlias {
// Try CTE, for a CTE table name, we shouldn't write the database name.
if !ctx.IsCTETableName(n.Name.L) {
ctx.WriteName(ctx.DefaultDB)
ctx.WritePlain(".")
}
}
}
// restore table name
ctx.WriteName(n.Name.String())
}
func (n *TableName) restorePartitions(ctx *format.RestoreCtx) {
if len(n.PartitionNames) > 0 {
ctx.WriteKeyWord(" PARTITION")
ctx.WritePlain("(")
for i, v := range n.PartitionNames {
if i != 0 {
ctx.WritePlain(", ")
}
ctx.WriteName(v.String())
}
ctx.WritePlain(")")
}
}
func (n *TableName) restoreIndexHints(ctx *format.RestoreCtx) error {
for _, value := range n.IndexHints {
ctx.WritePlain(" ")
if err := value.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while splicing IndexHints")
}
}
return nil
}
func (n *TableName) Restore(ctx *format.RestoreCtx) error {
n.restoreName(ctx)
n.restorePartitions(ctx)
if err := n.restoreIndexHints(ctx); err != nil {
return err
}
if n.AsOf != nil {
ctx.WritePlain(" ")
if err := n.AsOf.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while splicing TableName.Asof")
}
}
if n.TableSample != nil {
ctx.WritePlain(" ")
if err := n.TableSample.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while splicing TableName.TableSample")
}
}
return nil
}
// IndexHintType is the type for index hint use, ignore or force.
type IndexHintType int
// IndexHintUseType values.
const (
HintUse IndexHintType = iota + 1
HintIgnore
HintForce
HintOrderIndex
HintNoOrderIndex
)
// IndexHintScope is the type for index hint for join, order by or group by.
type IndexHintScope int
// Index hint scopes.
const (
HintForScan IndexHintScope = iota + 1
HintForJoin
HintForOrderBy
HintForGroupBy
)
// IndexHint represents a hint for optimizer to use/ignore/force for join/order by/group by.
type IndexHint struct {
IndexNames []CIStr
HintType IndexHintType
HintScope IndexHintScope
}
// IndexHint Restore (The const field uses switch to facilitate understanding)
func (n *IndexHint) Restore(ctx *format.RestoreCtx) error {
indexHintType := ""
switch n.HintType {
case HintUse:
indexHintType = "USE INDEX"
case HintIgnore:
indexHintType = "IGNORE INDEX"
case HintForce:
indexHintType = "FORCE INDEX"
case HintOrderIndex:
indexHintType = "ORDER INDEX"
case HintNoOrderIndex:
indexHintType = "NO ORDER INDEX"
default: // Prevent accidents
return errors.New("IndexHintType has an error while matching")
}
indexHintScope := ""
switch n.HintScope {
case HintForScan:
indexHintScope = ""
case HintForJoin:
indexHintScope = " FOR JOIN"
case HintForOrderBy:
indexHintScope = " FOR ORDER BY"
case HintForGroupBy:
indexHintScope = " FOR GROUP BY"
default: // Prevent accidents
return errors.New("IndexHintScope has an error while matching")
}
ctx.WriteKeyWord(indexHintType)
ctx.WriteKeyWord(indexHintScope)
ctx.WritePlain(" (")
for i, value := range n.IndexNames {
if i > 0 {
ctx.WritePlain(", ")
}
ctx.WriteName(value.O)
}
ctx.WritePlain(")")
return nil
}
// Accept implements Node Accept interface.
func (n *TableName) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*TableName)
if n.TableSample != nil {
newTs, ok := n.TableSample.Accept(v)
if !ok {
return n, false
}
n.TableSample = newTs.(*TableSample)
}
if n.AsOf != nil {
newNode, skipChildren := n.AsOf.Accept(v)
if skipChildren {
return v.Leave(n)
}
n.AsOf = newNode.(*AsOfClause)
}
return v.Leave(n)
}
// DeleteTableList is the tablelist used in delete statement multi-table mode.
type DeleteTableList struct {
node
Tables []*TableName
}
// Restore implements Node interface.
func (n *DeleteTableList) Restore(ctx *format.RestoreCtx) error {
for i, t := range n.Tables {
if i != 0 {
ctx.WritePlain(",")
}
if err := t.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore DeleteTableList.Tables[%v]", i)
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *DeleteTableList) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*DeleteTableList)
if n != nil {
for i, t := range n.Tables {
node, ok := t.Accept(v)
if !ok {
return n, false
}
n.Tables[i] = node.(*TableName)
}
}
return v.Leave(n)
}
// OnCondition represents JOIN on condition.
type OnCondition struct {
node
Expr ExprNode
}
// Restore implements Node interface.
func (n *OnCondition) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("ON ")
if err := n.Expr.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore OnCondition.Expr")
}
return nil
}
// Accept implements Node Accept interface.
func (n *OnCondition) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*OnCondition)
node, ok := n.Expr.Accept(v)
if !ok {
return n, false
}
n.Expr = node.(ExprNode)
return v.Leave(n)
}
// TableSource represents table source with a name.
type TableSource struct {
node
// Source is the source of the data, can be a TableName,
// a SelectStmt, a SetOprStmt, or a JoinNode.
Source ResultSetNode
// AsName is the alias name of the table source.
AsName CIStr
// Lateral indicates whether this is a LATERAL derived table.
// MySQL 8.0+ syntax: FROM t1, LATERAL (SELECT ...) AS dt
// LATERAL allows the derived table to reference columns from tables to its left.
Lateral bool
// ColumnNames is the optional column alias list for derived tables.
// e.g. LATERAL (SELECT ...) AS dt(c1, c2)
ColumnNames []CIStr
}
func (*TableSource) resultSet() {}
// Restore implements Node interface.
func (n *TableSource) Restore(ctx *format.RestoreCtx) error {
// Validate AST invariants before emitting any SQL.
// Source can be TableName, SelectStmt, SetOprStmt, or JoinNode (parenthesized join).
// LATERAL and ColumnNames are only valid on derived tables (SelectStmt, SetOprStmt);
// TableName and JoinNode are both excluded.
isDerived := false
switch n.Source.(type) {
case *SelectStmt, *SetOprStmt:
isDerived = true
}
if n.Lateral && !isDerived {
return errors.New("LATERAL cannot be applied to a table name, only to derived tables")
}
if len(n.ColumnNames) > 0 && !isDerived {
return errors.New("column alias list cannot be applied to a table name")
}
if len(n.ColumnNames) > 0 && n.AsName.String() == "" {
return errors.New("column list provided without alias for derived table")
}
needParen := false
switch n.Source.(type) {
case *SelectStmt, *SetOprStmt:
needParen = true
}
// Output LATERAL keyword if this is a LATERAL derived table
if n.Lateral {
ctx.WriteKeyWord("LATERAL ")
}
if tn, tnCase := n.Source.(*TableName); tnCase {
if needParen {
ctx.WritePlain("(")
}
tn.restoreName(ctx)
tn.restorePartitions(ctx)
if asName := n.AsName.String(); asName != "" {
ctx.WriteKeyWord(" AS ")
ctx.WriteName(asName)
}
if tn.AsOf != nil {
ctx.WritePlain(" ")
if err := tn.AsOf.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore TableSource.AsOf")
}
}
if err := tn.restoreIndexHints(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore TableSource.Source.(*TableName).IndexHints")
}
if tn.TableSample != nil {
ctx.WritePlain(" ")
if err := tn.TableSample.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while splicing TableName.TableSample")
}
}
if needParen {
ctx.WritePlain(")")
}
} else {
if needParen {
ctx.WritePlain("(")
}
if err := n.Source.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore TableSource.Source")
}
if needParen {
ctx.WritePlain(")")
}
if asName := n.AsName.String(); asName != "" {
ctx.WriteKeyWord(" AS ")
ctx.WriteName(asName)
if len(n.ColumnNames) > 0 {
ctx.WritePlain("(")
for i, col := range n.ColumnNames {
if i > 0 {
ctx.WritePlain(", ")
}
ctx.WriteName(col.String())
}
ctx.WritePlain(")")
}
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *TableSource) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*TableSource)
node, ok := n.Source.Accept(v)
if !ok {
return n, false
}
n.Source = node.(ResultSetNode)
return v.Leave(n)
}
// SelectLockType is the lock type for SelectStmt.
type SelectLockType int
// Select lock types.
const (
SelectLockNone SelectLockType = iota
SelectLockForUpdate
SelectLockForShare
SelectLockForUpdateNoWait
SelectLockForUpdateWaitN
SelectLockForShareNoWait
SelectLockForUpdateSkipLocked
SelectLockForShareSkipLocked
)
type SelectLockInfo struct {
LockType SelectLockType
WaitSec uint64
Tables []*TableName
}
// Hash64 implements the cascades/base.Hasher.<0th> interface.
func (n *SelectLockInfo) Hash64(h util.IHasher) {
h.HashInt(int(n.LockType))
h.HashUint64(n.WaitSec)
h.HashInt(len(n.Tables))
for _, one := range n.Tables {
// to make it simple, we just use lockInfo's addr.
h.HashUint64(uint64(reflect.ValueOf(one).Pointer()))
}
}
// Equals implements the cascades/base.Hasher.<1th> interface.
func (n *SelectLockInfo) Equals(other any) bool {
n2, ok := other.(*SelectLockInfo)
if !ok {
return false
}
if n == nil {
return n2 == nil
}
if other == nil {
return false
}
ok = n.LockType == n2.LockType &&
n.WaitSec == n2.WaitSec
if !ok {
return false
}
if len(n.Tables) != len(n2.Tables) {
return false
}
for i, one := range n.Tables {
if one != n2.Tables[i] {
return false
}
}
return true
}
// String implements fmt.Stringer.
func (n SelectLockType) String() string {
switch n {
case SelectLockNone:
return "none"
case SelectLockForUpdate:
return "for update"
case SelectLockForShare:
return "for share"
case SelectLockForUpdateNoWait:
return "for update nowait"
case SelectLockForUpdateWaitN:
return "for update wait"
case SelectLockForShareNoWait:
return "for share nowait"
case SelectLockForUpdateSkipLocked:
return "for update skip locked"
case SelectLockForShareSkipLocked:
return "for share skip locked"
}
return "unsupported select lock type"
}
// WildCardField is a special type of select field content.
type WildCardField struct {
node
Table CIStr
Schema CIStr
}
// Restore implements Node interface.
func (n *WildCardField) Restore(ctx *format.RestoreCtx) error {
if schema := n.Schema.String(); schema != "" {
ctx.WriteName(schema)
ctx.WritePlain(".")
}
if table := n.Table.String(); table != "" {
ctx.WriteName(table)
ctx.WritePlain(".")
}
ctx.WritePlain("*")
return nil
}
// Accept implements Node Accept interface.
func (n *WildCardField) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*WildCardField)
return v.Leave(n)
}
// SelectField represents fields in select statement.
// There are two type of select field: wildcard
// and expression with optional alias name.
type SelectField struct {
node
// Offset is used to get original text.
Offset int
// WildCard is not nil, Expr will be nil.
WildCard *WildCardField
// Expr is not nil, WildCard will be nil.
Expr ExprNode
// AsName is alias name for Expr.
AsName CIStr
// Auxiliary stands for if this field is auxiliary.
// When we add a Field into SelectField list which is used for having/orderby clause but the field is not in select clause,
// we should set its Auxiliary to true. Then the TrimExec will trim the field.
Auxiliary bool
AuxiliaryColInAgg bool
AuxiliaryColInOrderBy bool
}
// Restore implements Node interface.
func (n *SelectField) Restore(ctx *format.RestoreCtx) error {
if n.WildCard != nil {
if err := n.WildCard.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore SelectField.WildCard")
}
}
if n.Expr != nil {
if err := n.Expr.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore SelectField.Expr")
}
}
if asName := n.AsName.String(); asName != "" {
ctx.WriteKeyWord(" AS ")
ctx.WriteName(asName)
}
return nil
}
// Accept implements Node Accept interface.
func (n *SelectField) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*SelectField)
if n.Expr != nil {
node, ok := n.Expr.Accept(v)
if !ok {
return n, false
}
n.Expr = node.(ExprNode)
}
return v.Leave(n)
}
func (n *SelectField) Match(col *ColumnNameExpr, ignoreAsName bool) bool {
// if col specify a table name, resolve from table source directly.
if col.Name.Table.L == "" {
if n.AsName.L == "" || ignoreAsName {
if curCol, isCol := n.Expr.(*ColumnNameExpr); isCol {
return curCol.Name.Name.L == col.Name.Name.L
} else if _, isFunc := n.Expr.(*FuncCallExpr); isFunc {
// Fix issue 7331
// If there are some function calls in SelectField, we check if
// ColumnNameExpr in GroupByClause matches one of these function calls.
// Example: select concat(k1,k2) from t group by `concat(k1,k2)`,
// `concat(k1,k2)` matches with function call concat(k1, k2).
return strings.ToLower(n.Text()) == col.Name.Name.L
}
// a expression without as name can't be matched.
return false
}
return n.AsName.L == col.Name.Name.L
}
return false
}
// FieldList represents field list in select statement.
type FieldList struct {
node
Fields []*SelectField
}
// Restore implements Node interface.
func (n *FieldList) Restore(ctx *format.RestoreCtx) error {
for i, v := range n.Fields {
if i != 0 {
ctx.WritePlain(", ")
}
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore FieldList.Fields[%d]", i)
}
}
return nil
}
func restoreReturningFields(ctx *format.RestoreCtx, fields []*SelectField) error {
for i, field := range fields {
if i != 0 {
ctx.WritePlain(", ")
}
if err := field.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore Returning[%d]", i)
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *FieldList) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*FieldList)
for i, val := range n.Fields {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.Fields[i] = node.(*SelectField)
}
return v.Leave(n)
}
// TableRefsClause represents table references clause in dml statement.
type TableRefsClause struct {
node
TableRefs *Join
}
// Restore implements Node interface.
func (n *TableRefsClause) Restore(ctx *format.RestoreCtx) error {
if err := n.TableRefs.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore TableRefsClause.TableRefs")
}
return nil
}
// Accept implements Node Accept interface.
func (n *TableRefsClause) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*TableRefsClause)
node, ok := n.TableRefs.Accept(v)
if !ok {
return n, false
}
n.TableRefs = node.(*Join)
return v.Leave(n)
}
// ByItem represents an item in order by or group by.
type ByItem struct {
node
Expr ExprNode
Desc bool
NullOrder bool
}
// Restore implements Node interface.
func (n *ByItem) Restore(ctx *format.RestoreCtx) error {
if err := n.Expr.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ByItem.Expr")
}
if n.Desc {
ctx.WriteKeyWord(" DESC")
}
return nil
}
// Accept implements Node Accept interface.
func (n *ByItem) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ByItem)
node, ok := n.Expr.Accept(v)
if !ok {
return n, false
}
n.Expr = node.(ExprNode)
return v.Leave(n)
}
// GroupByClause represents group by clause.
type GroupByClause struct {
node
Items []*ByItem
Rollup bool
}
// Restore implements Node interface.
func (n *GroupByClause) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("GROUP BY ")
for i, v := range n.Items {
if i != 0 {
ctx.WritePlain(",")
}
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore GroupByClause.Items[%d]", i)
}
}
if n.Rollup {
ctx.WriteKeyWord(" WITH ROLLUP")
}
return nil
}
// Accept implements Node Accept interface.
func (n *GroupByClause) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*GroupByClause)
for i, val := range n.Items {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.Items[i] = node.(*ByItem)
}
return v.Leave(n)
}
// HavingClause represents having clause.
type HavingClause struct {
node
Expr ExprNode
}
// Restore implements Node interface.
func (n *HavingClause) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("HAVING ")
if err := n.Expr.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore HavingClause.Expr")
}
return nil
}
// Accept implements Node Accept interface.
func (n *HavingClause) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*HavingClause)
node, ok := n.Expr.Accept(v)
if !ok {
return n, false
}
n.Expr = node.(ExprNode)
return v.Leave(n)
}
// OrderByClause represents order by clause.
type OrderByClause struct {
node
Items []*ByItem
ForUnion bool
}
// Restore implements Node interface.
func (n *OrderByClause) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("ORDER BY ")
for i, item := range n.Items {
if i != 0 {
ctx.WritePlain(",")
}
if err := item.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore OrderByClause.Items[%d]", i)
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *OrderByClause) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*OrderByClause)
for i, val := range n.Items {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.Items[i] = node.(*ByItem)
}
return v.Leave(n)
}
type SampleMethodType int8
const (
SampleMethodTypeNone SampleMethodType = iota
SampleMethodTypeSystem
SampleMethodTypeBernoulli
SampleMethodTypeTiDBRegion
)
type SampleClauseUnitType int8
const (
SampleClauseUnitTypeDefault SampleClauseUnitType = iota
SampleClauseUnitTypeRow
SampleClauseUnitTypePercent
)
type TableSample struct {
node
SampleMethod SampleMethodType
Expr ExprNode
SampleClauseUnit SampleClauseUnitType
RepeatableSeed ExprNode
}
func (s *TableSample) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("TABLESAMPLE ")
switch s.SampleMethod {
case SampleMethodTypeBernoulli:
ctx.WriteKeyWord("BERNOULLI ")
case SampleMethodTypeSystem:
ctx.WriteKeyWord("SYSTEM ")
case SampleMethodTypeTiDBRegion:
ctx.WriteKeyWord("REGION ")
}
ctx.WritePlain("(")
if s.Expr != nil {
if err := s.Expr.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore TableSample.Expr")
}
}
switch s.SampleClauseUnit {
case SampleClauseUnitTypeDefault:
case SampleClauseUnitTypePercent:
ctx.WriteKeyWord(" PERCENT")
case SampleClauseUnitTypeRow:
ctx.WriteKeyWord(" ROWS")
}
ctx.WritePlain(")")
if s.RepeatableSeed != nil {
ctx.WriteKeyWord(" REPEATABLE")
ctx.WritePlain("(")
if err := s.RepeatableSeed.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore TableSample.Expr")
}
ctx.WritePlain(")")
}
return nil
}
func (s *TableSample) Accept(v Visitor) (node Node, ok bool) {
newNode, skipChildren := v.Enter(s)
if skipChildren {
return v.Leave(newNode)
}
s = newNode.(*TableSample)
if s.Expr != nil {
node, ok = s.Expr.Accept(v)
if !ok {
return s, false
}
s.Expr = node.(ExprNode)
}
if s.RepeatableSeed != nil {
node, ok = s.RepeatableSeed.Accept(v)
if !ok {
return s, false
}
s.RepeatableSeed = node.(ExprNode)
}
return v.Leave(s)
}
type SelectStmtKind uint8
const (
SelectStmtKindSelect SelectStmtKind = iota
SelectStmtKindTable
SelectStmtKindValues
)
func (s *SelectStmtKind) String() string {
switch *s {
case SelectStmtKindSelect:
return "SELECT"
case SelectStmtKindTable:
return "TABLE"
case SelectStmtKindValues:
return "VALUES"
}
return ""
}
type CommonTableExpression struct {
node
Name CIStr
Query *SubqueryExpr
ColNameList []CIStr
IsRecursive bool
// Record how many consumers the current cte has
ConsumerCount int
}
// Restore implements Node interface
func (c *CommonTableExpression) Restore(ctx *format.RestoreCtx) error {
ctx.WriteName(c.Name.String())
if c.IsRecursive {
// If the CTE is recursive, we should make it visible for the CTE's query.
// Otherwise, we should put it to stack after building the CTE's query.
ctx.RecordCTEName(c.Name.L)
}
if len(c.ColNameList) > 0 {
ctx.WritePlain(" (")
for j, name := range c.ColNameList {
if j != 0 {
ctx.WritePlain(", ")
}
ctx.WriteName(name.String())
}
ctx.WritePlain(")")
}
ctx.WriteKeyWord(" AS ")
err := c.Query.Restore(ctx)
if err != nil {
return err
}
if !c.IsRecursive {
ctx.RecordCTEName(c.Name.L)
}
return nil
}
// Accept implements Node interface
func (c *CommonTableExpression) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(c)
if skipChildren {
return v.Leave(newNode)
}
node, ok := c.Query.Accept(v)
if !ok {
return c, false
}
c.Query = node.(*SubqueryExpr)
return v.Leave(c)
}
type WithClause struct {
node
IsRecursive bool
CTEs []*CommonTableExpression
}
// SelectStmt represents the select query node.
// See https://dev.mysql.com/doc/refman/5.7/en/select.html
type SelectStmt struct {
dmlNode
// SelectStmtOpts wraps around select hints and switches.
*SelectStmtOpts
// Distinct represents whether the select has distinct option.
Distinct bool
// From is the from clause of the query.
From *TableRefsClause
// Where is the where clause in select statement.
Where ExprNode
// Fields is the select expression list.
Fields *FieldList
// GroupBy is the group by expression list.
GroupBy *GroupByClause
// Having is the having condition.
Having *HavingClause
// WindowSpecs is the window specification list.
WindowSpecs []WindowSpec
// OrderBy is the ordering expression list.
OrderBy *OrderByClause
// Limit is the limit clause.
Limit *Limit
// LockInfo is the lock type
LockInfo *SelectLockInfo
// TableHints represents the table level Optimizer Hint for join type
TableHints []*TableOptimizerHint
// IsInBraces indicates whether it's a stmt in brace.
IsInBraces bool
// WithBeforeBraces indicates whether stmt's with clause is before the brace.
// It's used to distinguish (with xxx select xxx) and with xxx (select xxx)
WithBeforeBraces bool
// QueryBlockOffset indicates the order of this SelectStmt if counted from left to right in the sql text.
QueryBlockOffset int
// SelectIntoOpt is the select-into option.
SelectIntoOpt *SelectIntoOption
// AfterSetOperator indicates the SelectStmt after which type of set operator
AfterSetOperator *SetOprType
// Kind refer to three kind of statement: SelectStmt, TableStmt and ValuesStmt
Kind SelectStmtKind
// Lists is filled only when Kind == SelectStmtKindValues
Lists []*RowExpr
With *WithClause
// AsViewSchema indicates if this stmt provides the schema for the view. It is only used when creating the view
AsViewSchema bool
}
func (*SelectStmt) resultSet() {}
func (n *WithClause) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("WITH ")
if n.IsRecursive {
ctx.WriteKeyWord("RECURSIVE ")
}
for i, cte := range n.CTEs {
if i != 0 {
ctx.WritePlain(", ")
}
if err := cte.Restore(ctx); err != nil {
return err
}
}
ctx.WritePlain(" ")
return nil
}
func (n *WithClause) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
for _, cte := range n.CTEs {
if _, ok := cte.Accept(v); !ok {
return n, false
}
}
return v.Leave(n)
}
// Restore implements Node interface.
func (n *SelectStmt) Restore(ctx *format.RestoreCtx) error {
if n.WithBeforeBraces {
defer ctx.RestoreCTEFunc()() //nolint: all_revive
err := n.With.Restore(ctx)
if err != nil {
return err
}
}
if n.IsInBraces {
ctx.WritePlain("(")
defer func() {
ctx.WritePlain(")")
}()
}
if !n.WithBeforeBraces && n.With != nil {
defer ctx.RestoreCTEFunc()() //nolint: all_revive
err := n.With.Restore(ctx)
if err != nil {
return err
}
}
ctx.WriteKeyWord(n.Kind.String())
ctx.WritePlain(" ")
switch n.Kind {
case SelectStmtKindSelect:
if n.SelectStmtOpts.Priority > 0 {
ctx.WriteKeyWord(mysql.Priority2Str[n.SelectStmtOpts.Priority])
ctx.WritePlain(" ")
}
if n.SelectStmtOpts.SQLSmallResult {
ctx.WriteKeyWord("SQL_SMALL_RESULT ")
}
if n.SelectStmtOpts.SQLBigResult {
ctx.WriteKeyWord("SQL_BIG_RESULT ")
}
if n.SelectStmtOpts.SQLBufferResult {
ctx.WriteKeyWord("SQL_BUFFER_RESULT ")
}
if !n.SelectStmtOpts.SQLCache {
ctx.WriteKeyWord("SQL_NO_CACHE ")
}
if n.SelectStmtOpts.CalcFoundRows {
ctx.WriteKeyWord("SQL_CALC_FOUND_ROWS ")
}
if len(n.TableHints) != 0 {
ctx.WritePlain("/*+ ")
for i, tableHint := range n.TableHints {
if i != 0 {
ctx.WritePlain(" ")
}
if err := tableHint.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore SelectStmt.TableHints[%d]", i)
}
}
ctx.WritePlain("*/ ")
}
if n.Distinct {
ctx.WriteKeyWord("DISTINCT ")
} else if n.SelectStmtOpts.ExplicitAll {
ctx.WriteKeyWord("ALL ")
}
if n.SelectStmtOpts.StraightJoin {
ctx.WriteKeyWord("STRAIGHT_JOIN ")
}
if n.Fields != nil {
for i, field := range n.Fields.Fields {
if i != 0 {
ctx.WritePlain(",")
}
if ctx.Flags.HasRestoreForNonPrepPlanCache() && len(field.OriginalText()) > 0 {
ctx.WritePlain(field.OriginalText())
} else {
if err := field.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore SelectStmt.Fields[%d]", i)
}
}
}
}
if n.From != nil {
ctx.WriteKeyWord(" FROM ")
if ctx.Flags.HasRestoreForNonPrepPlanCache() && len(n.From.OriginalText()) > 0 {
ctx.WritePlain(n.From.OriginalText())
} else {
if err := n.From.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore SelectStmt.From")
}
}
}
if n.From == nil && n.Where != nil {
ctx.WriteKeyWord(" FROM DUAL")
}
if n.Where != nil {
ctx.WriteKeyWord(" WHERE ")
if err := n.Where.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore SelectStmt.Where")
}
}
if n.GroupBy != nil {
ctx.WritePlain(" ")
if err := n.GroupBy.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore SelectStmt.GroupBy")
}
}
if n.Having != nil {
ctx.WritePlain(" ")
if err := n.Having.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore SelectStmt.Having")
}
}
if n.WindowSpecs != nil {
ctx.WriteKeyWord(" WINDOW ")
for i, windowsSpec := range n.WindowSpecs {
if i != 0 {
ctx.WritePlain(",")
}
if err := windowsSpec.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore SelectStmt.WindowSpec[%d]", i)
}
}
}
case SelectStmtKindTable:
if err := n.From.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore SelectStmt.From")
}
case SelectStmtKindValues:
for i, v := range n.Lists {
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore SelectStmt.Lists[%d]", i)
}
if i != len(n.Lists)-1 {
ctx.WritePlain(", ")
}
}
}
if n.OrderBy != nil {
ctx.WritePlain(" ")
if err := n.OrderBy.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore SelectStmt.OrderBy")
}
}
if n.Limit != nil {
ctx.WritePlain(" ")
if err := n.Limit.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore SelectStmt.Limit")
}
}
if n.LockInfo != nil {
ctx.WritePlain(" ")
switch n.LockInfo.LockType {
case SelectLockNone:
case SelectLockForUpdateNoWait:
ctx.WriteKeyWord("for update")
if len(n.LockInfo.Tables) != 0 {
ctx.WriteKeyWord(" OF ")
restoreTables(ctx, n.LockInfo.Tables)
}
ctx.WriteKeyWord(" nowait")
case SelectLockForUpdateWaitN:
ctx.WriteKeyWord("for update")
if len(n.LockInfo.Tables) != 0 {
ctx.WriteKeyWord(" OF ")
restoreTables(ctx, n.LockInfo.Tables)
}
ctx.WriteKeyWord(" wait")
ctx.WritePlainf(" %d", n.LockInfo.WaitSec)
case SelectLockForShareNoWait:
ctx.WriteKeyWord("for share")
if len(n.LockInfo.Tables) != 0 {
ctx.WriteKeyWord(" OF ")
restoreTables(ctx, n.LockInfo.Tables)
}
ctx.WriteKeyWord(" nowait")
case SelectLockForUpdateSkipLocked:
ctx.WriteKeyWord("for update")
if len(n.LockInfo.Tables) != 0 {
ctx.WriteKeyWord(" OF ")
restoreTables(ctx, n.LockInfo.Tables)
}
ctx.WriteKeyWord(" skip locked")
case SelectLockForShareSkipLocked:
ctx.WriteKeyWord("for share")
if len(n.LockInfo.Tables) != 0 {
ctx.WriteKeyWord(" OF ")
restoreTables(ctx, n.LockInfo.Tables)
}
ctx.WriteKeyWord(" skip locked")
default:
ctx.WriteKeyWord(n.LockInfo.LockType.String())
if len(n.LockInfo.Tables) != 0 {
ctx.WriteKeyWord(" OF ")
restoreTables(ctx, n.LockInfo.Tables)
}
}
}
if n.SelectIntoOpt != nil {
ctx.WritePlain(" ")
if err := n.SelectIntoOpt.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore SelectStmt.SelectIntoOpt")
}
}
return nil
}
func restoreTables(ctx *format.RestoreCtx, ts []*TableName) error {
for i, v := range ts {
if err := v.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore SelectStmt.LockInfo")
}
if i != len(ts)-1 {
ctx.WritePlain(", ")
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *SelectStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*SelectStmt)
if n.With != nil {
node, ok := n.With.Accept(v)
if !ok {
return n, false
}
n.With = node.(*WithClause)
}
if len(n.TableHints) != 0 {
newHints := make([]*TableOptimizerHint, len(n.TableHints))
for i, hint := range n.TableHints {
node, ok := hint.Accept(v)
if !ok {
return n, false
}
newHints[i] = node.(*TableOptimizerHint)
}
n.TableHints = newHints
}
if n.Fields != nil {
node, ok := n.Fields.Accept(v)
if !ok {
return n, false
}
n.Fields = node.(*FieldList)
}
if n.From != nil {
node, ok := n.From.Accept(v)
if !ok {
return n, false
}
n.From = node.(*TableRefsClause)
}
if n.Where != nil {
node, ok := n.Where.Accept(v)
if !ok {
return n, false
}
n.Where = node.(ExprNode)
}
if n.GroupBy != nil {
node, ok := n.GroupBy.Accept(v)
if !ok {
return n, false
}
n.GroupBy = node.(*GroupByClause)
}
if n.Having != nil {
node, ok := n.Having.Accept(v)
if !ok {
return n, false
}
n.Having = node.(*HavingClause)
}
for i, list := range n.Lists {
node, ok := list.Accept(v)
if !ok {
return n, false
}
n.Lists[i] = node.(*RowExpr)
}
for i, spec := range n.WindowSpecs {
node, ok := spec.Accept(v)
if !ok {
return n, false
}
n.WindowSpecs[i] = *node.(*WindowSpec)
}
if n.OrderBy != nil {
node, ok := n.OrderBy.Accept(v)
if !ok {
return n, false
}
n.OrderBy = node.(*OrderByClause)
}
if n.Limit != nil {
node, ok := n.Limit.Accept(v)
if !ok {
return n, false
}
n.Limit = node.(*Limit)
}
if n.LockInfo != nil {
for i, t := range n.LockInfo.Tables {
node, ok := t.Accept(v)
if !ok {
return n, false
}
n.LockInfo.Tables[i] = node.(*TableName)
}
}
return v.Leave(n)
}
// SetOprSelectList represents the SelectStmt/TableStmt/ValuesStmt list in a union statement.
type SetOprSelectList struct {
node
With *WithClause
AfterSetOperator *SetOprType
Selects []Node
Limit *Limit
OrderBy *OrderByClause
}
// Restore implements Node interface.
func (n *SetOprSelectList) Restore(ctx *format.RestoreCtx) error {
if n.With != nil {
defer ctx.RestoreCTEFunc()() //nolint: all_revive
if err := n.With.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore SetOprSelectList.With")
}
}
for i, stmt := range n.Selects {
switch selectStmt := stmt.(type) {
case *SelectStmt:
if i != 0 {
ctx.WriteKeyWord(" " + selectStmt.AfterSetOperator.String() + " ")
}
if err := selectStmt.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore SetOprSelectList.SelectStmt")
}
case *SetOprSelectList:
if i != 0 {
ctx.WriteKeyWord(" " + selectStmt.AfterSetOperator.String() + " ")
}
ctx.WritePlain("(")
err := selectStmt.Restore(ctx)
if err != nil {
return err
}
ctx.WritePlain(")")
}
}
if n.OrderBy != nil {
ctx.WritePlain(" ")
if err := n.OrderBy.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore SetOprSelectList.OrderBy")
}
}
if n.Limit != nil {
ctx.WritePlain(" ")
if err := n.Limit.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore SetOprSelectList.Limit")
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *SetOprSelectList) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*SetOprSelectList)
if n.With != nil {
node, ok := n.With.Accept(v)
if !ok {
return n, false
}
n.With = node.(*WithClause)
}
for i, sel := range n.Selects {
node, ok := sel.Accept(v)
if !ok {
return n, false
}
n.Selects[i] = node
}
if n.OrderBy != nil {
node, ok := n.OrderBy.Accept(v)
if !ok {
return n, false
}
n.OrderBy = node.(*OrderByClause)
}
if n.Limit != nil {
node, ok := n.Limit.Accept(v)
if !ok {
return n, false
}
n.Limit = node.(*Limit)
}
return v.Leave(n)
}
type SetOprType uint8
const (
Union SetOprType = iota
UnionAll
Except
ExceptAll
Intersect
IntersectAll
)
func (s *SetOprType) String() string {
switch *s {
case Union:
return "UNION"
case UnionAll:
return "UNION ALL"
case Except:
return "EXCEPT"
case ExceptAll:
return "EXCEPT ALL"
case Intersect:
return "INTERSECT"
case IntersectAll:
return "INTERSECT ALL"
}
return ""
}
// SetOprStmt represents "union/except/intersect statement"
// See https://dev.mysql.com/doc/refman/5.7/en/union.html
// See https://mariadb.com/kb/en/intersect/
// See https://mariadb.com/kb/en/except/
type SetOprStmt struct {
dmlNode
IsInBraces bool
SelectList *SetOprSelectList
OrderBy *OrderByClause
Limit *Limit
With *WithClause
}
func (*SetOprStmt) resultSet() {}
// Restore implements Node interface.
func (n *SetOprStmt) Restore(ctx *format.RestoreCtx) error {
if n.With != nil {
defer ctx.RestoreCTEFunc()() //nolint: all_revive
if err := n.With.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore SetOprStmt.With")
}
}
if n.IsInBraces {
ctx.WritePlain("(")
defer func() {
ctx.WritePlain(")")
}()
}
if err := n.SelectList.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore SetOprStmt.SelectList")
}
if n.OrderBy != nil {
ctx.WritePlain(" ")
if err := n.OrderBy.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore SetOprStmt.OrderBy")
}
}
if n.Limit != nil {
ctx.WritePlain(" ")
if err := n.Limit.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore SetOprStmt.Limit")
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *SetOprStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
if n.With != nil {
node, ok := n.With.Accept(v)
if !ok {
return n, false
}
n.With = node.(*WithClause)
}
if n.SelectList != nil {
node, ok := n.SelectList.Accept(v)
if !ok {
return n, false
}
n.SelectList = node.(*SetOprSelectList)
}
if n.OrderBy != nil {
node, ok := n.OrderBy.Accept(v)
if !ok {
return n, false
}
n.OrderBy = node.(*OrderByClause)
}
if n.Limit != nil {
node, ok := n.Limit.Accept(v)
if !ok {
return n, false
}
n.Limit = node.(*Limit)
}
return v.Leave(n)
}
// Assignment is the expression for assignment, like a = 1.
type Assignment struct {
node
// Column is the column name to be assigned.
Column *ColumnName
// Expr is the expression assigning to ColName.
Expr ExprNode
}
// Restore implements Node interface.
func (n *Assignment) Restore(ctx *format.RestoreCtx) error {
if err := n.Column.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore Assignment.Column")
}
ctx.WritePlain("=")
if err := n.Expr.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore Assignment.Expr")
}
return nil
}
// Accept implements Node Accept interface.
func (n *Assignment) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*Assignment)
node, ok := n.Column.Accept(v)
if !ok {
return n, false
}
n.Column = node.(*ColumnName)
node, ok = n.Expr.Accept(v)
if !ok {
return n, false
}
n.Expr = node.(ExprNode)
return v.Leave(n)
}
type ColumnNameOrUserVar struct {
node
ColumnName *ColumnName
UserVar *VariableExpr
}
func (n *ColumnNameOrUserVar) Restore(ctx *format.RestoreCtx) error {
if n.ColumnName != nil {
if err := n.ColumnName.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ColumnNameOrUserVar.ColumnName")
}
}
if n.UserVar != nil {
if err := n.UserVar.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ColumnNameOrUserVar.UserVar")
}
}
return nil
}
func (n *ColumnNameOrUserVar) Accept(v Visitor) (node Node, ok bool) {
newNode, skipChild := v.Enter(n)
if skipChild {
return v.Leave(newNode)
}
n = newNode.(*ColumnNameOrUserVar)
if n.ColumnName != nil {
node, ok = n.ColumnName.Accept(v)
if !ok {
return node, false
}
n.ColumnName = node.(*ColumnName)
}
if n.UserVar != nil {
node, ok = n.UserVar.Accept(v)
if !ok {
return node, false
}
n.UserVar = node.(*VariableExpr)
}
return v.Leave(n)
}
type FileLocRefTp int
const (
// FileLocServerOrRemote is used when there's no keywords in SQL, which means the data file should be located on the
// tidb-server or on remote storage (S3 for example).
FileLocServerOrRemote FileLocRefTp = iota
// FileLocClient is used when there's LOCAL keyword in SQL, which means the data file should be located on the MySQL
// client.
FileLocClient
)
// LoadDataStmt is a statement to load data from a specified file, then insert this rows into an existing table.
// See https://dev.mysql.com/doc/refman/5.7/en/load-data.html
// in TiDB we extend the syntax to use LOAD DATA as a more general way to import data, see
// https://github.com/pingcap/tidb/issues/40499
type LoadDataStmt struct {
dmlNode
LowPriority bool
FileLocRef FileLocRefTp
Path string
Format *string
OnDuplicate OnDuplicateKeyHandlingType
Table *TableName
Charset *string
Columns []*ColumnName
FieldsInfo *FieldsClause
LinesInfo *LinesClause
IgnoreLines *uint64
ColumnAssignments []*Assignment
Options []*LoadDataOpt
ColumnsAndUserVars []*ColumnNameOrUserVar
}
// Restore implements Node interface.
func (n *LoadDataStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("LOAD DATA ")
if n.LowPriority {
ctx.WriteKeyWord("LOW_PRIORITY ")
}
switch n.FileLocRef {
case FileLocServerOrRemote:
case FileLocClient:
ctx.WriteKeyWord("LOCAL ")
}
ctx.WriteKeyWord("INFILE ")
ctx.WriteString(n.Path)
if n.Format != nil {
ctx.WriteKeyWord(" FORMAT ")
ctx.WriteString(*n.Format)
}
if n.OnDuplicate == OnDuplicateKeyHandlingReplace {
ctx.WriteKeyWord(" REPLACE")
} else if n.OnDuplicate == OnDuplicateKeyHandlingIgnore {
ctx.WriteKeyWord(" IGNORE")
}
ctx.WriteKeyWord(" INTO TABLE ")
if err := n.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore LoadDataStmt.Table")
}
if n.Charset != nil {
ctx.WriteKeyWord(" CHARACTER SET ")
ctx.WritePlain(*n.Charset)
}
if n.FieldsInfo != nil {
n.FieldsInfo.Restore(ctx)
}
if n.LinesInfo != nil {
n.LinesInfo.Restore(ctx)
}
if n.IgnoreLines != nil {
ctx.WriteKeyWord(" IGNORE ")
ctx.WritePlainf("%d", *n.IgnoreLines)
ctx.WriteKeyWord(" LINES")
}
if len(n.ColumnsAndUserVars) != 0 {
ctx.WritePlain(" (")
for i, c := range n.ColumnsAndUserVars {
if i != 0 {
ctx.WritePlain(",")
}
if err := c.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore LoadDataStmt.ColumnsAndUserVars")
}
}
ctx.WritePlain(")")
}
if n.ColumnAssignments != nil {
ctx.WriteKeyWord(" SET")
for i, assign := range n.ColumnAssignments {
if i != 0 {
ctx.WritePlain(",")
}
ctx.WritePlain(" ")
if err := assign.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore LoadDataStmt.ColumnAssignments")
}
}
}
if len(n.Options) > 0 {
ctx.WriteKeyWord(" WITH")
for i, option := range n.Options {
if i != 0 {
ctx.WritePlain(",")
}
ctx.WritePlain(" ")
if err := option.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore LoadDataStmt.Options")
}
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *LoadDataStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*LoadDataStmt)
if n.Table != nil {
node, ok := n.Table.Accept(v)
if !ok {
return n, false
}
n.Table = node.(*TableName)
}
for i, val := range n.Columns {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.Columns[i] = node.(*ColumnName)
}
for i, assignment := range n.ColumnAssignments {
node, ok := assignment.Accept(v)
if !ok {
return n, false
}
n.ColumnAssignments[i] = node.(*Assignment)
}
for i, cuVars := range n.ColumnsAndUserVars {
node, ok := cuVars.Accept(v)
if !ok {
return n, false
}
n.ColumnsAndUserVars[i] = node.(*ColumnNameOrUserVar)
}
return v.Leave(n)
}
type LoadDataOpt struct {
// Name is the name of the option, will be converted to lower case during parse.
Name string
// only literal is allowed, we use ExprNode to support negative number
Value ExprNode
}
func (l *LoadDataOpt) Restore(ctx *format.RestoreCtx) error {
if l.Value == nil {
ctx.WritePlain(l.Name)
} else {
ctx.WritePlain(l.Name + "=")
if err := l.Value.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore LoadDataOpt")
}
}
return nil
}
const (
Terminated = iota
Enclosed
Escaped
DefinedNullBy
)
type FieldItem struct {
Type int
Value string
OptEnclosed bool
}
// FieldsClause represents fields references clause in load data statement.
type FieldsClause struct {
Terminated *string
Enclosed *string // length always <= 1 if not nil, see parser.y
Escaped *string // length always <= 1 if not nil, see parser.y
OptEnclosed bool
DefinedNullBy *string
NullValueOptEnclosed bool
}
// Restore for FieldsClause
func (n *FieldsClause) Restore(ctx *format.RestoreCtx) error {
if n.Terminated == nil && n.Enclosed == nil && n.Escaped == nil && n.DefinedNullBy == nil {
return nil
}
ctx.WriteKeyWord(" FIELDS")
if n.Terminated != nil {
ctx.WriteKeyWord(" TERMINATED BY ")
ctx.WriteString(*n.Terminated)
}
if n.Enclosed != nil {
if n.OptEnclosed {
ctx.WriteKeyWord(" OPTIONALLY")
}
ctx.WriteKeyWord(" ENCLOSED BY ")
ctx.WriteString(*n.Enclosed)
}
if n.Escaped != nil {
ctx.WriteKeyWord(" ESCAPED BY ")
ctx.WriteString(*n.Escaped)
}
if n.DefinedNullBy != nil {
ctx.WriteKeyWord(" DEFINED NULL BY ")
ctx.WriteString(*n.DefinedNullBy)
if n.NullValueOptEnclosed {
ctx.WriteKeyWord(" OPTIONALLY ENCLOSED")
}
}
return nil
}
// LinesClause represents lines references clause in load data statement.
type LinesClause struct {
Starting *string
Terminated *string
}
// Restore for LinesClause
func (n *LinesClause) Restore(ctx *format.RestoreCtx) error {
if n.Starting == nil && n.Terminated == nil {
return nil
}
ctx.WriteKeyWord(" LINES")
if n.Starting != nil {
ctx.WriteKeyWord(" STARTING BY ")
ctx.WriteString(*n.Starting)
}
if n.Terminated != nil {
ctx.WriteKeyWord(" TERMINATED BY ")
ctx.WriteString(*n.Terminated)
}
return nil
}
// ImportIntoStmt represents a IMPORT INTO statement node.
// this statement is used to import data into TiDB using lightning local mode.
// see https://github.com/pingcap/tidb/issues/42930
type ImportIntoStmt struct {
dmlNode
Table *TableName
ColumnsAndUserVars []*ColumnNameOrUserVar
ColumnAssignments []*Assignment
Path string
Format *string
Options []*LoadDataOpt
Select ResultSetNode
}
var _ SensitiveStmtNode = &ImportIntoStmt{}
// Restore implements Node interface.
func (n *ImportIntoStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("IMPORT INTO ")
if err := n.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ImportIntoStmt.Table")
}
if len(n.ColumnsAndUserVars) != 0 {
ctx.WritePlain(" (")
for i, c := range n.ColumnsAndUserVars {
if i != 0 {
ctx.WritePlain(",")
}
if err := c.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ImportIntoStmt.ColumnsAndUserVars")
}
}
ctx.WritePlain(")")
}
if n.ColumnAssignments != nil {
ctx.WriteKeyWord(" SET")
for i, assign := range n.ColumnAssignments {
if i != 0 {
ctx.WritePlain(",")
}
ctx.WritePlain(" ")
if err := assign.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ImportIntoStmt.ColumnAssignments")
}
}
}
ctx.WriteKeyWord(" FROM ")
if n.Select != nil {
if err := n.Select.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ImportIntoStmt.Select")
}
} else {
ctx.WriteString(n.Path)
if n.Format != nil {
ctx.WriteKeyWord(" FORMAT ")
ctx.WriteString(*n.Format)
}
}
if len(n.Options) > 0 {
ctx.WriteKeyWord(" WITH")
for i, option := range n.Options {
if i != 0 {
ctx.WritePlain(",")
}
ctx.WritePlain(" ")
if err := option.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore ImportIntoStmt.Options")
}
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *ImportIntoStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ImportIntoStmt)
if n.Table != nil {
node, ok := n.Table.Accept(v)
if !ok {
return n, false
}
n.Table = node.(*TableName)
}
for i, cuVars := range n.ColumnsAndUserVars {
node, ok := cuVars.Accept(v)
if !ok {
return n, false
}
n.ColumnsAndUserVars[i] = node.(*ColumnNameOrUserVar)
}
for i, assignment := range n.ColumnAssignments {
node, ok := assignment.Accept(v)
if !ok {
return n, false
}
n.ColumnAssignments[i] = node.(*Assignment)
}
if n.Select != nil {
node, ok := n.Select.Accept(v)
if !ok {
return n, false
}
n.Select = node.(ResultSetNode)
}
return v.Leave(n)
}
func (n *ImportIntoStmt) SecureText() string {
redactedStmt := *n
redactedStmt.Path = RedactURL(n.Path)
redactedStmt.Options = make([]*LoadDataOpt, 0, len(n.Options))
for _, opt := range n.Options {
outOpt := opt
ln := strings.ToLower(opt.Name)
if ln == CloudStorageURI {
redactedStr := RedactURL(opt.Value.(ValueExpr).GetString())
outOpt = &LoadDataOpt{
Name: opt.Name,
Value: NewValueExpr(redactedStr, "", ""),
}
}
redactedStmt.Options = append(redactedStmt.Options, outOpt)
}
var sb strings.Builder
_ = redactedStmt.Restore(format.NewRestoreCtx(format.DefaultRestoreFlags, &sb))
return sb.String()
}
// CallStmt represents a call procedure query node.
// See https://dev.mysql.com/doc/refman/5.7/en/call.html
type CallStmt struct {
dmlNode
Procedure *FuncCallExpr
}
// Restore implements Node interface.
func (n *CallStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("CALL ")
if err := n.Procedure.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore CallStmt.Procedure")
}
return nil
}
// Accept implements Node Accept interface.
func (n *CallStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*CallStmt)
if n.Procedure != nil {
node, ok := n.Procedure.Accept(v)
if !ok {
return n, false
}
n.Procedure = node.(*FuncCallExpr)
}
return v.Leave(n)
}
// InsertStmt is a statement to insert new rows into an existing table.
// See https://dev.mysql.com/doc/refman/5.7/en/insert.html
type InsertStmt struct {
dmlNode
IsReplace bool
IgnoreErr bool
Table *TableRefsClause
Columns []*ColumnName
Lists [][]ExprNode
Setlist bool
Priority mysql.PriorityEnum
OnDuplicate []*Assignment
Select ResultSetNode
// TableHints represents the table level Optimizer Hint for join type.
TableHints []*TableOptimizerHint
PartitionNames []CIStr
// Returning represents the RETURNING select_expr list for INSERT statement.
Returning []*SelectField
}
// Restore implements Node interface.
func (n *InsertStmt) Restore(ctx *format.RestoreCtx) error {
if n.IsReplace {
ctx.WriteKeyWord("REPLACE ")
} else {
ctx.WriteKeyWord("INSERT ")
}
if len(n.TableHints) != 0 {
ctx.WritePlain("/*+ ")
for i, tableHint := range n.TableHints {
if i != 0 {
ctx.WritePlain(" ")
}
if err := tableHint.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore InsertStmt.TableHints[%d]", i)
}
}
ctx.WritePlain("*/ ")
}
if err := n.Priority.Restore(ctx); err != nil {
return errors.Trace(err)
}
if n.Priority != mysql.NoPriority {
ctx.WritePlain(" ")
}
if n.IgnoreErr {
ctx.WriteKeyWord("IGNORE ")
}
ctx.WriteKeyWord("INTO ")
if err := n.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore InsertStmt.Table")
}
if len(n.PartitionNames) != 0 {
ctx.WriteKeyWord(" PARTITION")
ctx.WritePlain("(")
for i := range n.PartitionNames {
if i != 0 {
ctx.WritePlain(", ")
}
ctx.WriteName(n.PartitionNames[i].String())
}
ctx.WritePlain(")")
}
if n.Setlist {
if len(n.Lists) != 1 {
return errors.Errorf("Expect len(InsertStmt.Lists)[%d] == 1 for SET x=y", len(n.Lists))
}
if len(n.Lists[0]) != len(n.Columns) {
return errors.Errorf("Expect len(InsertStmt.Columns)[%d] == len(InsertStmt.Lists[0])[%d] for SET x=y", len(n.Columns), len(n.Lists[0]))
}
ctx.WriteKeyWord(" SET ")
for i, v := range n.Lists[0] {
if i != 0 {
ctx.WritePlain(",")
}
v := &Assignment{
Column: n.Columns[i],
Expr: v,
}
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore InsertStmt.Set (Columns = Expr)[%d]", i)
}
}
} else {
if n.Columns != nil {
ctx.WritePlain(" (")
for i, v := range n.Columns {
if i != 0 {
ctx.WritePlain(",")
}
if ctx.Flags.HasRestoreForNonPrepPlanCache() && len(v.OriginalText()) > 0 {
ctx.WritePlain(v.OriginalText())
} else {
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore InsertStmt.Columns[%d]", i)
}
}
}
ctx.WritePlain(")")
}
if n.Lists != nil {
ctx.WriteKeyWord(" VALUES ")
for i, row := range n.Lists {
if i != 0 {
ctx.WritePlain(",")
}
ctx.WritePlain("(")
for j, v := range row {
if j != 0 {
ctx.WritePlain(",")
}
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore InsertStmt.Lists[%d][%d]", i, j)
}
}
ctx.WritePlain(")")
}
}
}
if n.Select != nil {
ctx.WritePlain(" ")
switch v := n.Select.(type) {
case *SelectStmt, *SetOprStmt:
if err := v.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore InsertStmt.Select")
}
default:
return errors.Errorf("Incorrect type for InsertStmt.Select: %T", v)
}
}
if n.OnDuplicate != nil {
ctx.WriteKeyWord(" ON DUPLICATE KEY UPDATE ")
for i, v := range n.OnDuplicate {
if i != 0 {
ctx.WritePlain(",")
}
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore InsertStmt.OnDuplicate[%d]", i)
}
}
}
if len(n.Returning) > 0 {
ctx.WriteKeyWord(" RETURNING ")
if err := restoreReturningFields(ctx, n.Returning); err != nil {
return errors.Annotate(err, "An error occurred while restore InsertStmt.Returning")
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *InsertStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*InsertStmt)
if n.Select != nil {
node, ok := n.Select.Accept(v)
if !ok {
return n, false
}
n.Select = node.(ResultSetNode)
}
node, ok := n.Table.Accept(v)
if !ok {
return n, false
}
n.Table = node.(*TableRefsClause)
for i, val := range n.Columns {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.Columns[i] = node.(*ColumnName)
}
for i, list := range n.Lists {
for j, val := range list {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.Lists[i][j] = node.(ExprNode)
}
}
for i, val := range n.OnDuplicate {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.OnDuplicate[i] = node.(*Assignment)
}
for i, field := range n.Returning {
node, ok := field.Accept(v)
if !ok {
return n, false
}
n.Returning[i] = node.(*SelectField)
}
return v.Leave(n)
}
// WhereExpr implements ShardableDMLStmt interface.
func (n *InsertStmt) WhereExpr() ExprNode {
if n.Select == nil {
return nil
}
s, ok := n.Select.(*SelectStmt)
if !ok {
return nil
}
return s.Where
}
// SetWhereExpr implements ShardableDMLStmt interface.
func (n *InsertStmt) SetWhereExpr(e ExprNode) {
if n.Select == nil {
return
}
s, ok := n.Select.(*SelectStmt)
if !ok {
return
}
s.Where = e
}
// TableRefsJoin implements ShardableDMLStmt interface.
func (n *InsertStmt) TableRefsJoin() (*Join, bool) {
if n.Select == nil {
return nil, false
}
s, ok := n.Select.(*SelectStmt)
if !ok {
return nil, false
}
return s.From.TableRefs, true
}
// DeleteStmt is a statement to delete rows from table.
// See https://dev.mysql.com/doc/refman/5.7/en/delete.html
type DeleteStmt struct {
dmlNode
// TableRefs is used in both single table and multiple table delete statement.
TableRefs *TableRefsClause
// Tables is only used in multiple table delete statement.
Tables *DeleteTableList
Where ExprNode
Order *OrderByClause
Limit *Limit
Priority mysql.PriorityEnum
IgnoreErr bool
Quick bool
IsMultiTable bool
BeforeFrom bool
// TableHints represents the table level Optimizer Hint for join type.
TableHints []*TableOptimizerHint
With *WithClause
// Returning represents the RETURNING select_expr list for DELETE statement.
Returning []*SelectField
}
// Restore implements Node interface.
func (n *DeleteStmt) Restore(ctx *format.RestoreCtx) error {
if n.With != nil {
defer ctx.RestoreCTEFunc()() //nolint: all_revive
err := n.With.Restore(ctx)
if err != nil {
return err
}
}
ctx.WriteKeyWord("DELETE ")
if len(n.TableHints) != 0 {
ctx.WritePlain("/*+ ")
for i, tableHint := range n.TableHints {
if i != 0 {
ctx.WritePlain(" ")
}
if err := tableHint.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore UpdateStmt.TableHints[%d]", i)
}
}
ctx.WritePlain("*/ ")
}
if err := n.Priority.Restore(ctx); err != nil {
return errors.Trace(err)
}
if n.Priority != mysql.NoPriority {
ctx.WritePlain(" ")
}
if n.Quick {
ctx.WriteKeyWord("QUICK ")
}
if n.IgnoreErr {
ctx.WriteKeyWord("IGNORE ")
}
if n.IsMultiTable { // Multiple-Table Syntax
if n.BeforeFrom {
if err := n.Tables.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore DeleteStmt.Tables")
}
ctx.WriteKeyWord(" FROM ")
if err := n.TableRefs.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore DeleteStmt.TableRefs")
}
} else {
ctx.WriteKeyWord("FROM ")
if err := n.Tables.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore DeleteStmt.Tables")
}
ctx.WriteKeyWord(" USING ")
if err := n.TableRefs.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore DeleteStmt.TableRefs")
}
}
} else { // Single-Table Syntax
ctx.WriteKeyWord("FROM ")
if err := n.TableRefs.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore DeleteStmt.TableRefs")
}
}
if n.Where != nil {
ctx.WriteKeyWord(" WHERE ")
if err := n.Where.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore DeleteStmt.Where")
}
}
if n.Order != nil {
ctx.WritePlain(" ")
if err := n.Order.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore DeleteStmt.Order")
}
}
if n.Limit != nil {
ctx.WritePlain(" ")
if err := n.Limit.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore DeleteStmt.Limit")
}
}
if len(n.Returning) > 0 {
ctx.WriteKeyWord(" RETURNING ")
if err := restoreReturningFields(ctx, n.Returning); err != nil {
return errors.Annotate(err, "An error occurred while restore DeleteStmt.Returning")
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *DeleteStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*DeleteStmt)
if n.With != nil {
node, ok := n.With.Accept(v)
if !ok {
return n, false
}
n.With = node.(*WithClause)
}
node, ok := n.TableRefs.Accept(v)
if !ok {
return n, false
}
n.TableRefs = node.(*TableRefsClause)
if n.Tables != nil {
node, ok = n.Tables.Accept(v)
if !ok {
return n, false
}
n.Tables = node.(*DeleteTableList)
}
if n.Where != nil {
node, ok = n.Where.Accept(v)
if !ok {
return n, false
}
n.Where = node.(ExprNode)
}
if n.Order != nil {
node, ok = n.Order.Accept(v)
if !ok {
return n, false
}
n.Order = node.(*OrderByClause)
}
if n.Limit != nil {
node, ok = n.Limit.Accept(v)
if !ok {
return n, false
}
n.Limit = node.(*Limit)
}
for i, field := range n.Returning {
node, ok = field.Accept(v)
if !ok {
return n, false
}
n.Returning[i] = node.(*SelectField)
}
return v.Leave(n)
}
// WhereExpr implements ShardableDMLStmt interface.
func (n *DeleteStmt) WhereExpr() ExprNode {
return n.Where
}
// SetWhereExpr implements ShardableDMLStmt interface.
func (n *DeleteStmt) SetWhereExpr(e ExprNode) {
n.Where = e
}
// TableRefsJoin implements ShardableDMLStmt interface.
func (n *DeleteStmt) TableRefsJoin() (*Join, bool) {
return n.TableRefs.TableRefs, true
}
const (
NoDryRun = iota
DryRunQuery
DryRunSplitDml
)
type ShardableDMLStmt = interface {
StmtNode
WhereExpr() ExprNode
SetWhereExpr(ExprNode)
// TableRefsJoin returns the table refs in the statement.
TableRefsJoin() (refs *Join, ok bool)
}
var _ ShardableDMLStmt = &DeleteStmt{}
var _ ShardableDMLStmt = &UpdateStmt{}
var _ ShardableDMLStmt = &InsertStmt{}
type NonTransactionalDMLStmt struct {
dmlNode
DryRun int // 0: no dry run, 1: dry run the query, 2: dry run split DMLs
ShardColumn *ColumnName // if it's nil, the handle column is automatically chosen for it
Limit uint64
DMLStmt ShardableDMLStmt
}
// Restore implements Node interface.
func (n *NonTransactionalDMLStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("BATCH ")
if n.ShardColumn != nil {
ctx.WriteKeyWord("ON ")
if err := n.ShardColumn.Restore(ctx); err != nil {
return errors.Trace(err)
}
ctx.WritePlain(" ")
}
ctx.WriteKeyWord("LIMIT ")
ctx.WritePlainf("%d ", n.Limit)
if n.DryRun == DryRunSplitDml {
ctx.WriteKeyWord("DRY RUN ")
}
if n.DryRun == DryRunQuery {
ctx.WriteKeyWord("DRY RUN QUERY ")
}
if err := n.DMLStmt.Restore(ctx); err != nil {
return errors.Trace(err)
}
return nil
}
// Accept implements Node Accept interface.
func (n *NonTransactionalDMLStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*NonTransactionalDMLStmt)
if n.ShardColumn != nil {
node, ok := n.ShardColumn.Accept(v)
if !ok {
return n, false
}
n.ShardColumn = node.(*ColumnName)
}
if n.DMLStmt != nil {
node, ok := n.DMLStmt.Accept(v)
if !ok {
return n, false
}
n.DMLStmt = node.(ShardableDMLStmt)
}
return v.Leave(n)
}
// UpdateStmt is a statement to update columns of existing rows in tables with new values.
// See https://dev.mysql.com/doc/refman/5.7/en/update.html
type UpdateStmt struct {
dmlNode
TableRefs *TableRefsClause
List []*Assignment
Where ExprNode
Order *OrderByClause
Limit *Limit
Priority mysql.PriorityEnum
IgnoreErr bool
MultipleTable bool
TableHints []*TableOptimizerHint
With *WithClause
// Returning represents the RETURNING select_expr list for UPDATE statement.
Returning []*SelectField
}
// Restore implements Node interface.
func (n *UpdateStmt) Restore(ctx *format.RestoreCtx) error {
if n.With != nil {
defer ctx.RestoreCTEFunc()() //nolint: all_revive
err := n.With.Restore(ctx)
if err != nil {
return err
}
}
ctx.WriteKeyWord("UPDATE ")
if len(n.TableHints) != 0 {
ctx.WritePlain("/*+ ")
for i, tableHint := range n.TableHints {
if i != 0 {
ctx.WritePlain(" ")
}
if err := tableHint.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore UpdateStmt.TableHints[%d]", i)
}
}
ctx.WritePlain("*/ ")
}
if err := n.Priority.Restore(ctx); err != nil {
return errors.Trace(err)
}
if n.Priority != mysql.NoPriority {
ctx.WritePlain(" ")
}
if n.IgnoreErr {
ctx.WriteKeyWord("IGNORE ")
}
if err := n.TableRefs.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occur while restore UpdateStmt.TableRefs")
}
ctx.WriteKeyWord(" SET ")
for i, assignment := range n.List {
if i != 0 {
ctx.WritePlain(", ")
}
if err := assignment.Column.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occur while restore UpdateStmt.List[%d].Column", i)
}
ctx.WritePlain("=")
if err := assignment.Expr.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occur while restore UpdateStmt.List[%d].Expr", i)
}
}
if n.Where != nil {
ctx.WriteKeyWord(" WHERE ")
if err := n.Where.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occur while restore UpdateStmt.Where")
}
}
if n.Order != nil {
ctx.WritePlain(" ")
if err := n.Order.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occur while restore UpdateStmt.Order")
}
}
if n.Limit != nil {
ctx.WritePlain(" ")
if err := n.Limit.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occur while restore UpdateStmt.Limit")
}
}
if len(n.Returning) > 0 {
ctx.WriteKeyWord(" RETURNING ")
if err := restoreReturningFields(ctx, n.Returning); err != nil {
return errors.Annotate(err, "An error occurred while restore UpdateStmt.Returning")
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *UpdateStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*UpdateStmt)
if n.With != nil {
node, ok := n.With.Accept(v)
if !ok {
return n, false
}
n.With = node.(*WithClause)
}
node, ok := n.TableRefs.Accept(v)
if !ok {
return n, false
}
n.TableRefs = node.(*TableRefsClause)
for i, val := range n.List {
node, ok = val.Accept(v)
if !ok {
return n, false
}
n.List[i] = node.(*Assignment)
}
if n.Where != nil {
node, ok = n.Where.Accept(v)
if !ok {
return n, false
}
n.Where = node.(ExprNode)
}
if n.Order != nil {
node, ok = n.Order.Accept(v)
if !ok {
return n, false
}
n.Order = node.(*OrderByClause)
}
if n.Limit != nil {
node, ok = n.Limit.Accept(v)
if !ok {
return n, false
}
n.Limit = node.(*Limit)
}
for i, field := range n.Returning {
node, ok = field.Accept(v)
if !ok {
return n, false
}
n.Returning[i] = node.(*SelectField)
}
return v.Leave(n)
}
// WhereExpr implements ShardableDMLStmt interface.
func (n *UpdateStmt) WhereExpr() ExprNode {
return n.Where
}
// SetWhereExpr implements ShardableDMLStmt interface.
func (n *UpdateStmt) SetWhereExpr(e ExprNode) {
n.Where = e
}
// TableRefsJoin implements ShardableDMLStmt interface.
func (n *UpdateStmt) TableRefsJoin() (*Join, bool) {
return n.TableRefs.TableRefs, true
}
// Limit is the limit clause.
type Limit struct {
node
Count ExprNode
Offset ExprNode
}
// Restore implements Node interface.
func (n *Limit) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("LIMIT ")
if n.Offset != nil {
if err := n.Offset.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore Limit.Offset")
}
ctx.WritePlain(",")
}
if err := n.Count.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore Limit.Count")
}
return nil
}
// Accept implements Node Accept interface.
func (n *Limit) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
if n.Count != nil {
node, ok := n.Count.Accept(v)
if !ok {
return n, false
}
n.Count = node.(ExprNode)
}
if n.Offset != nil {
node, ok := n.Offset.Accept(v)
if !ok {
return n, false
}
n.Offset = node.(ExprNode)
}
n = newNode.(*Limit)
return v.Leave(n)
}
// ShowStmtType is the type for SHOW statement.
type ShowStmtType int
// Show statement types.
const (
ShowNone = iota
ShowEngines
ShowDatabases
ShowTables
ShowTableStatus
ShowColumns
ShowWarnings
ShowCharset
ShowVariables
ShowStatus
ShowCollation
ShowCreateTable
ShowCreateView
ShowCreateUser
ShowCreateSequence
ShowCreatePlacementPolicy
ShowGrants
ShowMaskingPolicies
ShowTriggers
ShowProcedureStatus
ShowFunctionStatus
ShowIndex
ShowProcessList
ShowCreateDatabase
ShowConfig
ShowEvents
ShowStatsExtended
ShowStatsMeta
ShowStatsHistograms
ShowStatsTopN
ShowStatsBuckets
ShowStatsHealthy
ShowStatsLocked
ShowHistogramsInFlight
ShowColumnStatsUsage
ShowPlugins
ShowProfile
ShowProfiles
ShowMasterStatus
ShowPrivileges
ShowErrors
ShowBindings
ShowBindingCacheStatus
ShowOpenTables
ShowAnalyzeStatus
ShowRegions
ShowBuiltins
ShowTableNextRowId
ShowBackups
ShowRestores
ShowImports
ShowCreateImport
ShowPlacement
ShowPlacementForDatabase
ShowPlacementForTable
ShowPlacementForPartition
ShowPlacementLabels
ShowSessionStates
ShowCreateResourceGroup
ShowImportJobs
ShowImportGroups
ShowCreateProcedure
ShowBinlogStatus
ShowReplicaStatus
ShowDistributions
ShowDistributionJobs
ShowAffinity
// showTpCount is the count of all kinds of `SHOW` statements.
showTpCount
)
const (
ProfileTypeInvalid = iota
ProfileTypeCPU
ProfileTypeMemory
ProfileTypeBlockIo
ProfileTypeContextSwitch
ProfileTypePageFaults
ProfileTypeIpc
ProfileTypeSwaps
ProfileTypeSource
ProfileTypeAll
)
// ShowStmt is a statement to provide information about databases, tables, columns and so on.
// See https://dev.mysql.com/doc/refman/5.7/en/show.html
type ShowStmt struct {
dmlNode
Tp ShowStmtType // Databases/Tables/Columns/....
DBName string
Table *TableName // Used for showing columns.
// Procedure's naming method is consistent with the table name
Procedure *TableName
Partition CIStr // Used for showing partition.
Column *ColumnName // Used for `desc table column`.
IndexName CIStr
ResourceGroupName string // used for showing resource group
Flag int // Some flag parsed from sql, such as FULL.
Full bool
User *auth.UserIdentity // Used for show grants/create user.
Roles []*auth.RoleIdentity // Used for show grants .. using
IfNotExists bool // Used for `show create database if not exists`
Extended bool // Used for `show extended columns from ...`
Limit *Limit // Used for partial Show STMTs to limit Result Set row numbers.
CountWarningsOrErrors bool // Used for showing count(*) warnings | errors
// GlobalScope is used by `show variables` and `show bindings`
GlobalScope bool
Pattern *PatternLikeOrIlikeExpr
Where ExprNode
ShowProfileTypes []int // Used for `SHOW PROFILE` syntax
ShowProfileArgs *int64 // Used for `SHOW PROFILE` syntax
ShowProfileLimit *Limit // Used for `SHOW PROFILE` syntax
ShowGroupKey string // Used for `SHOW IMPORT GROUP <GROUP_KEY>` syntax
ImportJobID *int64 // Used for `SHOW IMPORT JOB <ID>` syntax
ImportJobRaw bool // Used for `SHOW RAW IMPORT JOB(S)` syntax
DistributionJobID *int64 // Used for `SHOW DISTRIBUTION JOB <ID>` syntax
}
// Restore implements Node interface.
func (n *ShowStmt) Restore(ctx *format.RestoreCtx) error {
restoreOptFull := func() {
if n.Full {
ctx.WriteKeyWord("FULL ")
}
}
restoreShowDatabaseNameOpt := func() {
if n.DBName != "" {
// FROM OR IN
ctx.WriteKeyWord(" IN ")
ctx.WriteName(n.DBName)
}
}
restoreGlobalScope := func() {
if n.GlobalScope {
ctx.WriteKeyWord("GLOBAL ")
} else {
ctx.WriteKeyWord("SESSION ")
}
}
restoreShowLikeOrWhereOpt := func() error {
if n.Pattern != nil && n.Pattern.Pattern != nil {
ctx.WriteKeyWord(" LIKE ")
if err := n.Pattern.Pattern.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ShowStmt.Pattern")
}
} else if n.Where != nil {
ctx.WriteKeyWord(" WHERE ")
if err := n.Where.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ShowStmt.Where")
}
}
return nil
}
ctx.WriteKeyWord("SHOW ")
switch n.Tp {
case ShowBinlogStatus:
ctx.WriteKeyWord("BINARY LOG STATUS")
case ShowCreateTable:
ctx.WriteKeyWord("CREATE TABLE ")
if err := n.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ShowStmt.Table")
}
case ShowCreateProcedure:
ctx.WriteKeyWord("CREATE PROCEDURE ")
if err := n.Procedure.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ShowStmt.Procedure")
}
case ShowCreateView:
ctx.WriteKeyWord("CREATE VIEW ")
if err := n.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ShowStmt.VIEW")
}
case ShowCreateDatabase:
ctx.WriteKeyWord("CREATE DATABASE ")
if n.IfNotExists {
ctx.WriteKeyWord("IF NOT EXISTS ")
}
ctx.WriteName(n.DBName)
case ShowCreateSequence:
ctx.WriteKeyWord("CREATE SEQUENCE ")
if err := n.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ShowStmt.SEQUENCE")
}
case ShowCreatePlacementPolicy:
ctx.WriteKeyWord("CREATE PLACEMENT POLICY ")
ctx.WriteName(n.DBName)
case ShowCreateResourceGroup:
ctx.WriteKeyWord("CREATE RESOURCE GROUP ")
ctx.WriteName(n.ResourceGroupName)
case ShowCreateUser:
ctx.WriteKeyWord("CREATE USER ")
if err := n.User.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ShowStmt.User")
}
case ShowMaskingPolicies:
ctx.WriteKeyWord("MASKING POLICIES FOR ")
if err := n.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ShowStmt.Table")
}
if n.Where != nil {
ctx.WriteKeyWord(" WHERE ")
if err := n.Where.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ShowStmt.Where")
}
}
case ShowGrants:
ctx.WriteKeyWord("GRANTS")
if n.User != nil {
ctx.WriteKeyWord(" FOR ")
if err := n.User.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ShowStmt.User")
}
}
if n.Roles != nil {
ctx.WriteKeyWord(" USING ")
for i, r := range n.Roles {
if err := r.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ShowStmt.User")
}
if i != len(n.Roles)-1 {
ctx.WritePlain(", ")
}
}
}
case ShowMasterStatus:
ctx.WriteKeyWord("MASTER STATUS")
case ShowProcessList:
restoreOptFull()
ctx.WriteKeyWord("PROCESSLIST")
case ShowStatsExtended:
ctx.WriteKeyWord("STATS_EXTENDED")
if err := restoreShowLikeOrWhereOpt(); err != nil {
return err
}
case ShowStatsMeta:
ctx.WriteKeyWord("STATS_META")
if err := restoreShowLikeOrWhereOpt(); err != nil {
return err
}
case ShowStatsLocked:
ctx.WriteKeyWord("STATS_LOCKED")
if err := restoreShowLikeOrWhereOpt(); err != nil {
return err
}
case ShowStatsHistograms:
ctx.WriteKeyWord("STATS_HISTOGRAMS")
if err := restoreShowLikeOrWhereOpt(); err != nil {
return err
}
case ShowStatsTopN:
ctx.WriteKeyWord("STATS_TOPN")
if err := restoreShowLikeOrWhereOpt(); err != nil {
return err
}
case ShowStatsBuckets:
ctx.WriteKeyWord("STATS_BUCKETS")
if err := restoreShowLikeOrWhereOpt(); err != nil {
return err
}
case ShowStatsHealthy:
ctx.WriteKeyWord("STATS_HEALTHY")
if err := restoreShowLikeOrWhereOpt(); err != nil {
return err
}
case ShowHistogramsInFlight:
ctx.WriteKeyWord("HISTOGRAMS_IN_FLIGHT")
if err := restoreShowLikeOrWhereOpt(); err != nil {
return err
}
case ShowColumnStatsUsage:
ctx.WriteKeyWord("COLUMN_STATS_USAGE")
if err := restoreShowLikeOrWhereOpt(); err != nil {
return err
}
case ShowProfiles:
ctx.WriteKeyWord("PROFILES")
case ShowProfile:
ctx.WriteKeyWord("PROFILE")
if len(n.ShowProfileTypes) > 0 {
for i, tp := range n.ShowProfileTypes {
if i != 0 {
ctx.WritePlain(",")
}
ctx.WritePlain(" ")
switch tp {
case ProfileTypeCPU:
ctx.WriteKeyWord("CPU")
case ProfileTypeMemory:
ctx.WriteKeyWord("MEMORY")
case ProfileTypeBlockIo:
ctx.WriteKeyWord("BLOCK IO")
case ProfileTypeContextSwitch:
ctx.WriteKeyWord("CONTEXT SWITCHES")
case ProfileTypeIpc:
ctx.WriteKeyWord("IPC")
case ProfileTypePageFaults:
ctx.WriteKeyWord("PAGE FAULTS")
case ProfileTypeSource:
ctx.WriteKeyWord("SOURCE")
case ProfileTypeSwaps:
ctx.WriteKeyWord("SWAPS")
case ProfileTypeAll:
ctx.WriteKeyWord("ALL")
}
}
}
if n.ShowProfileArgs != nil {
ctx.WriteKeyWord(" FOR QUERY ")
ctx.WritePlainf("%d", *n.ShowProfileArgs)
}
if n.ShowProfileLimit != nil {
ctx.WritePlain(" ")
if err := n.ShowProfileLimit.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ShowStmt.WritePlain")
}
}
case ShowPrivileges:
ctx.WriteKeyWord("PRIVILEGES")
case ShowBuiltins:
ctx.WriteKeyWord("BUILTINS")
case ShowPlacementForDatabase:
ctx.WriteKeyWord("PLACEMENT FOR DATABASE ")
ctx.WriteName(n.DBName)
case ShowPlacementForTable:
ctx.WriteKeyWord("PLACEMENT FOR TABLE ")
if err := n.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ShowStmt.Table")
}
case ShowPlacementForPartition:
ctx.WriteKeyWord("PLACEMENT FOR TABLE ")
if err := n.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ShowStmt.Table")
}
ctx.WriteKeyWord(" PARTITION ")
ctx.WriteName(n.Partition.String())
case ShowImportJobs:
if n.ImportJobRaw {
ctx.WriteKeyWord("RAW ")
}
if n.ImportJobID != nil {
ctx.WriteKeyWord("IMPORT JOB ")
ctx.WritePlainf("%d", *n.ImportJobID)
} else {
ctx.WriteKeyWord("IMPORT JOBS")
restoreShowLikeOrWhereOpt()
}
case ShowImportGroups:
if n.ShowGroupKey != "" {
ctx.WriteKeyWord("IMPORT GROUP ")
ctx.WriteString(n.ShowGroupKey)
} else {
ctx.WriteKeyWord("IMPORT GROUPS")
restoreShowLikeOrWhereOpt()
}
case ShowDistributionJobs:
if n.DistributionJobID != nil {
ctx.WriteKeyWord("DISTRIBUTION JOB ")
ctx.WritePlainf("%d", *n.DistributionJobID)
} else {
ctx.WriteKeyWord("DISTRIBUTION JOBS")
restoreShowLikeOrWhereOpt()
}
// ShowTargetFilterable
default:
switch n.Tp {
case ShowEngines:
ctx.WriteKeyWord("ENGINES")
case ShowConfig:
ctx.WriteKeyWord("CONFIG")
case ShowDatabases:
ctx.WriteKeyWord("DATABASES")
case ShowCharset:
ctx.WriteKeyWord("CHARSET")
case ShowTables:
restoreOptFull()
ctx.WriteKeyWord("TABLES")
restoreShowDatabaseNameOpt()
case ShowOpenTables:
ctx.WriteKeyWord("OPEN TABLES")
restoreShowDatabaseNameOpt()
case ShowTableStatus:
ctx.WriteKeyWord("TABLE STATUS")
restoreShowDatabaseNameOpt()
case ShowIndex:
// here can be INDEX INDEXES KEYS
// FROM or IN
ctx.WriteKeyWord("INDEX IN ")
if err := n.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ShowStmt.Table")
} // TODO: remember to check this case
case ShowColumns: // equivalent to SHOW FIELDS
if n.Extended {
ctx.WriteKeyWord("EXTENDED ")
}
restoreOptFull()
ctx.WriteKeyWord("COLUMNS")
if n.Table != nil {
// FROM or IN
ctx.WriteKeyWord(" IN ")
if err := n.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ShowStmt.Table")
}
}
restoreShowDatabaseNameOpt()
case ShowWarnings:
ctx.WriteKeyWord("WARNINGS")
case ShowErrors:
ctx.WriteKeyWord("ERRORS")
case ShowVariables:
restoreGlobalScope()
ctx.WriteKeyWord("VARIABLES")
case ShowStatus:
restoreGlobalScope()
ctx.WriteKeyWord("STATUS")
case ShowCollation:
ctx.WriteKeyWord("COLLATION")
case ShowTriggers:
ctx.WriteKeyWord("TRIGGERS")
restoreShowDatabaseNameOpt()
case ShowProcedureStatus:
ctx.WriteKeyWord("PROCEDURE STATUS")
case ShowFunctionStatus:
ctx.WriteKeyWord("FUNCTION STATUS")
case ShowEvents:
ctx.WriteKeyWord("EVENTS")
restoreShowDatabaseNameOpt()
case ShowPlugins:
ctx.WriteKeyWord("PLUGINS")
case ShowBindings:
if n.GlobalScope {
ctx.WriteKeyWord("GLOBAL ")
} else {
ctx.WriteKeyWord("SESSION ")
}
ctx.WriteKeyWord("BINDINGS")
case ShowBindingCacheStatus:
ctx.WriteKeyWord("BINDING_CACHE STATUS")
case ShowAnalyzeStatus:
ctx.WriteKeyWord("ANALYZE STATUS")
case ShowDistributions:
ctx.WriteKeyWord("TABLE ")
if err := n.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ShowStmt.Table")
}
ctx.WriteKeyWord(" DISTRIBUTIONS")
if err := restoreShowLikeOrWhereOpt(); err != nil {
return err
}
return nil
case ShowRegions:
ctx.WriteKeyWord("TABLE ")
if err := n.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ShowStmt.Table")
}
if len(n.IndexName.L) > 0 {
ctx.WriteKeyWord(" INDEX ")
ctx.WriteName(n.IndexName.String())
}
ctx.WriteKeyWord(" REGIONS")
if err := restoreShowLikeOrWhereOpt(); err != nil {
return err
}
return nil
case ShowTableNextRowId:
ctx.WriteKeyWord("TABLE ")
if err := n.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ShowStmt.Table")
}
ctx.WriteKeyWord(" NEXT_ROW_ID")
return nil
case ShowBackups:
ctx.WriteKeyWord("BACKUPS")
case ShowRestores:
ctx.WriteKeyWord("RESTORES")
case ShowImports:
ctx.WriteKeyWord("IMPORTS")
case ShowPlacement:
ctx.WriteKeyWord("PLACEMENT")
case ShowPlacementLabels:
ctx.WriteKeyWord("PLACEMENT LABELS")
case ShowSessionStates:
ctx.WriteKeyWord("SESSION_STATES")
case ShowReplicaStatus:
ctx.WriteKeyWord("REPLICA STATUS")
default:
return errors.New("Unknown ShowStmt type")
}
restoreShowLikeOrWhereOpt()
}
return nil
}
// Accept implements Node Accept interface.
func (n *ShowStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ShowStmt)
if n.Table != nil {
node, ok := n.Table.Accept(v)
if !ok {
return n, false
}
n.Table = node.(*TableName)
}
if n.Column != nil {
node, ok := n.Column.Accept(v)
if !ok {
return n, false
}
n.Column = node.(*ColumnName)
}
if n.Pattern != nil {
node, ok := n.Pattern.Accept(v)
if !ok {
return n, false
}
n.Pattern = node.(*PatternLikeOrIlikeExpr)
}
if n.Where != nil {
node, ok := n.Where.Accept(v)
if !ok {
return n, false
}
n.Where = node.(ExprNode)
}
if n.Limit != nil {
node, ok := n.Limit.Accept(v)
if !ok {
return n, false
}
n.Limit = node.(*Limit)
}
return v.Leave(n)
}
// Allow limit result set for partial SHOW cmd
func (n *ShowStmt) NeedLimitRSRow() bool {
switch n.Tp {
// Show statements need to have consistence behavior with MySQL Does
case ShowEngines, ShowDatabases, ShowTables, ShowColumns, ShowTableStatus, ShowWarnings,
ShowCharset, ShowVariables, ShowStatus, ShowCollation, ShowIndex, ShowPlugins:
return true
default:
// There are five classes of Show STMT.
// 1) The STMT Only return one row:
// ShowCreateTable, ShowCreateView, ShowCreateUser, ShowCreateDatabase, ShowMasterStatus,
//
// 2) The STMT is a MySQL syntax extend, so just keep it behavior as before:
// ShowCreateSequence, ShowCreatePlacementPolicy, ShowConfig, ShowStatsExtended,
// ShowStatsMeta, ShowStatsHistograms, ShowStatsTopN, ShowStatsBuckets, ShowStatsHealthy
// ShowHistogramsInFlight, ShowColumnStatsUsage, ShowBindings, ShowBindingCacheStatus,
// ShowPumpStatus, ShowDrainerStatus, ShowAnalyzeStatus, ShowRegions, ShowBuiltins,
// ShowTableNextRowId, ShowBackups, ShowRestores, ShowImports, ShowCreateImport, ShowPlacement
// ShowPlacementForDatabase, ShowPlacementForTable, ShowPlacementForPartition, ShowPlacementLabels
//
// 3) There is corelated statements in MySQL, but no limit result set return number also.
// ShowGrants, ShowProcessList, ShowPrivileges, ShowBuiltins, ShowTableNextRowId
//
// 4) There is corelated statements in MySQL, but it seems not recommand to use them and likely deprecte in the future.
// ShowProfile, ShowProfiles
//
// 5) Below STMTs do not implement fetch logic.
// ShowTriggers, ShowProcedureStatus, ShowEvents, ShowErrors, ShowOpenTables.
return false
}
}
// WindowSpec is the specification of a window.
type WindowSpec struct {
node
Name CIStr
// Ref is the reference window of this specification. For example, in `w2 as (w1 order by a)`,
// the definition of `w2` references `w1`.
Ref CIStr
PartitionBy *PartitionByClause
OrderBy *OrderByClause
Frame *FrameClause
// OnlyAlias will set to true of the first following case.
// To make compatible with MySQL, we need to distinguish `select func over w` from `select func over (w)`.
OnlyAlias bool
}
// Restore implements Node interface.
func (n *WindowSpec) Restore(ctx *format.RestoreCtx) error {
if name := n.Name.String(); name != "" {
ctx.WriteName(name)
if n.OnlyAlias {
return nil
}
ctx.WriteKeyWord(" AS ")
}
ctx.WritePlain("(")
sep := ""
if refName := n.Ref.String(); refName != "" {
ctx.WriteName(refName)
sep = " "
}
if n.PartitionBy != nil {
ctx.WritePlain(sep)
if err := n.PartitionBy.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore WindowSpec.PartitionBy")
}
sep = " "
}
if n.OrderBy != nil {
ctx.WritePlain(sep)
if err := n.OrderBy.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore WindowSpec.OrderBy")
}
sep = " "
}
if n.Frame != nil {
ctx.WritePlain(sep)
if err := n.Frame.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore WindowSpec.Frame")
}
}
ctx.WritePlain(")")
return nil
}
// Accept implements Node Accept interface.
func (n *WindowSpec) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*WindowSpec)
if n.PartitionBy != nil {
node, ok := n.PartitionBy.Accept(v)
if !ok {
return n, false
}
n.PartitionBy = node.(*PartitionByClause)
}
if n.OrderBy != nil {
node, ok := n.OrderBy.Accept(v)
if !ok {
return n, false
}
n.OrderBy = node.(*OrderByClause)
}
if n.Frame != nil {
node, ok := n.Frame.Accept(v)
if !ok {
return n, false
}
n.Frame = node.(*FrameClause)
}
return v.Leave(n)
}
type SelectIntoType int
const (
SelectIntoOutfile SelectIntoType = iota + 1
SelectIntoDumpfile
SelectIntoVars
)
type SelectIntoOption struct {
node
Tp SelectIntoType
FileName string
FieldsInfo *FieldsClause
LinesInfo *LinesClause
}
// Restore implements Node interface.
func (n *SelectIntoOption) Restore(ctx *format.RestoreCtx) error {
if n.Tp != SelectIntoOutfile {
// only support SELECT/TABLE/VALUES ... INTO OUTFILE statement now
return errors.New("Unsupported SelectionInto type")
}
ctx.WriteKeyWord("INTO OUTFILE ")
ctx.WriteString(n.FileName)
if n.FieldsInfo != nil {
if err := n.FieldsInfo.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore SelectInto.FieldsInfo")
}
}
if n.LinesInfo != nil {
if err := n.LinesInfo.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore SelectInto.LinesInfo")
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *SelectIntoOption) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
return v.Leave(n)
}
// PartitionByClause represents partition by clause.
type PartitionByClause struct {
node
Items []*ByItem
}
// Restore implements Node interface.
func (n *PartitionByClause) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("PARTITION BY ")
for i, v := range n.Items {
if i != 0 {
ctx.WritePlain(", ")
}
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore PartitionByClause.Items[%d]", i)
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *PartitionByClause) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*PartitionByClause)
for i, val := range n.Items {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.Items[i] = node.(*ByItem)
}
return v.Leave(n)
}
// FrameType is the type of window function frame.
type FrameType int
// Window function frame types.
// MySQL only supports `ROWS` and `RANGES`.
const (
Rows = iota
Ranges
Groups
)
// FrameClause represents frame clause.
type FrameClause struct {
node
Type FrameType
Extent FrameExtent
}
// Restore implements Node interface.
func (n *FrameClause) Restore(ctx *format.RestoreCtx) error {
switch n.Type {
case Rows:
ctx.WriteKeyWord("ROWS")
case Ranges:
ctx.WriteKeyWord("RANGE")
default:
return errors.New("Unsupported window function frame type")
}
ctx.WriteKeyWord(" BETWEEN ")
if err := n.Extent.Start.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore FrameClause.Extent.Start")
}
ctx.WriteKeyWord(" AND ")
if err := n.Extent.End.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore FrameClause.Extent.End")
}
return nil
}
// Accept implements Node Accept interface.
func (n *FrameClause) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*FrameClause)
node, ok := n.Extent.Start.Accept(v)
if !ok {
return n, false
}
n.Extent.Start = *node.(*FrameBound)
node, ok = n.Extent.End.Accept(v)
if !ok {
return n, false
}
n.Extent.End = *node.(*FrameBound)
return v.Leave(n)
}
// FrameExtent represents frame extent.
type FrameExtent struct {
Start FrameBound
End FrameBound
}
// FrameType is the type of window function frame bound.
type BoundType int
// Frame bound types.
const (
Following = iota
Preceding
CurrentRow
)
// FrameBound represents frame bound.
type FrameBound struct {
node
Type BoundType
UnBounded bool
Expr ExprNode
// `Unit` is used to indicate the units in which the `Expr` should be interpreted.
// For example: '2:30' MINUTE_SECOND.
Unit TimeUnitType
}
// Restore implements Node interface.
func (n *FrameBound) Restore(ctx *format.RestoreCtx) error {
if n.UnBounded {
ctx.WriteKeyWord("UNBOUNDED")
}
switch n.Type {
case CurrentRow:
ctx.WriteKeyWord("CURRENT ROW")
case Preceding, Following:
if n.Unit != TimeUnitInvalid {
ctx.WriteKeyWord("INTERVAL ")
}
if n.Expr != nil {
if err := n.Expr.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore FrameBound.Expr")
}
}
if n.Unit != TimeUnitInvalid {
ctx.WritePlain(" ")
ctx.WriteKeyWord(n.Unit.String())
}
if n.Type == Preceding {
ctx.WriteKeyWord(" PRECEDING")
} else {
ctx.WriteKeyWord(" FOLLOWING")
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *FrameBound) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*FrameBound)
if n.Expr != nil {
node, ok := n.Expr.Accept(v)
if !ok {
return n, false
}
n.Expr = node.(ExprNode)
}
return v.Leave(n)
}
type DistributeTableStmt struct {
dmlNode
Table *TableName
PartitionNames []CIStr
Rule string
Engine string
Timeout string
}
// Restore implements Node interface.
func (n *DistributeTableStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("DISTRIBUTE ")
ctx.WriteKeyWord("TABLE ")
if err := n.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore SplitIndexRegionStmt.Table")
}
if len(n.PartitionNames) > 0 {
ctx.WriteKeyWord(" PARTITION")
ctx.WritePlain("(")
for i, v := range n.PartitionNames {
if i != 0 {
ctx.WritePlain(", ")
}
ctx.WriteName(v.String())
}
ctx.WritePlain(")")
}
if len(n.Rule) > 0 {
ctx.WriteKeyWord(" RULE = ")
ctx.WriteString(n.Rule)
}
if len(n.Engine) > 0 {
ctx.WriteKeyWord(" ENGINE = ")
ctx.WriteString(n.Engine)
}
if len(n.Timeout) > 0 {
ctx.WriteKeyWord(" TIMEOUT = ")
ctx.WriteString(n.Timeout)
}
return nil
}
// Accept implements Node Accept interface.
func (n *DistributeTableStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*DistributeTableStmt)
node, ok := n.Table.Accept(v)
if !ok {
return n, false
}
n.Table = node.(*TableName)
return v.Leave(n)
}
type SplitRegionStmt struct {
dmlNode
Table *TableName
IndexName CIStr
PartitionNames []CIStr
SplitSyntaxOpt *SplitSyntaxOption
SplitOpt *SplitOption
}
type SplitIndexOption struct {
stmtNode
TableLevel bool
PrimaryKey bool
IndexName CIStr
SplitOpt *SplitOption
}
type SplitOption struct {
stmtNode
Lower []ExprNode
Upper []ExprNode
Num int64
ValueLists [][]ExprNode
}
type SplitSyntaxOption struct {
HasRegionFor bool
HasPartition bool
}
func (n *SplitRegionStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("SPLIT ")
if n.SplitSyntaxOpt != nil {
if n.SplitSyntaxOpt.HasRegionFor {
ctx.WriteKeyWord("REGION FOR ")
}
if n.SplitSyntaxOpt.HasPartition {
ctx.WriteKeyWord("PARTITION ")
}
}
ctx.WriteKeyWord("TABLE ")
if err := n.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore SplitIndexRegionStmt.Table")
}
if len(n.PartitionNames) > 0 {
ctx.WriteKeyWord(" PARTITION")
ctx.WritePlain("(")
for i, v := range n.PartitionNames {
if i != 0 {
ctx.WritePlain(", ")
}
ctx.WriteName(v.String())
}
ctx.WritePlain(")")
}
if len(n.IndexName.L) > 0 {
ctx.WriteKeyWord(" INDEX ")
ctx.WriteName(n.IndexName.String())
}
ctx.WritePlain(" ")
err := n.SplitOpt.Restore(ctx)
return err
}
func (n *SplitRegionStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*SplitRegionStmt)
node, ok := n.Table.Accept(v)
if !ok {
return n, false
}
n.Table = node.(*TableName)
if n.SplitOpt != nil {
node, ok := n.SplitOpt.Accept(v)
if !ok {
return n, false
}
n.SplitOpt = node.(*SplitOption)
}
return v.Leave(n)
}
func (n *SplitOption) Restore(ctx *format.RestoreCtx) error {
if len(n.ValueLists) == 0 {
ctx.WriteKeyWord("BETWEEN ")
ctx.WritePlain("(")
for j, v := range n.Lower {
if j != 0 {
ctx.WritePlain(",")
}
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore SplitOption Lower")
}
}
ctx.WritePlain(")")
ctx.WriteKeyWord(" AND ")
ctx.WritePlain("(")
for j, v := range n.Upper {
if j != 0 {
ctx.WritePlain(",")
}
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore SplitOption Upper")
}
}
ctx.WritePlain(")")
ctx.WriteKeyWord(" REGIONS")
ctx.WritePlainf(" %d", n.Num)
return nil
}
ctx.WriteKeyWord("BY ")
for i, row := range n.ValueLists {
if i != 0 {
ctx.WritePlain(",")
}
ctx.WritePlain("(")
for j, v := range row {
if j != 0 {
ctx.WritePlain(",")
}
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore SplitOption.ValueLists[%d][%d]", i, j)
}
}
ctx.WritePlain(")")
}
return nil
}
// Accept implements Node Accept interface.
func (n *SplitOption) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*SplitOption)
for i, val := range n.Lower {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.Lower[i] = node.(ExprNode)
}
for i, val := range n.Upper {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.Upper[i] = node.(ExprNode)
}
for i, list := range n.ValueLists {
for j, val := range list {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.ValueLists[i][j] = node.(ExprNode)
}
}
return v.Leave(n)
}
func (n *SplitIndexOption) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*SplitIndexOption)
node, ok := n.SplitOpt.Accept(v)
if !ok {
return n, false
}
n.SplitOpt = node.(*SplitOption)
return v.Leave(n)
}
func (n *SplitIndexOption) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("SPLIT ")
// Table split, empty prefix
if n.TableLevel {
} else if n.PrimaryKey {
ctx.WriteKeyWord("PRIMARY KEY ")
} else {
ctx.WriteKeyWord("INDEX ")
ctx.WriteName(n.IndexName.String())
ctx.WritePlain(" ")
}
return n.SplitOpt.Restore(ctx)
}
type FulltextSearchModifier int
const (
FulltextSearchModifierNaturalLanguageMode = 0
FulltextSearchModifierBooleanMode = 1
FulltextSearchModifierModeMask = 0xF
FulltextSearchModifierWithQueryExpansion = 1 << 4
)
func (m FulltextSearchModifier) IsBooleanMode() bool {
return m&FulltextSearchModifierModeMask == FulltextSearchModifierBooleanMode
}
func (m FulltextSearchModifier) IsNaturalLanguageMode() bool {
return m&FulltextSearchModifierModeMask == FulltextSearchModifierNaturalLanguageMode
}
func (m FulltextSearchModifier) WithQueryExpansion() bool {
return m&FulltextSearchModifierWithQueryExpansion == FulltextSearchModifierWithQueryExpansion
}
type AsOfClause struct {
node
TsExpr ExprNode
}
// Restore implements Node interface.
func (n *AsOfClause) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("AS OF TIMESTAMP ")
if err := n.TsExpr.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore AsOfClause.Expr")
}
return nil
}
// Accept implements Node Accept interface.
func (n *AsOfClause) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*AsOfClause)
node, ok := n.TsExpr.Accept(v)
if !ok {
return n, false
}
n.TsExpr = node.(ExprNode)
return v.Leave(n)
}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package ast
import (
"fmt"
"io"
"reflect"
"regexp"
"strings"
"github.com/pingcap/errors"
"github.com/pingcap/tidb/pkg/parser/format"
"github.com/pingcap/tidb/pkg/parser/opcode"
)
var (
_ ExprNode = &BetweenExpr{}
_ ExprNode = &BinaryOperationExpr{}
_ ExprNode = &CaseExpr{}
_ ExprNode = &ColumnNameExpr{}
_ ExprNode = &TableNameExpr{}
_ ExprNode = &CompareSubqueryExpr{}
_ ExprNode = &DefaultExpr{}
_ ExprNode = &ExistsSubqueryExpr{}
_ ExprNode = &IsNullExpr{}
_ ExprNode = &IsTruthExpr{}
_ ExprNode = &ParenthesesExpr{}
_ ExprNode = &PatternInExpr{}
_ ExprNode = &PatternLikeOrIlikeExpr{}
_ ExprNode = &PatternRegexpExpr{}
_ ExprNode = &PositionExpr{}
_ ExprNode = &RowExpr{}
_ ExprNode = &SubqueryExpr{}
_ ExprNode = &UnaryOperationExpr{}
_ ExprNode = &ValuesExpr{}
_ ExprNode = &VariableExpr{}
_ ExprNode = &MatchAgainst{}
_ ExprNode = &SetCollationExpr{}
_ Node = &ColumnName{}
_ Node = &WhenClause{}
)
// ValueExpr define a interface for ValueExpr.
type ValueExpr interface {
ExprNode
SetValue(val any)
GetValue() any
GetDatumString() string
GetString() string
GetProjectionOffset() int
SetProjectionOffset(offset int)
}
// NewValueExpr creates a ValueExpr with value, and sets default field type.
var NewValueExpr func(value any, charset string, collate string) ValueExpr
// NewParamMarkerExpr creates a ParamMarkerExpr.
var NewParamMarkerExpr func(offset int) ParamMarkerExpr
// BetweenExpr is for "between and" or "not between and" expression.
type BetweenExpr struct {
exprNode
// Expr is the expression to be checked.
Expr ExprNode
// Left is the expression for minimal value in the range.
Left ExprNode
// Right is the expression for maximum value in the range.
Right ExprNode
// Not is true, the expression is "not between and".
Not bool
}
// Restore implements Node interface.
func (n *BetweenExpr) Restore(ctx *format.RestoreCtx) error {
if ctx.Flags.HasRestoreBracketAroundBetweenExpr() {
ctx.WritePlain("(")
}
if err := n.Expr.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore BetweenExpr.Expr")
}
if n.Not {
ctx.WriteKeyWord(" NOT BETWEEN ")
} else {
ctx.WriteKeyWord(" BETWEEN ")
}
if err := n.Left.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore BetweenExpr.Left")
}
ctx.WriteKeyWord(" AND ")
if err := n.Right.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore BetweenExpr.Right ")
}
if ctx.Flags.HasRestoreBracketAroundBetweenExpr() {
ctx.WritePlain(")")
}
return nil
}
// Format the ExprNode into a Writer.
func (n *BetweenExpr) Format(w io.Writer) {
n.Expr.Format(w)
if n.Not {
fmt.Fprint(w, " NOT BETWEEN ")
} else {
fmt.Fprint(w, " BETWEEN ")
}
n.Left.Format(w)
fmt.Fprint(w, " AND ")
n.Right.Format(w)
}
// Accept implements Node interface.
func (n *BetweenExpr) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*BetweenExpr)
node, ok := n.Expr.Accept(v)
if !ok {
return n, false
}
n.Expr = node.(ExprNode)
node, ok = n.Left.Accept(v)
if !ok {
return n, false
}
n.Left = node.(ExprNode)
node, ok = n.Right.Accept(v)
if !ok {
return n, false
}
n.Right = node.(ExprNode)
return v.Leave(n)
}
// BinaryOperationExpr is for binary operation like `1 + 1`, `1 - 1`, etc.
type BinaryOperationExpr struct {
exprNode
// Op is the operator code for BinaryOperation.
Op opcode.Op
// L is the left expression in BinaryOperation.
L ExprNode
// R is the right expression in BinaryOperation.
R ExprNode
}
func restoreBinaryOpWithSpacesAround(ctx *format.RestoreCtx, op opcode.Op) error {
shouldInsertSpace := ctx.Flags.HasSpacesAroundBinaryOperationFlag() || op.IsKeyword()
if shouldInsertSpace {
ctx.WritePlain(" ")
}
if err := op.Restore(ctx); err != nil {
return err // no need to annotate, the caller will annotate.
}
if shouldInsertSpace {
ctx.WritePlain(" ")
}
return nil
}
// Restore implements Node interface.
func (n *BinaryOperationExpr) Restore(ctx *format.RestoreCtx) error {
originalFlags := ctx.Flags
if ctx.Flags.HasRestoreBracketAroundBinaryOperation() {
ctx.WritePlain("(")
ctx.Flags |= format.RestoreBracketAroundBetweenExpr
}
if err := n.L.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred when restore BinaryOperationExpr.L")
}
if err := restoreBinaryOpWithSpacesAround(ctx, n.Op); err != nil {
return errors.Annotate(err, "An error occurred when restore BinaryOperationExpr.Op")
}
if err := n.R.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred when restore BinaryOperationExpr.R")
}
if ctx.Flags.HasRestoreBracketAroundBinaryOperation() {
ctx.WritePlain(")")
ctx.Flags = originalFlags
}
return nil
}
// Format the ExprNode into a Writer.
func (n *BinaryOperationExpr) Format(w io.Writer) {
n.L.Format(w)
fmt.Fprint(w, " ")
n.Op.Format(w)
fmt.Fprint(w, " ")
n.R.Format(w)
}
// Accept implements Node interface.
func (n *BinaryOperationExpr) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*BinaryOperationExpr)
node, ok := n.L.Accept(v)
if !ok {
return n, false
}
n.L = node.(ExprNode)
node, ok = n.R.Accept(v)
if !ok {
return n, false
}
n.R = node.(ExprNode)
return v.Leave(n)
}
// WhenClause is the when clause in Case expression for "when condition then result".
type WhenClause struct {
node
// Expr is the condition expression in WhenClause.
Expr ExprNode
// Result is the result expression in WhenClause.
Result ExprNode
}
// Restore implements Node interface.
func (n *WhenClause) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("WHEN ")
if err := n.Expr.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore WhenClauses.Expr")
}
ctx.WriteKeyWord(" THEN ")
if err := n.Result.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore WhenClauses.Result")
}
return nil
}
// Accept implements Node Accept interface.
func (n *WhenClause) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*WhenClause)
node, ok := n.Expr.Accept(v)
if !ok {
return n, false
}
n.Expr = node.(ExprNode)
node, ok = n.Result.Accept(v)
if !ok {
return n, false
}
n.Result = node.(ExprNode)
return v.Leave(n)
}
// CaseExpr is the case expression.
type CaseExpr struct {
exprNode
// Value is the compare value expression.
Value ExprNode
// WhenClauses is the condition check expression.
WhenClauses []*WhenClause
// ElseClause is the else result expression.
ElseClause ExprNode
}
// Restore implements Node interface.
func (n *CaseExpr) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("CASE")
if n.Value != nil {
ctx.WritePlain(" ")
if err := n.Value.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore CaseExpr.Value")
}
}
for _, clause := range n.WhenClauses {
ctx.WritePlain(" ")
if err := clause.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore CaseExpr.WhenClauses")
}
}
if n.ElseClause != nil {
ctx.WriteKeyWord(" ELSE ")
if err := n.ElseClause.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore CaseExpr.ElseClause")
}
}
ctx.WriteKeyWord(" END")
return nil
}
// Format the ExprNode into a Writer.
func (n *CaseExpr) Format(w io.Writer) {
fmt.Fprint(w, "CASE")
// Because the presence of `case when` syntax, `Value` could be nil and we need check this.
if n.Value != nil {
fmt.Fprint(w, " ")
n.Value.Format(w)
}
for _, clause := range n.WhenClauses {
fmt.Fprint(w, " ")
fmt.Fprint(w, "WHEN ")
clause.Expr.Format(w)
fmt.Fprint(w, " THEN ")
clause.Result.Format(w)
}
if n.ElseClause != nil {
fmt.Fprint(w, " ELSE ")
n.ElseClause.Format(w)
}
fmt.Fprint(w, " END")
}
// Accept implements Node Accept interface.
func (n *CaseExpr) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*CaseExpr)
if n.Value != nil {
node, ok := n.Value.Accept(v)
if !ok {
return n, false
}
n.Value = node.(ExprNode)
}
for i, val := range n.WhenClauses {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.WhenClauses[i] = node.(*WhenClause)
}
if n.ElseClause != nil {
node, ok := n.ElseClause.Accept(v)
if !ok {
return n, false
}
n.ElseClause = node.(ExprNode)
}
return v.Leave(n)
}
// SubqueryExpr represents a subquery.
type SubqueryExpr struct {
exprNode
// Query is the query SelectNode.
Query ResultSetNode
Evaluated bool
Correlated bool
MultiRows bool
Exists bool
}
func (*SubqueryExpr) resultSet() {}
// Restore implements Node interface.
func (n *SubqueryExpr) Restore(ctx *format.RestoreCtx) error {
ctx.WritePlain("(")
if err := n.Query.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore SubqueryExpr.Query")
}
ctx.WritePlain(")")
return nil
}
// Format the ExprNode into a Writer.
func (n *SubqueryExpr) Format(w io.Writer) {
panic("Not implemented")
}
// Accept implements Node Accept interface.
func (n *SubqueryExpr) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*SubqueryExpr)
node, ok := n.Query.Accept(v)
if !ok {
return n, false
}
n.Query = node.(ResultSetNode)
return v.Leave(n)
}
// CompareSubqueryExpr is the expression for "expr cmp (select ...)".
// See https://dev.mysql.com/doc/refman/5.7/en/comparisons-using-subqueries.html
// See https://dev.mysql.com/doc/refman/5.7/en/any-in-some-subqueries.html
// See https://dev.mysql.com/doc/refman/5.7/en/all-subqueries.html
type CompareSubqueryExpr struct {
exprNode
// L is the left expression
L ExprNode
// Op is the comparison opcode.
Op opcode.Op
// R is the subquery for right expression, may be rewritten to other type of expression.
R ExprNode
// All is true, we should compare all records in subquery.
All bool
}
// Restore implements Node interface.
func (n *CompareSubqueryExpr) Restore(ctx *format.RestoreCtx) error {
if err := n.L.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore CompareSubqueryExpr.L")
}
if err := restoreBinaryOpWithSpacesAround(ctx, n.Op); err != nil {
return errors.Annotate(err, "An error occurred while restore CompareSubqueryExpr.Op")
}
if n.All {
ctx.WriteKeyWord("ALL ")
} else {
ctx.WriteKeyWord("ANY ")
}
if err := n.R.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore CompareSubqueryExpr.R")
}
return nil
}
// Format the ExprNode into a Writer.
func (n *CompareSubqueryExpr) Format(w io.Writer) {
panic("Not implemented")
}
// Accept implements Node Accept interface.
func (n *CompareSubqueryExpr) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*CompareSubqueryExpr)
node, ok := n.L.Accept(v)
if !ok {
return n, false
}
n.L = node.(ExprNode)
node, ok = n.R.Accept(v)
if !ok {
return n, false
}
n.R = node.(ExprNode)
return v.Leave(n)
}
// TableNameExpr represents a table-level object name expression, such as sequence/table/view etc.
type TableNameExpr struct {
exprNode
// Name is the referenced object name expression.
Name *TableName
}
// Restore implements Node interface.
func (n *TableNameExpr) Restore(ctx *format.RestoreCtx) error {
if err := n.Name.Restore(ctx); err != nil {
return errors.Trace(err)
}
return nil
}
// Format the ExprNode into a Writer.
func (n *TableNameExpr) Format(w io.Writer) {
dbName, tbName := n.Name.Schema.L, n.Name.Name.L
if dbName == "" {
fmt.Fprintf(w, "`%s`", tbName)
} else {
fmt.Fprintf(w, "`%s`.`%s`", dbName, tbName)
}
}
// Accept implements Node Accept interface.
func (n *TableNameExpr) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*TableNameExpr)
node, ok := n.Name.Accept(v)
if !ok {
return n, false
}
n.Name = node.(*TableName)
return v.Leave(n)
}
// ColumnName represents column name.
type ColumnName struct {
node
Schema CIStr
Table CIStr
Name CIStr
}
// Restore implements Node interface.
func (n *ColumnName) Restore(ctx *format.RestoreCtx) error {
if n.Schema.O != "" && !ctx.IsCTETableName(n.Table.L) && !ctx.Flags.HasWithoutSchemaNameFlag() {
ctx.WriteName(n.Schema.O)
ctx.WritePlain(".")
}
if n.Table.O != "" && !ctx.Flags.HasWithoutTableNameFlag() {
ctx.WriteName(n.Table.O)
ctx.WritePlain(".")
}
ctx.WriteName(n.Name.O)
return nil
}
// Accept implements Node Accept interface.
func (n *ColumnName) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ColumnName)
return v.Leave(n)
}
// String implements Stringer interface.
func (n *ColumnName) String() string {
result := n.Name.L
if n.Table.L != "" {
result = n.Table.L + "." + result
}
if n.Schema.L != "" {
result = n.Schema.L + "." + result
}
return result
}
// OrigColName returns the full original column name.
func (n *ColumnName) OrigColName() (ret string) {
ret = n.Name.O
if n.Table.O == "" {
return
}
ret = n.Table.O + "." + ret
if n.Schema.O == "" {
return
}
ret = n.Schema.O + "." + ret
return
}
// Match means that if a match b, e.g. t.a can match test.t.a but test.t.a can't match t.a.
// Because column a want column from database test exactly.
func (n *ColumnName) Match(b *ColumnName) bool {
if n.Schema.L == "" || n.Schema.L == b.Schema.L {
if n.Table.L == "" || n.Table.L == b.Table.L {
return n.Name.L == b.Name.L
}
}
return false
}
// ColumnNameExpr represents a column name expression.
type ColumnNameExpr struct {
exprNode
// Name is the referenced column name.
Name *ColumnName
}
// Restore implements Node interface.
func (n *ColumnNameExpr) Restore(ctx *format.RestoreCtx) error {
if err := n.Name.Restore(ctx); err != nil {
return errors.Trace(err)
}
return nil
}
// Format the ExprNode into a Writer.
func (n *ColumnNameExpr) Format(w io.Writer) {
name := strings.ReplaceAll(n.Name.String(), ".", "`.`")
fmt.Fprintf(w, "`%s`", name)
}
// Accept implements Node Accept interface.
func (n *ColumnNameExpr) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ColumnNameExpr)
node, ok := n.Name.Accept(v)
if !ok {
return n, false
}
n.Name = node.(*ColumnName)
return v.Leave(n)
}
// DefaultExpr is the default expression using default value for a column.
type DefaultExpr struct {
exprNode
// Name is the column name.
Name *ColumnName
}
// Restore implements Node interface.
func (n *DefaultExpr) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("DEFAULT")
if n.Name != nil {
ctx.WritePlain("(")
if err := n.Name.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore DefaultExpr.Name")
}
ctx.WritePlain(")")
}
return nil
}
// Format the ExprNode into a Writer.
func (n *DefaultExpr) Format(w io.Writer) {
fmt.Fprint(w, "DEFAULT")
if n.Name != nil {
panic("Not implemented")
}
}
// Accept implements Node Accept interface.
func (n *DefaultExpr) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*DefaultExpr)
return v.Leave(n)
}
// ExistsSubqueryExpr is the expression for "exists (select ...)".
// See https://dev.mysql.com/doc/refman/5.7/en/exists-and-not-exists-subqueries.html
type ExistsSubqueryExpr struct {
exprNode
// Sel is the subquery, may be rewritten to other type of expression.
Sel ExprNode
// Not is true, the expression is "not exists".
Not bool
}
// Restore implements Node interface.
func (n *ExistsSubqueryExpr) Restore(ctx *format.RestoreCtx) error {
if n.Not {
ctx.WriteKeyWord("NOT EXISTS ")
} else {
ctx.WriteKeyWord("EXISTS ")
}
if err := n.Sel.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ExistsSubqueryExpr.Sel")
}
return nil
}
// Format the ExprNode into a Writer.
func (n *ExistsSubqueryExpr) Format(w io.Writer) {
panic("Not implemented")
}
// Accept implements Node Accept interface.
func (n *ExistsSubqueryExpr) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ExistsSubqueryExpr)
node, ok := n.Sel.Accept(v)
if !ok {
return n, false
}
n.Sel = node.(ExprNode)
return v.Leave(n)
}
// PatternInExpr is the expression for in operator, like "expr in (1, 2, 3)" or "expr in (select c from t)".
type PatternInExpr struct {
exprNode
// Expr is the value expression to be compared.
Expr ExprNode
// List is the list expression in compare list.
List []ExprNode
// Not is true, the expression is "not in".
Not bool
// Sel is the subquery, may be rewritten to other type of expression.
Sel ExprNode
}
// Restore implements Node interface.
func (n *PatternInExpr) Restore(ctx *format.RestoreCtx) error {
if err := n.Expr.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore PatternInExpr.Expr")
}
if n.Not {
ctx.WriteKeyWord(" NOT IN ")
} else {
ctx.WriteKeyWord(" IN ")
}
if n.Sel != nil {
if err := n.Sel.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore PatternInExpr.Sel")
}
} else {
ctx.WritePlain("(")
for i, expr := range n.List {
if i != 0 {
ctx.WritePlain(",")
}
if err := expr.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore PatternInExpr.List[%d]", i)
}
}
ctx.WritePlain(")")
}
return nil
}
// Format the ExprNode into a Writer.
func (n *PatternInExpr) Format(w io.Writer) {
n.Expr.Format(w)
if n.Not {
fmt.Fprint(w, " NOT IN (")
} else {
fmt.Fprint(w, " IN (")
}
for i, expr := range n.List {
if i != 0 {
fmt.Fprint(w, ",")
}
expr.Format(w)
}
fmt.Fprint(w, ")")
}
// Accept implements Node Accept interface.
func (n *PatternInExpr) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*PatternInExpr)
node, ok := n.Expr.Accept(v)
if !ok {
return n, false
}
n.Expr = node.(ExprNode)
for i, val := range n.List {
node, ok = val.Accept(v)
if !ok {
return n, false
}
n.List[i] = node.(ExprNode)
}
if n.Sel != nil {
node, ok = n.Sel.Accept(v)
if !ok {
return n, false
}
n.Sel = node.(ExprNode)
}
return v.Leave(n)
}
// IsNullExpr is the expression for null check.
type IsNullExpr struct {
exprNode
// Expr is the expression to be checked.
Expr ExprNode
// Not is true, the expression is "is not null".
Not bool
}
// Restore implements Node interface.
func (n *IsNullExpr) Restore(ctx *format.RestoreCtx) error {
if err := n.Expr.Restore(ctx); err != nil {
return errors.Trace(err)
}
if n.Not {
ctx.WriteKeyWord(" IS NOT NULL")
} else {
ctx.WriteKeyWord(" IS NULL")
}
return nil
}
// Format the ExprNode into a Writer.
func (n *IsNullExpr) Format(w io.Writer) {
n.Expr.Format(w)
if n.Not {
fmt.Fprint(w, " IS NOT NULL")
return
}
fmt.Fprint(w, " IS NULL")
}
// Accept implements Node Accept interface.
func (n *IsNullExpr) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*IsNullExpr)
node, ok := n.Expr.Accept(v)
if !ok {
return n, false
}
n.Expr = node.(ExprNode)
return v.Leave(n)
}
// IsTruthExpr is the expression for true/false check.
type IsTruthExpr struct {
exprNode
// Expr is the expression to be checked.
Expr ExprNode
// Not is true, the expression is "is not true/false".
Not bool
// True indicates checking true or false.
True int64
}
// Restore implements Node interface.
func (n *IsTruthExpr) Restore(ctx *format.RestoreCtx) error {
if err := n.Expr.Restore(ctx); err != nil {
return errors.Trace(err)
}
if n.Not {
ctx.WriteKeyWord(" IS NOT")
} else {
ctx.WriteKeyWord(" IS")
}
if n.True > 0 {
ctx.WriteKeyWord(" TRUE")
} else {
ctx.WriteKeyWord(" FALSE")
}
return nil
}
// Format the ExprNode into a Writer.
func (n *IsTruthExpr) Format(w io.Writer) {
n.Expr.Format(w)
if n.Not {
fmt.Fprint(w, " IS NOT")
} else {
fmt.Fprint(w, " IS")
}
if n.True > 0 {
fmt.Fprint(w, " TRUE")
} else {
fmt.Fprint(w, " FALSE")
}
}
// Accept implements Node Accept interface.
func (n *IsTruthExpr) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*IsTruthExpr)
node, ok := n.Expr.Accept(v)
if !ok {
return n, false
}
n.Expr = node.(ExprNode)
return v.Leave(n)
}
// PatternLikeOrIlikeExpr is the expression for like operator, e.g, expr like "%123%"
type PatternLikeOrIlikeExpr struct {
exprNode
// Expr is the expression to be checked.
Expr ExprNode
// Pattern is the like expression.
Pattern ExprNode
// Not is true, the expression is "not like".
Not bool
IsLike bool
Escape byte
// EscapeExplicit indicates whether ESCAPE clause is specified explicitly.
EscapeExplicit bool
PatChars []byte
PatTypes []byte
}
// Restore implements Node interface.
func (n *PatternLikeOrIlikeExpr) Restore(ctx *format.RestoreCtx) error {
if err := n.Expr.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore PatternLikeOrIlikeExpr.Expr")
}
if n.IsLike {
if n.Not {
ctx.WriteKeyWord(" NOT LIKE ")
} else {
ctx.WriteKeyWord(" LIKE ")
}
} else {
if n.Not {
ctx.WriteKeyWord(" NOT ILIKE ")
} else {
ctx.WriteKeyWord(" ILIKE ")
}
}
if err := n.Pattern.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore PatternLikeOrIlikeExpr.Pattern")
}
if n.EscapeExplicit && n.Escape != '\\' {
ctx.WriteKeyWord(" ESCAPE ")
if n.Escape == 0 {
// ESCAPE '' means no escape character
ctx.WriteString("")
} else {
ctx.WriteString(string(n.Escape))
}
}
return nil
}
// Format the ExprNode into a Writer.
func (n *PatternLikeOrIlikeExpr) Format(w io.Writer) {
n.Expr.Format(w)
if n.IsLike {
if n.Not {
fmt.Fprint(w, " NOT LIKE ")
} else {
fmt.Fprint(w, " LIKE ")
}
} else {
if n.Not {
fmt.Fprint(w, " NOT ILIKE ")
} else {
fmt.Fprint(w, " ILIKE ")
}
}
n.Pattern.Format(w)
if n.EscapeExplicit && n.Escape != '\\' {
fmt.Fprint(w, " ESCAPE ")
fmt.Fprintf(w, "'%c'", n.Escape)
}
}
// Accept implements Node Accept interface.
func (n *PatternLikeOrIlikeExpr) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*PatternLikeOrIlikeExpr)
if n.Expr != nil {
node, ok := n.Expr.Accept(v)
if !ok {
return n, false
}
n.Expr = node.(ExprNode)
}
if n.Pattern != nil {
node, ok := n.Pattern.Accept(v)
if !ok {
return n, false
}
n.Pattern = node.(ExprNode)
}
return v.Leave(n)
}
// ParamMarkerExpr expression holds a place for another expression.
// Used in parsing prepare statement.
type ParamMarkerExpr interface {
ValueExpr
SetOrder(int)
}
// ParenthesesExpr is the parentheses' expression.
type ParenthesesExpr struct {
exprNode
// Expr is the expression in parentheses.
Expr ExprNode
}
// Restore implements Node interface.
func (n *ParenthesesExpr) Restore(ctx *format.RestoreCtx) error {
ctx.WritePlain("(")
if err := n.Expr.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred when restore ParenthesesExpr.Expr")
}
ctx.WritePlain(")")
return nil
}
// Format the ExprNode into a Writer.
func (n *ParenthesesExpr) Format(w io.Writer) {
fmt.Fprint(w, "(")
n.Expr.Format(w)
fmt.Fprint(w, ")")
}
// Accept implements Node Accept interface.
func (n *ParenthesesExpr) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ParenthesesExpr)
if n.Expr != nil {
node, ok := n.Expr.Accept(v)
if !ok {
return n, false
}
n.Expr = node.(ExprNode)
}
return v.Leave(n)
}
// PositionExpr is the expression for order by and group by position.
// MySQL use position expression started from 1, it looks a little confused inner.
// maybe later we will use 0 at first.
type PositionExpr struct {
exprNode
// N is the position, started from 1 now.
N int
// P is the parameterized position.
P ExprNode
}
// Restore implements Node interface.
func (n *PositionExpr) Restore(ctx *format.RestoreCtx) error {
ctx.WritePlainf("%d", n.N)
return nil
}
// Format the ExprNode into a Writer.
func (n *PositionExpr) Format(w io.Writer) {
panic("Not implemented")
}
// Accept implements Node Accept interface.
func (n *PositionExpr) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*PositionExpr)
if n.P != nil {
node, ok := n.P.Accept(v)
if !ok {
return n, false
}
n.P = node.(ExprNode)
}
return v.Leave(n)
}
// PatternRegexpExpr is the pattern expression for pattern match.
type PatternRegexpExpr struct {
exprNode
// Expr is the expression to be checked.
Expr ExprNode
// Pattern is the expression for pattern.
Pattern ExprNode
// Not is true, the expression is "not rlike",
Not bool
// Re is the compiled regexp.
Re *regexp.Regexp
// Sexpr is the string for Expr expression.
Sexpr *string
}
// Restore implements Node interface.
func (n *PatternRegexpExpr) Restore(ctx *format.RestoreCtx) error {
if err := n.Expr.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore PatternRegexpExpr.Expr")
}
if n.Not {
ctx.WriteKeyWord(" NOT REGEXP ")
} else {
ctx.WriteKeyWord(" REGEXP ")
}
if err := n.Pattern.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore PatternRegexpExpr.Pattern")
}
return nil
}
// Format the ExprNode into a Writer.
func (n *PatternRegexpExpr) Format(w io.Writer) {
n.Expr.Format(w)
if n.Not {
fmt.Fprint(w, " NOT REGEXP ")
} else {
fmt.Fprint(w, " REGEXP ")
}
n.Pattern.Format(w)
}
// Accept implements Node Accept interface.
func (n *PatternRegexpExpr) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*PatternRegexpExpr)
node, ok := n.Expr.Accept(v)
if !ok {
return n, false
}
n.Expr = node.(ExprNode)
node, ok = n.Pattern.Accept(v)
if !ok {
return n, false
}
n.Pattern = node.(ExprNode)
return v.Leave(n)
}
// RowExpr is the expression for row constructor.
// See https://dev.mysql.com/doc/refman/5.7/en/row-subqueries.html
type RowExpr struct {
exprNode
Values []ExprNode
}
// Restore implements Node interface.
func (n *RowExpr) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("ROW")
ctx.WritePlain("(")
for i, v := range n.Values {
if i != 0 {
ctx.WritePlain(",")
}
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred when restore RowExpr.Values[%v]", i)
}
}
ctx.WritePlain(")")
return nil
}
// Format the ExprNode into a Writer.
func (n *RowExpr) Format(w io.Writer) {
panic("Not implemented")
}
// Accept implements Node Accept interface.
func (n *RowExpr) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*RowExpr)
for i, val := range n.Values {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.Values[i] = node.(ExprNode)
}
return v.Leave(n)
}
// UnaryOperationExpr is the expression for unary operator.
type UnaryOperationExpr struct {
exprNode
// Op is the operator opcode.
Op opcode.Op
// V is the unary expression.
V ExprNode
}
// Restore implements Node interface.
func (n *UnaryOperationExpr) Restore(ctx *format.RestoreCtx) error {
if err := n.Op.Restore(ctx); err != nil {
return errors.Trace(err)
}
if err := n.V.Restore(ctx); err != nil {
return errors.Trace(err)
}
return nil
}
// Format the ExprNode into a Writer.
func (n *UnaryOperationExpr) Format(w io.Writer) {
n.Op.Format(w)
n.V.Format(w)
}
// Accept implements Node Accept interface.
func (n *UnaryOperationExpr) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*UnaryOperationExpr)
node, ok := n.V.Accept(v)
if !ok {
return n, false
}
n.V = node.(ExprNode)
return v.Leave(n)
}
// ValuesExpr is the expression used in INSERT VALUES.
type ValuesExpr struct {
exprNode
// Column is column name.
Column *ColumnNameExpr
}
// Restore implements Node interface.
func (n *ValuesExpr) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("VALUES")
ctx.WritePlain("(")
if err := n.Column.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ValuesExpr.Column")
}
ctx.WritePlain(")")
return nil
}
// Format the ExprNode into a Writer.
func (n *ValuesExpr) Format(w io.Writer) {
panic("Not implemented")
}
// Accept implements Node Accept interface.
func (n *ValuesExpr) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ValuesExpr)
node, ok := n.Column.Accept(v)
if !ok {
return n, false
}
// `node` may be *ast.ValueExpr, to avoid panic, we write `_` and do not use
// it.
n.Column, _ = node.(*ColumnNameExpr)
return v.Leave(n)
}
// VariableExpr is the expression for variable.
type VariableExpr struct {
exprNode
// Name is the variable name.
Name string
// IsGlobal indicates whether this variable is global.
IsGlobal bool
// IsInstance indicates whether this variable is instance.
IsInstance bool
// IsSystem indicates whether this variable is a system variable in current session.
IsSystem bool
// ExplicitScope indicates whether this variable scope is set explicitly.
ExplicitScope bool
// Value is the variable value.
Value ExprNode
}
// Restore implements Node interface.
func (n *VariableExpr) Restore(ctx *format.RestoreCtx) error {
if n.IsSystem {
ctx.WritePlain("@@")
if n.ExplicitScope {
if n.IsGlobal {
ctx.WriteKeyWord("GLOBAL")
} else if n.IsInstance {
ctx.WriteKeyWord("INSTANCE")
} else {
ctx.WriteKeyWord("SESSION")
}
ctx.WritePlain(".")
}
} else {
ctx.WritePlain("@")
}
ctx.WriteName(n.Name)
if n.Value != nil {
ctx.WritePlain(":=")
if err := n.Value.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore VariableExpr.Value")
}
}
return nil
}
// Format the ExprNode into a Writer.
func (n *VariableExpr) Format(w io.Writer) {
panic("Not implemented")
}
// Accept implements Node Accept interface.
func (n *VariableExpr) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*VariableExpr)
if n.Value == nil {
return v.Leave(n)
}
node, ok := n.Value.Accept(v)
if !ok {
return n, false
}
n.Value = node.(ExprNode)
return v.Leave(n)
}
// MaxValueExpr is the expression for "maxvalue" used in partition.
type MaxValueExpr struct {
exprNode
}
// Restore implements Node interface.
func (n *MaxValueExpr) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("MAXVALUE")
return nil
}
// Format the ExprNode into a Writer.
func (n *MaxValueExpr) Format(w io.Writer) {
fmt.Fprint(w, "MAXVALUE")
}
// Accept implements Node Accept interface.
func (n *MaxValueExpr) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
return v.Leave(n)
}
// MatchAgainst is the expression for matching against fulltext index.
type MatchAgainst struct {
exprNode
// ColumnNames are the columns to match.
ColumnNames []*ColumnName
// Against
Against ExprNode
// Modifier
Modifier FulltextSearchModifier
}
func (n *MatchAgainst) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("MATCH")
ctx.WritePlain(" (")
for i, v := range n.ColumnNames {
if i != 0 {
ctx.WritePlain(",")
}
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore MatchAgainst.ColumnNames[%d]", i)
}
}
ctx.WritePlain(") ")
ctx.WriteKeyWord("AGAINST")
ctx.WritePlain(" (")
if err := n.Against.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore MatchAgainst.Against")
}
if n.Modifier.IsBooleanMode() {
ctx.WritePlain(" IN BOOLEAN MODE")
if n.Modifier.WithQueryExpansion() {
return errors.New("BOOLEAN MODE doesn't support QUERY EXPANSION")
}
} else if n.Modifier.WithQueryExpansion() {
ctx.WritePlain(" WITH QUERY EXPANSION")
}
ctx.WritePlain(")")
return nil
}
func (n *MatchAgainst) Format(w io.Writer) {
fmt.Fprint(w, "MATCH(")
for i, v := range n.ColumnNames {
if i != 0 {
fmt.Fprintf(w, ",%s", v.String())
} else {
fmt.Fprint(w, v.String())
}
}
fmt.Fprint(w, ") AGAINST(")
n.Against.Format(w)
if n.Modifier.IsBooleanMode() {
fmt.Fprint(w, " IN BOOLEAN MODE")
} else if n.Modifier.WithQueryExpansion() {
fmt.Fprint(w, " WITH QUERY EXPANSION")
}
fmt.Fprint(w, ")")
}
func (n *MatchAgainst) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*MatchAgainst)
for i, colName := range n.ColumnNames {
newColName, ok := colName.Accept(v)
if !ok {
return n, false
}
n.ColumnNames[i] = newColName.(*ColumnName)
}
newAgainst, ok := n.Against.Accept(v)
if !ok {
return n, false
}
n.Against = newAgainst.(ExprNode)
return v.Leave(n)
}
// SetCollationExpr is the expression for the `COLLATE collation_name` clause.
type SetCollationExpr struct {
exprNode
// Expr is the expression to be set.
Expr ExprNode
// Collate is the name of collation to set.
Collate string
}
// Restore implements Node interface.
func (n *SetCollationExpr) Restore(ctx *format.RestoreCtx) error {
if err := n.Expr.Restore(ctx); err != nil {
return errors.Trace(err)
}
ctx.WriteKeyWord(" COLLATE ")
ctx.WritePlain(n.Collate)
return nil
}
// Format the ExprNode into a Writer.
func (n *SetCollationExpr) Format(w io.Writer) {
n.Expr.Format(w)
fmt.Fprintf(w, " COLLATE %s", n.Collate)
}
// Accept implements Node Accept interface.
func (n *SetCollationExpr) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*SetCollationExpr)
node, ok := n.Expr.Accept(v)
if !ok {
return n, false
}
n.Expr = node.(ExprNode)
return v.Leave(n)
}
type exprCleaner struct {
// for Text Position clean.
oldTextPos []int
restore bool
// for Name.O clean, ast.FuncCallExpr should be case-insensitive.
oldOriginFuncName []string
}
func (e *exprCleaner) BeginRestore() {
e.restore = true
}
func (e *exprCleaner) Enter(n Node) (node Node, skipChildren bool) {
if e.restore {
n.SetOriginTextPosition(e.oldTextPos[0])
e.oldTextPos = e.oldTextPos[1:]
if f, ok := n.(*FuncCallExpr); ok {
f.FnName.O = e.oldOriginFuncName[0]
e.oldOriginFuncName = e.oldOriginFuncName[1:]
}
return n, false
}
e.oldTextPos = append(e.oldTextPos, n.OriginTextPosition())
n.SetOriginTextPosition(0)
if f, ok := n.(*FuncCallExpr); ok {
e.oldOriginFuncName = append(e.oldOriginFuncName, f.FnName.O)
f.FnName.O = f.FnName.L
}
return n, false
}
func (e *exprCleaner) Leave(n Node) (node Node, ok bool) {
return n, true
}
// ExpressionDeepEqual compares the equivalence of two expressions.
func ExpressionDeepEqual(a ExprNode, b ExprNode) bool {
cleanerA := &exprCleaner{}
cleanerB := &exprCleaner{}
a.Accept(cleanerA)
b.Accept(cleanerB)
result := reflect.DeepEqual(a, b)
cleanerA.BeginRestore()
cleanerB.BeginRestore()
a.Accept(cleanerA)
b.Accept(cleanerB)
return result
}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package ast
// HasAggFlag checks if the expr contains FlagHasAggregateFunc.
func HasAggFlag(expr ExprNode) bool {
return expr.GetFlag()&FlagHasAggregateFunc > 0
}
func HasWindowFlag(expr ExprNode) bool {
return expr.GetFlag()&FlagHasWindowFunc > 0
}
// SetFlag sets flag for expression.
func SetFlag(n Node) {
var setter flagSetter
n.Accept(&setter)
}
type flagSetter struct {
}
func (f *flagSetter) Enter(in Node) (Node, bool) {
return in, false
}
func (f *flagSetter) Leave(in Node) (Node, bool) {
if x, ok := in.(ParamMarkerExpr); ok {
x.SetFlag(FlagHasParamMarker)
}
switch x := in.(type) {
case *AggregateFuncExpr:
f.aggregateFunc(x)
case *WindowFuncExpr:
f.windowFunc(x)
case *BetweenExpr:
x.SetFlag(x.Expr.GetFlag() | x.Left.GetFlag() | x.Right.GetFlag())
case *BinaryOperationExpr:
x.SetFlag(x.L.GetFlag() | x.R.GetFlag())
case *CaseExpr:
f.caseExpr(x)
case *ColumnNameExpr:
x.SetFlag(FlagHasReference)
case *CompareSubqueryExpr:
x.SetFlag(x.L.GetFlag() | x.R.GetFlag())
case *DefaultExpr:
x.SetFlag(FlagHasDefault)
case *ExistsSubqueryExpr:
x.SetFlag(x.Sel.GetFlag())
case *FuncCallExpr:
f.funcCall(x)
case *FuncCastExpr:
x.SetFlag(FlagHasFunc | x.Expr.GetFlag())
case *IsNullExpr:
x.SetFlag(x.Expr.GetFlag())
case *IsTruthExpr:
x.SetFlag(x.Expr.GetFlag())
case *ParenthesesExpr:
x.SetFlag(x.Expr.GetFlag())
case *PatternInExpr:
f.patternIn(x)
case *PatternLikeOrIlikeExpr:
f.patternLike(x)
case *PatternRegexpExpr:
f.patternRegexp(x)
case *PositionExpr:
x.SetFlag(FlagHasReference)
case *RowExpr:
f.row(x)
case *SubqueryExpr:
x.SetFlag(FlagHasSubquery)
case *UnaryOperationExpr:
x.SetFlag(x.V.GetFlag())
case *ValuesExpr:
x.SetFlag(FlagHasReference)
case *VariableExpr:
if x.Value == nil {
x.SetFlag(FlagHasVariable)
} else {
x.SetFlag(FlagHasVariable | x.Value.GetFlag())
}
}
return in, true
}
func (f *flagSetter) caseExpr(x *CaseExpr) {
var flag uint64
if x.Value != nil {
flag |= x.Value.GetFlag()
}
for _, val := range x.WhenClauses {
flag |= val.Expr.GetFlag()
flag |= val.Result.GetFlag()
}
if x.ElseClause != nil {
flag |= x.ElseClause.GetFlag()
}
x.SetFlag(flag)
}
func (f *flagSetter) patternIn(x *PatternInExpr) {
flag := x.Expr.GetFlag()
for _, val := range x.List {
flag |= val.GetFlag()
}
if x.Sel != nil {
flag |= x.Sel.GetFlag()
}
x.SetFlag(flag)
}
func (f *flagSetter) patternLike(x *PatternLikeOrIlikeExpr) {
flag := x.Pattern.GetFlag()
if x.Expr != nil {
flag |= x.Expr.GetFlag()
}
x.SetFlag(flag)
}
func (f *flagSetter) patternRegexp(x *PatternRegexpExpr) {
flag := x.Pattern.GetFlag()
if x.Expr != nil {
flag |= x.Expr.GetFlag()
}
x.SetFlag(flag)
}
func (f *flagSetter) row(x *RowExpr) {
var flag uint64
for _, val := range x.Values {
flag |= val.GetFlag()
}
x.SetFlag(flag)
}
func (f *flagSetter) funcCall(x *FuncCallExpr) {
flag := FlagHasFunc
for _, val := range x.Args {
flag |= val.GetFlag()
}
x.SetFlag(flag)
}
func (f *flagSetter) aggregateFunc(x *AggregateFuncExpr) {
flag := FlagHasAggregateFunc
for _, val := range x.Args {
flag |= val.GetFlag()
}
x.SetFlag(flag)
}
func (f *flagSetter) windowFunc(x *WindowFuncExpr) {
flag := FlagHasWindowFunc
for _, val := range x.Args {
flag |= val.GetFlag()
}
x.SetFlag(flag)
}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package ast
import (
"fmt"
"io"
"strings"
"time"
"github.com/pingcap/errors"
"github.com/pingcap/tidb/pkg/parser/format"
"github.com/pingcap/tidb/pkg/parser/types"
)
var (
_ FuncNode = &AggregateFuncExpr{}
_ FuncNode = &FuncCallExpr{}
_ FuncNode = &FuncCastExpr{}
_ FuncNode = &WindowFuncExpr{}
)
// List scalar function names.
const (
LogicAnd = "and"
Cast = "cast"
LeftShift = "leftshift"
RightShift = "rightshift"
LogicOr = "or"
GE = "ge"
LE = "le"
EQ = "eq"
NE = "ne"
LT = "lt"
GT = "gt"
Plus = "plus"
Minus = "minus"
And = "bitand"
Or = "bitor"
Mod = "mod"
Xor = "bitxor"
Div = "div"
Mul = "mul"
UnaryNot = "not" // Avoid name conflict with Not in github/pingcap/check.
BitNeg = "bitneg"
IntDiv = "intdiv"
LogicXor = "xor"
NullEQ = "nulleq"
UnaryPlus = "unaryplus"
UnaryMinus = "unaryminus"
In = "in"
Like = "like"
Ilike = "ilike"
Case = "case"
Regexp = "regexp"
RegexpLike = "regexp_like"
RegexpSubstr = "regexp_substr"
RegexpInStr = "regexp_instr"
RegexpReplace = "regexp_replace"
IsNull = "isnull"
IsTruthWithoutNull = "istrue" // Avoid name conflict with IsTrue in github/pingcap/check.
IsTruthWithNull = "istrue_with_null"
IsFalsity = "isfalse" // Avoid name conflict with IsFalse in github/pingcap/check.
RowFunc = "row"
SetVar = "setvar"
GetVar = "getvar"
Values = "values"
BitCount = "bit_count"
GetParam = "getparam"
// common functions
Coalesce = "coalesce"
Greatest = "greatest"
Least = "least"
Interval = "interval"
// masking functions
MaskFull = "mask_full"
MaskPartial = "mask_partial"
MaskNull = "mask_null"
MaskDate = "mask_date"
// math functions
Abs = "abs"
Acos = "acos"
Asin = "asin"
Atan = "atan"
Atan2 = "atan2"
Ceil = "ceil"
Ceiling = "ceiling"
Conv = "conv"
Cos = "cos"
Cot = "cot"
CRC32 = "crc32"
Degrees = "degrees"
Exp = "exp"
Floor = "floor"
Ln = "ln"
Log = "log"
Log2 = "log2"
Log10 = "log10"
PI = "pi"
Pow = "pow"
Power = "power"
Radians = "radians"
Rand = "rand"
Round = "round"
Sign = "sign"
Sin = "sin"
Sqrt = "sqrt"
Tan = "tan"
Truncate = "truncate"
// time functions
AddDate = "adddate"
AddTime = "addtime"
ConvertTz = "convert_tz"
Curdate = "curdate"
CurrentDate = "current_date"
CurrentTime = "current_time"
CurrentTimestamp = "current_timestamp"
Curtime = "curtime"
Date = "date"
DateLiteral = "'tidb`.(dateliteral"
DateAdd = "date_add"
DateFormat = "date_format"
DateSub = "date_sub"
DateDiff = "datediff"
Day = "day"
DayName = "dayname"
DayOfMonth = "dayofmonth"
DayOfWeek = "dayofweek"
DayOfYear = "dayofyear"
Extract = "extract"
FromDays = "from_days"
FromUnixTime = "from_unixtime"
GetFormat = "get_format"
Hour = "hour"
LocalTime = "localtime"
LocalTimestamp = "localtimestamp"
MakeDate = "makedate"
MakeTime = "maketime"
MicroSecond = "microsecond"
Minute = "minute"
Month = "month"
MonthName = "monthname"
Now = "now"
PeriodAdd = "period_add"
PeriodDiff = "period_diff"
Quarter = "quarter"
SecToTime = "sec_to_time"
Second = "second"
StrToDate = "str_to_date"
SubDate = "subdate"
SubTime = "subtime"
Sysdate = "sysdate"
Time = "time"
TimeLiteral = "'tidb`.(timeliteral"
TimeFormat = "time_format"
TimeToSec = "time_to_sec"
TimeDiff = "timediff"
Timestamp = "timestamp"
TimestampLiteral = "'tidb`.(timestampliteral"
TimestampAdd = "timestampadd"
TimestampDiff = "timestampdiff"
ToDays = "to_days"
ToSeconds = "to_seconds"
UnixTimestamp = "unix_timestamp"
UTCDate = "utc_date"
UTCTime = "utc_time"
UTCTimestamp = "utc_timestamp"
Week = "week"
Weekday = "weekday"
WeekOfYear = "weekofyear"
Year = "year"
YearWeek = "yearweek"
LastDay = "last_day"
// TSO functions
// TiDBBoundedStaleness is used to determine the TS for a read only request with the given bounded staleness.
// It will be used in the Stale Read feature.
// For more info, please see AsOfClause.
TiDBBoundedStaleness = "tidb_bounded_staleness"
TiDBParseTso = "tidb_parse_tso"
TiDBParseTsoLogical = "tidb_parse_tso_logical"
TiDBCurrentTso = "tidb_current_tso"
// string functions
ASCII = "ascii"
Bin = "bin"
Concat = "concat"
ConcatWS = "concat_ws"
Convert = "convert"
Elt = "elt"
ExportSet = "export_set"
Field = "field"
Format = "format"
FromBase64 = "from_base64"
InsertFunc = "insert_func"
Instr = "instr"
Lcase = "lcase"
Left = "left"
Length = "length"
LoadFile = "load_file"
Locate = "locate"
Lower = "lower"
Lpad = "lpad"
LTrim = "ltrim"
MakeSet = "make_set"
Mid = "mid"
Oct = "oct"
OctetLength = "octet_length"
Ord = "ord"
Position = "position"
Quote = "quote"
Repeat = "repeat"
Replace = "replace"
Reverse = "reverse"
Right = "right"
RTrim = "rtrim"
Space = "space"
Strcmp = "strcmp"
Substring = "substring"
Substr = "substr"
SubstringIndex = "substring_index"
ToBase64 = "to_base64"
Trim = "trim"
Translate = "translate"
Upper = "upper"
Ucase = "ucase"
Hex = "hex"
Unhex = "unhex"
Rpad = "rpad"
BitLength = "bit_length"
CharFunc = "char_func"
CharLength = "char_length"
CharacterLength = "character_length"
FindInSet = "find_in_set"
WeightString = "weight_string"
Soundex = "soundex"
// information functions
Benchmark = "benchmark"
Charset = "charset"
Coercibility = "coercibility"
Collation = "collation"
ConnectionID = "connection_id"
CurrentUser = "current_user"
CurrentRole = "current_role"
Database = "database"
FoundRows = "found_rows"
LastInsertId = "last_insert_id"
RowCount = "row_count"
Schema = "schema"
SessionUser = "session_user"
SystemUser = "system_user"
User = "user"
Version = "version"
TiDBVersion = "tidb_version"
TiDBIsDDLOwner = "tidb_is_ddl_owner"
TiDBDecodePlan = "tidb_decode_plan"
TiDBDecodeBinaryPlan = "tidb_decode_binary_plan"
TiDBDecodeSQLDigests = "tidb_decode_sql_digests"
TiDBEncodeSQLDigest = "tidb_encode_sql_digest"
FormatBytes = "format_bytes"
FormatNanoTime = "format_nano_time"
CurrentResourceGroup = "current_resource_group"
// control functions
If = "if"
Ifnull = "ifnull"
Nullif = "nullif"
// miscellaneous functions
AnyValue = "any_value"
DefaultFunc = "default_func"
InetAton = "inet_aton"
InetNtoa = "inet_ntoa"
Inet6Aton = "inet6_aton"
Inet6Ntoa = "inet6_ntoa"
IsFreeLock = "is_free_lock"
IsIPv4 = "is_ipv4"
IsIPv4Compat = "is_ipv4_compat"
IsIPv4Mapped = "is_ipv4_mapped"
IsIPv6 = "is_ipv6"
IsUsedLock = "is_used_lock"
IsUUID = "is_uuid"
NameConst = "name_const"
ReleaseAllLocks = "release_all_locks"
Sleep = "sleep"
UUID = "uuid"
UUIDv4 = "uuid_v4"
UUIDv7 = "uuid_v7"
UUIDVersion = "uuid_version"
UUIDTimestamp = "uuid_timestamp"
UUIDShort = "uuid_short"
UUIDToBin = "uuid_to_bin"
BinToUUID = "bin_to_uuid"
VitessHash = "vitess_hash"
TiDBShard = "tidb_shard"
TiDBRowChecksum = "tidb_row_checksum"
GetLock = "get_lock"
ReleaseLock = "release_lock"
Grouping = "grouping"
// encryption and compression functions
AesDecrypt = "aes_decrypt"
AesEncrypt = "aes_encrypt"
Compress = "compress"
Decode = "decode"
Encode = "encode"
MD5 = "md5"
PasswordFunc = "password"
RandomBytes = "random_bytes"
SHA1 = "sha1"
SHA = "sha"
SHA2 = "sha2"
SM3 = "sm3"
Uncompress = "uncompress"
UncompressedLength = "uncompressed_length"
ValidatePasswordStrength = "validate_password_strength"
// json functions
JSONType = "json_type"
JSONExtract = "json_extract"
JSONUnquote = "json_unquote"
JSONArray = "json_array"
JSONObject = "json_object"
JSONMerge = "json_merge"
JSONSet = "json_set"
JSONSumCrc32 = "json_sum_crc32"
JSONInsert = "json_insert"
JSONReplace = "json_replace"
JSONRemove = "json_remove"
JSONOverlaps = "json_overlaps"
JSONContains = "json_contains"
JSONMemberOf = "json_memberof"
JSONContainsPath = "json_contains_path"
JSONValid = "json_valid"
JSONArrayAppend = "json_array_append"
JSONArrayInsert = "json_array_insert"
JSONMergePatch = "json_merge_patch"
JSONMergePreserve = "json_merge_preserve"
JSONPretty = "json_pretty"
JSONQuote = "json_quote"
JSONSchemaValid = "json_schema_valid"
JSONSearch = "json_search"
JSONStorageFree = "json_storage_free"
JSONStorageSize = "json_storage_size"
JSONDepth = "json_depth"
JSONKeys = "json_keys"
JSONLength = "json_length"
// vector functions (tidb extension)
VecDims = "vec_dims"
VecL1Distance = "vec_l1_distance"
VecL2Distance = "vec_l2_distance"
VecNegativeInnerProduct = "vec_negative_inner_product"
VecCosineDistance = "vec_cosine_distance"
VecL2Norm = "vec_l2_norm"
VecFromText = "vec_from_text"
VecAsText = "vec_as_text"
// FTS functions (tidb extension)
FTSMatchWord = "fts_match_word"
FTSMysqlMatchAgainst = "match_against"
// TiDB internal function.
TiDBDecodeKey = "tidb_decode_key"
TiDBMVCCInfo = "tidb_mvcc_info"
TiDBEncodeRecordKey = "tidb_encode_record_key"
TiDBEncodeIndexKey = "tidb_encode_index_key"
TiDBDecodeBase64Key = "tidb_decode_base64_key"
// Sequence function.
NextVal = "nextval"
LastVal = "lastval"
SetVal = "setval"
)
type FuncCallExprType int8
const (
FuncCallExprTypeKeyword FuncCallExprType = iota
FuncCallExprTypeGeneric
)
// FuncCallExpr is for function expression.
type FuncCallExpr struct {
funcNode
Tp FuncCallExprType
Schema CIStr
// FnName is the function name.
FnName CIStr
// Args is the function args.
Args []ExprNode
}
// Restore implements Node interface.
func (n *FuncCallExpr) Restore(ctx *format.RestoreCtx) error {
done, err := n.customRestore(ctx)
if done {
return err
}
if len(n.Schema.String()) != 0 {
ctx.WriteName(n.Schema.O)
ctx.WritePlain(".")
}
if n.Tp == FuncCallExprTypeGeneric {
ctx.WriteName(n.FnName.O)
} else {
ctx.WriteKeyWord(n.FnName.O)
}
ctx.WritePlain("(")
switch n.FnName.L {
case "convert":
if err := n.Args[0].Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore FuncCastExpr.Expr")
}
ctx.WriteKeyWord(" USING ")
if err := n.Args[1].Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore FuncCastExpr.Expr")
}
case "adddate", "subdate", "date_add", "date_sub":
if err := n.Args[0].Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore FuncCallExpr.Args[0]")
}
ctx.WritePlain(", ")
ctx.WriteKeyWord("INTERVAL ")
if err := n.Args[1].Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore FuncCallExpr.Args[1]")
}
ctx.WritePlain(" ")
if err := n.Args[2].Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore FuncCallExpr.Args[2]")
}
case "extract":
if err := n.Args[0].Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore FuncCallExpr.Args[0]")
}
ctx.WriteKeyWord(" FROM ")
if err := n.Args[1].Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore FuncCallExpr.Args[1]")
}
case "position":
if err := n.Args[0].Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore FuncCallExpr")
}
ctx.WriteKeyWord(" IN ")
if err := n.Args[1].Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore FuncCallExpr")
}
case "trim":
switch len(n.Args) {
case 3:
if err := n.Args[2].Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore FuncCallExpr.Args[2]")
}
ctx.WritePlain(" ")
fallthrough
case 2:
if expr, isValue := n.Args[1].(ValueExpr); !isValue || expr.GetValue() != nil {
if err := n.Args[1].Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore FuncCallExpr.Args[1]")
}
ctx.WritePlain(" ")
}
ctx.WriteKeyWord("FROM ")
fallthrough
case 1:
if err := n.Args[0].Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore FuncCallExpr.Args[0]")
}
}
case WeightString:
if err := n.Args[0].Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore FuncCallExpr.(WEIGHT_STRING).Args[0]")
}
if len(n.Args) == 3 {
ctx.WriteKeyWord(" AS ")
ctx.WriteKeyWord(n.Args[1].(ValueExpr).GetValue().(string))
ctx.WritePlain("(")
if err := n.Args[2].Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore FuncCallExpr.(WEIGHT_STRING).Args[2]")
}
ctx.WritePlain(")")
}
default:
for i, argv := range n.Args {
if i != 0 {
ctx.WritePlain(", ")
}
if err := argv.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore FuncCallExpr.Args %d", i)
}
}
}
ctx.WritePlain(")")
return nil
}
func (n *FuncCallExpr) customRestore(ctx *format.RestoreCtx) (bool, error) {
var specialLiteral string
switch n.FnName.L {
case DateLiteral:
specialLiteral = "DATE "
case TimeLiteral:
specialLiteral = "TIME "
case TimestampLiteral:
specialLiteral = "TIMESTAMP "
}
if specialLiteral != "" {
ctx.WritePlain(specialLiteral)
if err := n.Args[0].Restore(ctx); err != nil {
return true, errors.Annotatef(err, "An error occurred while restore FuncCallExpr.Expr")
}
return true, nil
}
if n.FnName.L == JSONMemberOf {
if len(n.Args) == 2 {
if err := n.Args[0].Restore(ctx); err != nil {
return true, errors.Annotatef(err, "An error occurred while restore FuncCallExpr.(MEMBER OF).Args[0]")
}
ctx.WriteKeyWord(" MEMBER OF ")
ctx.WritePlain("(")
if err := n.Args[1].Restore(ctx); err != nil {
return true, errors.Annotatef(err, "An error occurred while restore FuncCallExpr.(MEMBER OF).Args[1]")
}
ctx.WritePlain(")")
return true, nil
}
return true, errors.WithStack(errors.Errorf("Incorrect parameter count in the call to native function 'json_memberof'"))
}
return false, nil
}
// Format the ExprNode into a Writer.
func (n *FuncCallExpr) Format(w io.Writer) {
if !n.specialFormatArgs(w) {
fmt.Fprintf(w, "%s(", n.FnName.L)
for i, arg := range n.Args {
arg.Format(w)
if i != len(n.Args)-1 {
fmt.Fprint(w, ", ")
}
}
fmt.Fprint(w, ")")
}
}
// specialFormatArgs formats argument list for some special functions.
func (n *FuncCallExpr) specialFormatArgs(w io.Writer) bool {
switch n.FnName.L {
case DateAdd, DateSub, AddDate, SubDate:
fmt.Fprintf(w, "%s(", n.FnName.L)
n.Args[0].Format(w)
fmt.Fprint(w, ", INTERVAL ")
n.Args[1].Format(w)
fmt.Fprint(w, " ")
n.Args[2].Format(w)
fmt.Fprint(w, ")")
return true
case JSONMemberOf:
n.Args[0].Format(w)
fmt.Fprint(w, " MEMBER OF ")
fmt.Fprint(w, " (")
n.Args[1].Format(w)
fmt.Fprint(w, ")")
return true
case Extract:
fmt.Fprintf(w, "%s(", n.FnName.L)
n.Args[0].Format(w)
fmt.Fprint(w, " FROM ")
n.Args[1].Format(w)
fmt.Fprint(w, ")")
return true
}
return false
}
// Accept implements Node interface.
func (n *FuncCallExpr) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*FuncCallExpr)
for i, val := range n.Args {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.Args[i] = node.(ExprNode)
}
return v.Leave(n)
}
// CastFunctionType is the type for cast function.
type CastFunctionType int
// CastFunction types
const (
CastFunction CastFunctionType = iota + 1
CastConvertFunction
CastBinaryOperator
)
// JSONSumCrc32Expr is the function to calculate sum of crc32 values for array in json
// It's modified from CastFunction to support processing JSON Array.
type JSONSumCrc32Expr struct {
funcNode
// Expr is the expression to be converted.
Expr ExprNode
// Tp is the conversion type.
Tp *types.FieldType
// ExplicitCharSet is true when charset is explicit indicated.
ExplicitCharSet bool
}
// Restore implements Node interface.
func (n *JSONSumCrc32Expr) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("JSON_SUM_CRC32")
ctx.WritePlain("(")
if err := n.Expr.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore JSONSumCrc32Expr.Expr")
}
ctx.WriteKeyWord(" AS ")
n.Tp.RestoreAsCastType(ctx, n.ExplicitCharSet)
ctx.WritePlain(")")
return nil
}
// Format the ExprNode into a Writer.
func (n *JSONSumCrc32Expr) Format(w io.Writer) {
fmt.Fprint(w, "JSON_SUM_CRC32(")
n.Expr.Format(w)
fmt.Fprint(w, " AS ")
n.Tp.FormatAsCastType(w, n.ExplicitCharSet)
fmt.Fprint(w, ")")
}
// Accept implements Node Accept interface.
func (n *JSONSumCrc32Expr) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*JSONSumCrc32Expr)
node, ok := n.Expr.Accept(v)
if !ok {
return n, false
}
n.Expr = node.(ExprNode)
return v.Leave(n)
}
// FuncCastExpr is the cast function converting value to another type, e.g, cast(expr AS signed).
// See https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html
type FuncCastExpr struct {
funcNode
// Expr is the expression to be converted.
Expr ExprNode
// Tp is the conversion type.
Tp *types.FieldType
// FunctionType is either Cast, Convert or Binary.
FunctionType CastFunctionType
// ExplicitCharSet is true when charset is explicit indicated.
ExplicitCharSet bool
}
// Restore implements Node interface.
func (n *FuncCastExpr) Restore(ctx *format.RestoreCtx) error {
switch n.FunctionType {
case CastFunction:
ctx.WriteKeyWord("CAST")
ctx.WritePlain("(")
if err := n.Expr.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore FuncCastExpr.Expr")
}
ctx.WriteKeyWord(" AS ")
n.Tp.RestoreAsCastType(ctx, n.ExplicitCharSet)
ctx.WritePlain(")")
case CastConvertFunction:
ctx.WriteKeyWord("CONVERT")
ctx.WritePlain("(")
if err := n.Expr.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore FuncCastExpr.Expr")
}
ctx.WritePlain(", ")
n.Tp.RestoreAsCastType(ctx, n.ExplicitCharSet)
ctx.WritePlain(")")
case CastBinaryOperator:
ctx.WriteKeyWord("BINARY ")
if err := n.Expr.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore FuncCastExpr.Expr")
}
}
return nil
}
// Format the ExprNode into a Writer.
func (n *FuncCastExpr) Format(w io.Writer) {
switch n.FunctionType {
case CastFunction:
fmt.Fprint(w, "CAST(")
n.Expr.Format(w)
fmt.Fprint(w, " AS ")
n.Tp.FormatAsCastType(w, n.ExplicitCharSet)
fmt.Fprint(w, ")")
case CastConvertFunction:
fmt.Fprint(w, "CONVERT(")
n.Expr.Format(w)
fmt.Fprint(w, ", ")
n.Tp.FormatAsCastType(w, n.ExplicitCharSet)
fmt.Fprint(w, ")")
case CastBinaryOperator:
fmt.Fprint(w, "BINARY ")
n.Expr.Format(w)
}
}
// Accept implements Node Accept interface.
func (n *FuncCastExpr) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*FuncCastExpr)
node, ok := n.Expr.Accept(v)
if !ok {
return n, false
}
n.Expr = node.(ExprNode)
return v.Leave(n)
}
// TrimDirectionType is the type for trim direction.
type TrimDirectionType int
const (
// TrimBothDefault trims from both direction by default.
TrimBothDefault TrimDirectionType = iota
// TrimBoth trims from both direction with explicit notation.
TrimBoth
// TrimLeading trims from left.
TrimLeading
// TrimTrailing trims from right.
TrimTrailing
)
// String implements fmt.Stringer interface.
func (direction TrimDirectionType) String() string {
switch direction {
case TrimBoth, TrimBothDefault:
return "BOTH"
case TrimLeading:
return "LEADING"
case TrimTrailing:
return "TRAILING"
default:
return ""
}
}
// TrimDirectionExpr is an expression representing the trim direction used in the TRIM() function.
type TrimDirectionExpr struct {
exprNode
// Direction is the trim direction
Direction TrimDirectionType
}
// Restore implements Node interface.
func (n *TrimDirectionExpr) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord(n.Direction.String())
return nil
}
// Format the ExprNode into a Writer.
func (n *TrimDirectionExpr) Format(w io.Writer) {
fmt.Fprint(w, n.Direction.String())
}
// Accept implements Node Accept interface.
func (n *TrimDirectionExpr) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
return v.Leave(n)
}
// DateArithType is type for DateArith type.
type DateArithType byte
const (
// DateArithAdd is to run adddate or date_add function option.
// See https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_adddate
// See https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-add
DateArithAdd DateArithType = iota + 1
// DateArithSub is to run subdate or date_sub function option.
// See https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_subdate
// See https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-sub
DateArithSub
)
const (
// AggFuncCount is the name of Count function.
AggFuncCount = "count"
// AggFuncSum is the name of Sum function.
AggFuncSum = "sum"
// AggFuncAvg is the name of Avg function.
AggFuncAvg = "avg"
// AggFuncFirstRow is the name of FirstRowColumn function.
AggFuncFirstRow = "firstrow"
// AggFuncMax is the name of max function.
AggFuncMax = "max"
// AggFuncMin is the name of min function.
AggFuncMin = "min"
// AggFuncGroupConcat is the name of group_concat function.
AggFuncGroupConcat = "group_concat"
// AggFuncBitOr is the name of bit_or function.
AggFuncBitOr = "bit_or"
// AggFuncBitXor is the name of bit_xor function.
AggFuncBitXor = "bit_xor"
// AggFuncBitAnd is the name of bit_and function.
AggFuncBitAnd = "bit_and"
// AggFuncVarPop is the name of var_pop function
AggFuncVarPop = "var_pop"
// AggFuncVarSamp is the name of var_samp function
AggFuncVarSamp = "var_samp"
// AggFuncStddevPop is the name of stddev_pop/std/stddev function
AggFuncStddevPop = "stddev_pop"
// AggFuncStddevSamp is the name of stddev_samp function
AggFuncStddevSamp = "stddev_samp"
// AggFuncJsonArrayagg is the name of json_arrayagg function
AggFuncJsonArrayagg = "json_arrayagg"
// AggFuncJsonObjectAgg is the name of json_objectagg function
AggFuncJsonObjectAgg = "json_objectagg"
// AggFuncApproxCountDistinct is the name of approx_count_distinct function.
AggFuncApproxCountDistinct = "approx_count_distinct"
// AggFuncApproxPercentile is the name of approx_percentile function.
AggFuncApproxPercentile = "approx_percentile"
)
// AggregateFuncExpr represents aggregate function expression.
type AggregateFuncExpr struct {
funcNode
// F is the function name.
F string
// Args is the function args.
Args []ExprNode
// Distinct is true, function hence only aggregate distinct values.
// For example, column c1 values are "1", "2", "2", "sum(c1)" is "5",
// but "sum(distinct c1)" is "3".
Distinct bool
// Order is only used in GROUP_CONCAT
Order *OrderByClause
}
// Restore implements Node interface.
func (n *AggregateFuncExpr) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord(n.F)
ctx.WritePlain("(")
if n.Distinct {
ctx.WriteKeyWord("DISTINCT ")
}
switch strings.ToLower(n.F) {
case "group_concat":
for i := range len(n.Args) - 1 {
if i != 0 {
ctx.WritePlain(", ")
}
if err := n.Args[i].Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore AggregateFuncExpr.Args[%d]", i)
}
}
if n.Order != nil {
ctx.WritePlain(" ")
if err := n.Order.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occur while restore AggregateFuncExpr.Args Order")
}
}
ctx.WriteKeyWord(" SEPARATOR ")
// The parser grammar only accepts `SEPARATOR stringLit` without charset introducer.
// Keep the literal text restorable even when separator carries charset/collation metadata.
separatorCtx := *ctx
separatorCtx.Flags |= format.RestoreStringWithoutCharset
if err := n.Args[len(n.Args)-1].Restore(&separatorCtx); err != nil {
return errors.Annotate(err, "An error occurred while restore AggregateFuncExpr.Args SEPARATOR")
}
default:
for i, argv := range n.Args {
if i != 0 {
ctx.WritePlain(", ")
}
if err := argv.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore AggregateFuncExpr.Args[%d]", i)
}
}
}
ctx.WritePlain(")")
return nil
}
// Format the ExprNode into a Writer.
func (n *AggregateFuncExpr) Format(w io.Writer) {
panic("Not implemented")
}
// Accept implements Node Accept interface.
func (n *AggregateFuncExpr) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*AggregateFuncExpr)
for i, val := range n.Args {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.Args[i] = node.(ExprNode)
}
if n.Order != nil {
node, ok := n.Order.Accept(v)
if !ok {
return n, false
}
n.Order = node.(*OrderByClause)
}
return v.Leave(n)
}
const (
// WindowFuncRowNumber is the name of row_number function.
WindowFuncRowNumber = "row_number"
// WindowFuncRank is the name of rank function.
WindowFuncRank = "rank"
// WindowFuncDenseRank is the name of dense_rank function.
WindowFuncDenseRank = "dense_rank"
// WindowFuncCumeDist is the name of cume_dist function.
WindowFuncCumeDist = "cume_dist"
// WindowFuncPercentRank is the name of percent_rank function.
WindowFuncPercentRank = "percent_rank"
// WindowFuncNtile is the name of ntile function.
WindowFuncNtile = "ntile"
// WindowFuncLead is the name of lead function.
WindowFuncLead = "lead"
// WindowFuncLag is the name of lag function.
WindowFuncLag = "lag"
// WindowFuncFirstValue is the name of first_value function.
WindowFuncFirstValue = "first_value"
// WindowFuncLastValue is the name of last_value function.
WindowFuncLastValue = "last_value"
// WindowFuncNthValue is the name of nth_value function.
WindowFuncNthValue = "nth_value"
)
// WindowFuncExpr represents window function expression.
type WindowFuncExpr struct {
funcNode
// Name is the function name.
Name string
// Args is the function args.
Args []ExprNode
// Distinct cannot be true for most window functions, except `max` and `min`.
// We need to raise error if it is not allowed to be true.
Distinct bool
// IgnoreNull indicates how to handle null value.
// MySQL only supports `RESPECT NULLS`, so we need to raise error if it is true.
IgnoreNull bool
// FromLast indicates the calculation direction of this window function.
// MySQL only supports calculation from first, so we need to raise error if it is true.
FromLast bool
// Spec is the specification of this window.
Spec WindowSpec
}
// Restore implements Node interface.
func (n *WindowFuncExpr) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord(n.Name)
ctx.WritePlain("(")
for i, v := range n.Args {
if i != 0 {
ctx.WritePlain(", ")
} else if n.Distinct {
ctx.WriteKeyWord("DISTINCT ")
}
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore WindowFuncExpr.Args[%d]", i)
}
}
ctx.WritePlain(")")
if n.FromLast {
ctx.WriteKeyWord(" FROM LAST")
}
if n.IgnoreNull {
ctx.WriteKeyWord(" IGNORE NULLS")
}
ctx.WriteKeyWord(" OVER ")
if err := n.Spec.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore WindowFuncExpr.Spec")
}
return nil
}
// Format formats the window function expression into a Writer.
func (n *WindowFuncExpr) Format(w io.Writer) {
panic("Not implemented")
}
// Accept implements Node Accept interface.
func (n *WindowFuncExpr) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*WindowFuncExpr)
for i, val := range n.Args {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.Args[i] = node.(ExprNode)
}
node, ok := n.Spec.Accept(v)
if !ok {
return n, false
}
n.Spec = *node.(*WindowSpec)
return v.Leave(n)
}
// TimeUnitType is the type for time and timestamp units.
type TimeUnitType int
const (
// TimeUnitInvalid is a placeholder for an invalid time or timestamp unit
TimeUnitInvalid TimeUnitType = iota
// TimeUnitMicrosecond is the time or timestamp unit MICROSECOND.
TimeUnitMicrosecond
// TimeUnitSecond is the time or timestamp unit SECOND.
TimeUnitSecond
// TimeUnitMinute is the time or timestamp unit MINUTE.
TimeUnitMinute
// TimeUnitHour is the time or timestamp unit HOUR.
TimeUnitHour
// TimeUnitDay is the time or timestamp unit DAY.
TimeUnitDay
// TimeUnitWeek is the time or timestamp unit WEEK.
TimeUnitWeek
// TimeUnitMonth is the time or timestamp unit MONTH.
TimeUnitMonth
// TimeUnitQuarter is the time or timestamp unit QUARTER.
TimeUnitQuarter
// TimeUnitYear is the time or timestamp unit YEAR.
TimeUnitYear
// TimeUnitSecondMicrosecond is the time unit SECOND_MICROSECOND.
TimeUnitSecondMicrosecond
// TimeUnitMinuteMicrosecond is the time unit MINUTE_MICROSECOND.
TimeUnitMinuteMicrosecond
// TimeUnitMinuteSecond is the time unit MINUTE_SECOND.
TimeUnitMinuteSecond
// TimeUnitHourMicrosecond is the time unit HOUR_MICROSECOND.
TimeUnitHourMicrosecond
// TimeUnitHourSecond is the time unit HOUR_SECOND.
TimeUnitHourSecond
// TimeUnitHourMinute is the time unit HOUR_MINUTE.
TimeUnitHourMinute
// TimeUnitDayMicrosecond is the time unit DAY_MICROSECOND.
TimeUnitDayMicrosecond
// TimeUnitDaySecond is the time unit DAY_SECOND.
TimeUnitDaySecond
// TimeUnitDayMinute is the time unit DAY_MINUTE.
TimeUnitDayMinute
// TimeUnitDayHour is the time unit DAY_HOUR.
TimeUnitDayHour
// TimeUnitYearMonth is the time unit YEAR_MONTH.
TimeUnitYearMonth
)
// String implements fmt.Stringer interface.
func (unit TimeUnitType) String() string {
switch unit {
case TimeUnitMicrosecond:
return "MICROSECOND"
case TimeUnitSecond:
return "SECOND"
case TimeUnitMinute:
return "MINUTE"
case TimeUnitHour:
return "HOUR"
case TimeUnitDay:
return "DAY"
case TimeUnitWeek:
return "WEEK"
case TimeUnitMonth:
return "MONTH"
case TimeUnitQuarter:
return "QUARTER"
case TimeUnitYear:
return "YEAR"
case TimeUnitSecondMicrosecond:
return "SECOND_MICROSECOND"
case TimeUnitMinuteMicrosecond:
return "MINUTE_MICROSECOND"
case TimeUnitMinuteSecond:
return "MINUTE_SECOND"
case TimeUnitHourMicrosecond:
return "HOUR_MICROSECOND"
case TimeUnitHourSecond:
return "HOUR_SECOND"
case TimeUnitHourMinute:
return "HOUR_MINUTE"
case TimeUnitDayMicrosecond:
return "DAY_MICROSECOND"
case TimeUnitDaySecond:
return "DAY_SECOND"
case TimeUnitDayMinute:
return "DAY_MINUTE"
case TimeUnitDayHour:
return "DAY_HOUR"
case TimeUnitYearMonth:
return "YEAR_MONTH"
default:
return ""
}
}
// Duration represented by this unit.
// Returns error if the time unit is not a fixed time interval (such as MONTH)
// or a composite unit (such as MINUTE_SECOND).
func (unit TimeUnitType) Duration() (time.Duration, error) {
switch unit {
case TimeUnitMicrosecond:
return time.Microsecond, nil
case TimeUnitSecond:
return time.Second, nil
case TimeUnitMinute:
return time.Minute, nil
case TimeUnitHour:
return time.Hour, nil
case TimeUnitDay:
return time.Hour * 24, nil
case TimeUnitWeek:
return time.Hour * 24 * 7, nil
case TimeUnitMonth, TimeUnitQuarter, TimeUnitYear:
return 0, errors.Errorf("%s is not a constant time interval and cannot be used here", unit)
default:
return 0, errors.Errorf("%s is a composite time unit and is not supported yet", unit)
}
}
// TimeUnitExpr is an expression representing a time or timestamp unit.
type TimeUnitExpr struct {
exprNode
// Unit is the time or timestamp unit.
Unit TimeUnitType
}
// Restore implements Node interface.
func (n *TimeUnitExpr) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord(n.Unit.String())
return nil
}
// Format the ExprNode into a Writer.
func (n *TimeUnitExpr) Format(w io.Writer) {
fmt.Fprint(w, n.Unit.String())
}
// Accept implements Node Accept interface.
func (n *TimeUnitExpr) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
return v.Leave(n)
}
// GetFormatSelectorType is the type for the first argument of GET_FORMAT() function.
type GetFormatSelectorType int
const (
// GetFormatSelectorDate is the GET_FORMAT selector DATE.
GetFormatSelectorDate GetFormatSelectorType = iota + 1
// GetFormatSelectorTime is the GET_FORMAT selector TIME.
GetFormatSelectorTime
// GetFormatSelectorDatetime is the GET_FORMAT selector DATETIME and TIMESTAMP.
GetFormatSelectorDatetime
)
// GetFormatSelectorExpr is an expression used as the first argument of GET_FORMAT() function.
type GetFormatSelectorExpr struct {
exprNode
// Selector is the GET_FORMAT() selector.
Selector GetFormatSelectorType
}
// String implements fmt.Stringer interface.
func (selector GetFormatSelectorType) String() string {
switch selector {
case GetFormatSelectorDate:
return "DATE"
case GetFormatSelectorTime:
return "TIME"
case GetFormatSelectorDatetime:
return "DATETIME"
default:
return ""
}
}
// Restore implements Node interface.
func (n *GetFormatSelectorExpr) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord(n.Selector.String())
return nil
}
// Format the ExprNode into a Writer.
func (n *GetFormatSelectorExpr) Format(w io.Writer) {
fmt.Fprint(w, n.Selector.String())
}
// Accept implements Node Accept interface.
func (n *GetFormatSelectorExpr) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
return v.Leave(n)
}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package ast
import (
"bytes"
"fmt"
"net/url"
"strconv"
"strings"
"github.com/pingcap/errors"
"github.com/pingcap/failpoint"
"github.com/pingcap/tidb/pkg/parser/auth"
"github.com/pingcap/tidb/pkg/parser/format"
"github.com/pingcap/tidb/pkg/parser/mysql"
)
var (
_ StmtNode = &AdminStmt{}
_ StmtNode = &AlterUserStmt{}
_ StmtNode = &AlterRangeStmt{}
_ StmtNode = &BeginStmt{}
_ StmtNode = &BinlogStmt{}
_ StmtNode = &CommitStmt{}
_ StmtNode = &CreateUserStmt{}
_ StmtNode = &DeallocateStmt{}
_ StmtNode = &DoStmt{}
_ StmtNode = &ExecuteStmt{}
_ StmtNode = &ExplainStmt{}
_ StmtNode = &GrantStmt{}
_ StmtNode = &PrepareStmt{}
_ StmtNode = &RollbackStmt{}
_ StmtNode = &SetPwdStmt{}
_ StmtNode = &SetRoleStmt{}
_ StmtNode = &SetDefaultRoleStmt{}
_ StmtNode = &SetStmt{}
_ StmtNode = &SetSessionStatesStmt{}
_ StmtNode = &UseStmt{}
_ StmtNode = &FlushStmt{}
_ StmtNode = &KillStmt{}
_ StmtNode = &CreateBindingStmt{}
_ StmtNode = &DropBindingStmt{}
_ StmtNode = &SetBindingStmt{}
_ StmtNode = &ShutdownStmt{}
_ StmtNode = &RestartStmt{}
_ StmtNode = &RenameUserStmt{}
_ StmtNode = &HelpStmt{}
_ StmtNode = &PlanReplayerStmt{}
_ StmtNode = &CompactTableStmt{}
_ StmtNode = &SetResourceGroupStmt{}
_ StmtNode = &TrafficStmt{}
_ StmtNode = &RecommendIndexStmt{}
_ Node = &PrivElem{}
_ Node = &VariableAssignment{}
)
// Isolation level constants.
const (
ReadCommitted = "READ-COMMITTED"
ReadUncommitted = "READ-UNCOMMITTED"
Serializable = "SERIALIZABLE"
RepeatableRead = "REPEATABLE-READ"
)
// Transaction mode constants.
const (
Optimistic = "OPTIMISTIC"
Pessimistic = "PESSIMISTIC"
)
// TypeOpt is used for parsing data type option from SQL.
type TypeOpt struct {
IsUnsigned bool
IsZerofill bool
}
// FloatOpt is used for parsing floating-point type option from SQL.
// See http://dev.mysql.com/doc/refman/5.7/en/floating-point-types.html
type FloatOpt struct {
Flen int
Decimal int
}
// AuthOption is used for parsing create use statement.
type AuthOption struct {
// ByAuthString set as true, if AuthString is used for authorization. Otherwise, authorization is done by HashString.
ByAuthString bool
AuthString string
ByHashString bool
HashString string
AuthPlugin string
}
// Restore implements Node interface.
func (n *AuthOption) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("IDENTIFIED")
if n.AuthPlugin != "" {
ctx.WriteKeyWord(" WITH ")
ctx.WriteString(n.AuthPlugin)
}
if n.ByAuthString {
ctx.WriteKeyWord(" BY ")
ctx.WriteString(n.AuthString)
} else if n.ByHashString {
ctx.WriteKeyWord(" AS ")
ctx.WriteString(n.HashString)
}
return nil
}
// TraceStmt is a statement to trace what sql actually does at background.
type TraceStmt struct {
stmtNode
Stmt StmtNode
Format string
TracePlan bool
TracePlanTarget string
}
// Restore implements Node interface.
func (n *TraceStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("TRACE ")
if n.TracePlan {
ctx.WriteKeyWord("PLAN ")
if n.TracePlanTarget != "" {
ctx.WriteKeyWord("TARGET")
ctx.WritePlain(" = ")
ctx.WriteString(n.TracePlanTarget)
ctx.WritePlain(" ")
}
} else if n.Format != "row" {
ctx.WriteKeyWord("FORMAT")
ctx.WritePlain(" = ")
ctx.WriteString(n.Format)
ctx.WritePlain(" ")
}
if err := n.Stmt.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore TraceStmt.Stmt")
}
return nil
}
// Accept implements Node Accept interface.
func (n *TraceStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*TraceStmt)
node, ok := n.Stmt.Accept(v)
if !ok {
return n, false
}
n.Stmt = node.(StmtNode)
return v.Leave(n)
}
// ExplainForStmt is a statement to provite information about how is SQL statement executeing
// in connection #ConnectionID
// See https://dev.mysql.com/doc/refman/5.7/en/explain.html
type ExplainForStmt struct {
stmtNode
Format string
ConnectionID uint64
}
// Restore implements Node interface.
func (n *ExplainForStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("EXPLAIN ")
ctx.WriteKeyWord("FORMAT ")
ctx.WritePlain("= ")
ctx.WriteString(n.Format)
ctx.WritePlain(" ")
ctx.WriteKeyWord("FOR ")
ctx.WriteKeyWord("CONNECTION ")
ctx.WritePlain(strconv.FormatUint(n.ConnectionID, 10))
return nil
}
// Accept implements Node Accept interface.
func (n *ExplainForStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ExplainForStmt)
return v.Leave(n)
}
// ExplainStmt is a statement to provide information about how is SQL statement executed
// or get columns information in a table.
// See https://dev.mysql.com/doc/refman/5.7/en/explain.html
type ExplainStmt struct {
stmtNode
Stmt StmtNode
Format string
Analyze bool
// Explore indicates whether to use EXPLAIN EXPLORE.
Explore bool
// SQLDigest to explain, used in `EXPLAIN EXPLORE <sql_digest>`.
SQLDigest string
// PlanDigest to explain, used in `EXPLAIN [ANALYZE] <plan_digest>`.
PlanDigest string
}
// Restore implements Node interface.
func (n *ExplainStmt) Restore(ctx *format.RestoreCtx) error {
if showStmt, ok := n.Stmt.(*ShowStmt); ok {
ctx.WriteKeyWord("DESC ")
if err := showStmt.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ExplainStmt.ShowStmt.Table")
}
if showStmt.Column != nil {
ctx.WritePlain(" ")
if err := showStmt.Column.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ExplainStmt.ShowStmt.Column")
}
}
return nil
}
ctx.WriteKeyWord("EXPLAIN ")
if n.Analyze {
ctx.WriteKeyWord("ANALYZE ")
}
if n.Explore {
ctx.WriteKeyWord("EXPLORE ")
if n.SQLDigest != "" {
ctx.WriteString(n.SQLDigest)
}
} else if !n.Analyze || strings.ToLower(n.Format) != "row" {
ctx.WriteKeyWord("FORMAT ")
ctx.WritePlain("= ")
ctx.WriteString(n.Format)
ctx.WritePlain(" ")
}
if n.PlanDigest != "" {
ctx.WriteString(n.PlanDigest)
}
if n.Stmt != nil {
if err := n.Stmt.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ExplainStmt.Stmt")
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *ExplainStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ExplainStmt)
if n.Stmt != nil {
node, ok := n.Stmt.Accept(v)
if !ok {
return n, false
}
n.Stmt = node.(StmtNode)
}
return v.Leave(n)
}
// PlanReplayerStmt is a statement to dump or load information for recreating plans
type PlanReplayerStmt struct {
stmtNode
Stmt StmtNode
Analyze bool
Load bool
HistoricalStatsInfo *AsOfClause
// Capture indicates 'plan replayer capture <sql_digest> <plan_digest>'
Capture bool
// Remove indicates `plan replayer capture remove <sql_digest> <plan_digest>
Remove bool
SQLDigest string
PlanDigest string
// File is used to store 2 cases:
// 1. plan replayer load 'file';
// 2. plan replayer dump explain <analyze> 'file'
File string
// StmtList is used for PLAN REPLAYER DUMP EXPLAIN [ANALYZE] ( "sql1", "sql2", ... )
// When non-nil, multiple SQL strings are dumped in one command.
StmtList []string
// Fields below are currently useless.
// Where is the where clause in select statement.
Where ExprNode
// OrderBy is the ordering expression list.
OrderBy *OrderByClause
// Limit is the limit clause.
Limit *Limit
}
// Restore implements Node interface.
func (n *PlanReplayerStmt) Restore(ctx *format.RestoreCtx) error {
if n.Load {
ctx.WriteKeyWord("PLAN REPLAYER LOAD ")
ctx.WriteString(n.File)
return nil
}
if n.Capture {
ctx.WriteKeyWord("PLAN REPLAYER CAPTURE ")
ctx.WriteString(n.SQLDigest)
ctx.WriteKeyWord(" ")
ctx.WriteString(n.PlanDigest)
return nil
}
if n.Remove {
ctx.WriteKeyWord("PLAN REPLAYER CAPTURE REMOVE ")
ctx.WriteString(n.SQLDigest)
ctx.WriteKeyWord(" ")
ctx.WriteString(n.PlanDigest)
return nil
}
ctx.WriteKeyWord("PLAN REPLAYER DUMP ")
if n.HistoricalStatsInfo != nil {
ctx.WriteKeyWord("WITH STATS ")
if err := n.HistoricalStatsInfo.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore PlanReplayerStmt.HistoricalStatsInfo")
}
ctx.WriteKeyWord(" ")
}
if n.Analyze {
ctx.WriteKeyWord("EXPLAIN ANALYZE ")
} else {
ctx.WriteKeyWord("EXPLAIN ")
}
if len(n.StmtList) > 0 {
ctx.WritePlain("(")
for i, s := range n.StmtList {
if i > 0 {
ctx.WritePlain(", ")
}
ctx.WriteString(s)
}
ctx.WritePlain(")")
return nil
}
if n.Stmt == nil {
if len(n.File) > 0 {
ctx.WriteString(n.File)
return nil
}
ctx.WriteKeyWord("SLOW QUERY")
if n.Where != nil {
ctx.WriteKeyWord(" WHERE ")
if err := n.Where.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore PlanReplayerStmt.Where")
}
}
if n.OrderBy != nil {
ctx.WriteKeyWord(" ")
if err := n.OrderBy.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore PlanReplayerStmt.OrderBy")
}
}
if n.Limit != nil {
ctx.WriteKeyWord(" ")
if err := n.Limit.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore PlanReplayerStmt.Limit")
}
}
return nil
}
if err := n.Stmt.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore PlanReplayerStmt.Stmt")
}
return nil
}
// Accept implements Node Accept interface.
func (n *PlanReplayerStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*PlanReplayerStmt)
if n.Load {
return v.Leave(n)
}
if n.HistoricalStatsInfo != nil {
info, ok := n.HistoricalStatsInfo.Accept(v)
if !ok {
return n, false
}
n.HistoricalStatsInfo = info.(*AsOfClause)
}
if n.Stmt == nil {
if n.Where != nil {
node, ok := n.Where.Accept(v)
if !ok {
return n, false
}
n.Where = node.(ExprNode)
}
if n.OrderBy != nil {
node, ok := n.OrderBy.Accept(v)
if !ok {
return n, false
}
n.OrderBy = node.(*OrderByClause)
}
if n.Limit != nil {
node, ok := n.Limit.Accept(v)
if !ok {
return n, false
}
n.Limit = node.(*Limit)
}
return v.Leave(n)
}
node, ok := n.Stmt.Accept(v)
if !ok {
return n, false
}
n.Stmt = node.(StmtNode)
return v.Leave(n)
}
// TrafficOpType is traffic operation type.
type TrafficOpType int
const (
TrafficOpCapture TrafficOpType = iota
TrafficOpReplay
TrafficOpShow
TrafficOpCancel
)
// TrafficOptionType is traffic option type.
type TrafficOptionType int
const (
// capture options
TrafficOptionDuration TrafficOptionType = iota
TrafficOptionEncryptionMethod
TrafficOptionCompress
// replay options
TrafficOptionUsername
TrafficOptionPassword
TrafficOptionSpeed
TrafficOptionReadOnly
)
var _ SensitiveStmtNode = (*TrafficStmt)(nil)
// TrafficStmt is traffic operation statement.
type TrafficStmt struct {
stmtNode
OpType TrafficOpType
Options []*TrafficOption
Dir string
}
// TrafficOption is traffic option.
type TrafficOption struct {
OptionType TrafficOptionType
FloatValue ValueExpr
StrValue string
BoolValue bool
}
// Restore implements Node interface.
func (n *TrafficStmt) Restore(ctx *format.RestoreCtx) error {
switch n.OpType {
case TrafficOpCapture:
ctx.WriteKeyWord("TRAFFIC CAPTURE TO ")
ctx.WriteString(n.Dir)
for _, option := range n.Options {
ctx.WritePlain(" ")
switch option.OptionType {
case TrafficOptionDuration:
ctx.WriteKeyWord("DURATION ")
ctx.WritePlain("= ")
ctx.WriteString(option.StrValue)
case TrafficOptionEncryptionMethod:
ctx.WriteKeyWord("ENCRYPTION_METHOD ")
ctx.WritePlain("= ")
ctx.WriteString(option.StrValue)
case TrafficOptionCompress:
ctx.WriteKeyWord("COMPRESS ")
ctx.WritePlain("= ")
ctx.WritePlain(strings.ToUpper(fmt.Sprintf("%v", option.BoolValue)))
}
}
case TrafficOpReplay:
ctx.WriteKeyWord("TRAFFIC REPLAY FROM ")
ctx.WriteString(n.Dir)
for _, option := range n.Options {
ctx.WritePlain(" ")
switch option.OptionType {
case TrafficOptionUsername:
ctx.WriteKeyWord("USER ")
ctx.WritePlain("= ")
ctx.WriteString(option.StrValue)
case TrafficOptionPassword:
ctx.WriteKeyWord("PASSWORD ")
ctx.WritePlain("= ")
ctx.WriteString(option.StrValue)
case TrafficOptionSpeed:
ctx.WriteKeyWord("SPEED ")
ctx.WritePlain("= ")
ctx.WritePlainf("%v", option.FloatValue.GetValue())
case TrafficOptionReadOnly:
ctx.WriteKeyWord("READONLY ")
ctx.WritePlain("= ")
ctx.WritePlain(strings.ToUpper(fmt.Sprintf("%v", option.BoolValue)))
}
}
case TrafficOpShow:
ctx.WriteKeyWord("SHOW TRAFFIC JOBS")
case TrafficOpCancel:
ctx.WriteKeyWord("CANCEL TRAFFIC JOBS")
}
return nil
}
// SecureText implements SensitiveStatement interface.
func (n *TrafficStmt) SecureText() string {
trafficStmt := n
opts := n.Options
switch n.OpType {
case TrafficOpReplay:
opts = make([]*TrafficOption, 0, len(n.Options))
for _, opt := range n.Options {
if opt.OptionType == TrafficOptionPassword {
newOpt := *opt
newOpt.StrValue = "xxxxxx"
opt = &newOpt
}
opts = append(opts, opt)
}
fallthrough
case TrafficOpCapture:
trafficStmt = &TrafficStmt{
OpType: n.OpType,
Options: opts,
Dir: RedactURL(n.Dir),
}
}
var sb strings.Builder
_ = trafficStmt.Restore(format.NewRestoreCtx(format.DefaultRestoreFlags, &sb))
return sb.String()
}
// Accept implements Node Accept interface.
func (n *TrafficStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*TrafficStmt)
return v.Leave(n)
}
type CompactReplicaKind string
const (
// CompactReplicaKindAll means compacting both TiKV and TiFlash replicas.
CompactReplicaKindAll = "ALL"
// CompactReplicaKindTiFlash means compacting TiFlash replicas.
CompactReplicaKindTiFlash = "TIFLASH"
// CompactReplicaKindTiKV means compacting TiKV replicas.
CompactReplicaKindTiKV = "TIKV"
)
// CompactTableStmt is a statement to manually compact a table.
type CompactTableStmt struct {
stmtNode
Table *TableName
PartitionNames []CIStr
ReplicaKind CompactReplicaKind
}
// Restore implements Node interface.
func (n *CompactTableStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("ALTER TABLE ")
n.Table.restoreName(ctx)
ctx.WriteKeyWord(" COMPACT")
if len(n.PartitionNames) != 0 {
ctx.WriteKeyWord(" PARTITION ")
for i, partition := range n.PartitionNames {
if i != 0 {
ctx.WritePlain(",")
}
ctx.WriteName(partition.O)
}
}
if n.ReplicaKind != CompactReplicaKindAll {
ctx.WriteKeyWord(" ")
// Note: There is only TiFlash replica available now. TiKV will be added later.
ctx.WriteKeyWord(string(n.ReplicaKind))
ctx.WriteKeyWord(" REPLICA")
}
return nil
}
// Accept implements Node Accept interface.
func (n *CompactTableStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*CompactTableStmt)
node, ok := n.Table.Accept(v)
if !ok {
return n, false
}
n.Table = node.(*TableName)
return v.Leave(n)
}
// PrepareStmt is a statement to prepares a SQL statement which contains placeholders,
// and it is executed with ExecuteStmt and released with DeallocateStmt.
// See https://dev.mysql.com/doc/refman/5.7/en/prepare.html
type PrepareStmt struct {
stmtNode
Name string
SQLText string
SQLVar *VariableExpr
}
// Restore implements Node interface.
func (n *PrepareStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("PREPARE ")
ctx.WriteName(n.Name)
ctx.WriteKeyWord(" FROM ")
if n.SQLText != "" {
ctx.WriteString(n.SQLText)
return nil
}
if n.SQLVar != nil {
if err := n.SQLVar.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore PrepareStmt.SQLVar")
}
return nil
}
return errors.New("An error occurred while restore PrepareStmt")
}
// Accept implements Node Accept interface.
func (n *PrepareStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*PrepareStmt)
if n.SQLVar != nil {
node, ok := n.SQLVar.Accept(v)
if !ok {
return n, false
}
n.SQLVar = node.(*VariableExpr)
}
return v.Leave(n)
}
// DeallocateStmt is a statement to release PreparedStmt.
// See https://dev.mysql.com/doc/refman/5.7/en/deallocate-prepare.html
type DeallocateStmt struct {
stmtNode
Name string
}
// Restore implements Node interface.
func (n *DeallocateStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("DEALLOCATE PREPARE ")
ctx.WriteName(n.Name)
return nil
}
// Accept implements Node Accept interface.
func (n *DeallocateStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*DeallocateStmt)
return v.Leave(n)
}
// Prepared represents a prepared statement.
type Prepared struct {
Stmt StmtNode
StmtType string
}
// ExecuteStmt is a statement to execute PreparedStmt.
// See https://dev.mysql.com/doc/refman/5.7/en/execute.html
type ExecuteStmt struct {
stmtNode
Name string
UsingVars []ExprNode
BinaryArgs any
PrepStmt any // the corresponding prepared statement
PrepStmtId uint32
IdxInMulti int
// FromGeneralStmt indicates whether this execute-stmt is converted from a general query.
// e.g. select * from t where a>2 --> execute 'select * from t where a>?' using 2
FromGeneralStmt bool
}
// Restore implements Node interface.
func (n *ExecuteStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("EXECUTE ")
ctx.WriteName(n.Name)
if len(n.UsingVars) > 0 {
ctx.WriteKeyWord(" USING ")
for i, val := range n.UsingVars {
if i != 0 {
ctx.WritePlain(",")
}
if err := val.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore ExecuteStmt.UsingVars index %d", i)
}
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *ExecuteStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ExecuteStmt)
for i, val := range n.UsingVars {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.UsingVars[i] = node.(ExprNode)
}
return v.Leave(n)
}
// BeginStmt is a statement to start a new transaction.
// See https://dev.mysql.com/doc/refman/5.7/en/commit.html
type BeginStmt struct {
stmtNode
Mode string
CausalConsistencyOnly bool
ReadOnly bool
// AS OF is used to read the data at a specific point of time.
// Should only be used when ReadOnly is true.
AsOf *AsOfClause
}
// Restore implements Node interface.
func (n *BeginStmt) Restore(ctx *format.RestoreCtx) error {
if n.Mode == "" {
if n.ReadOnly {
ctx.WriteKeyWord("START TRANSACTION READ ONLY")
if n.AsOf != nil {
ctx.WriteKeyWord(" ")
return n.AsOf.Restore(ctx)
}
} else if n.CausalConsistencyOnly {
ctx.WriteKeyWord("START TRANSACTION WITH CAUSAL CONSISTENCY ONLY")
} else {
ctx.WriteKeyWord("START TRANSACTION")
}
} else {
ctx.WriteKeyWord("BEGIN ")
ctx.WriteKeyWord(n.Mode)
}
return nil
}
// Accept implements Node Accept interface.
func (n *BeginStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
if n.AsOf != nil {
node, ok := n.AsOf.Accept(v)
if !ok {
return n, false
}
n.AsOf = node.(*AsOfClause)
}
n = newNode.(*BeginStmt)
return v.Leave(n)
}
// BinlogStmt is an internal-use statement.
// We just parse and ignore it.
// See http://dev.mysql.com/doc/refman/5.7/en/binlog.html
type BinlogStmt struct {
stmtNode
Str string
}
// Restore implements Node interface.
func (n *BinlogStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("BINLOG ")
ctx.WriteString(n.Str)
return nil
}
// Accept implements Node Accept interface.
func (n *BinlogStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*BinlogStmt)
return v.Leave(n)
}
// CompletionType defines completion_type used in COMMIT and ROLLBACK statements
type CompletionType int8
const (
// CompletionTypeDefault refers to NO_CHAIN
CompletionTypeDefault CompletionType = iota
CompletionTypeChain
CompletionTypeRelease
)
func (n CompletionType) Restore(ctx *format.RestoreCtx) error {
switch n {
case CompletionTypeDefault:
case CompletionTypeChain:
ctx.WriteKeyWord(" AND CHAIN")
case CompletionTypeRelease:
ctx.WriteKeyWord(" RELEASE")
}
return nil
}
// CommitStmt is a statement to commit the current transaction.
// See https://dev.mysql.com/doc/refman/5.7/en/commit.html
type CommitStmt struct {
stmtNode
// CompletionType overwrites system variable `completion_type` within transaction
CompletionType CompletionType
}
// Restore implements Node interface.
func (n *CommitStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("COMMIT")
if err := n.CompletionType.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore CommitStmt.CompletionType")
}
return nil
}
// Accept implements Node Accept interface.
func (n *CommitStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*CommitStmt)
return v.Leave(n)
}
// RollbackStmt is a statement to roll back the current transaction.
// See https://dev.mysql.com/doc/refman/5.7/en/commit.html
type RollbackStmt struct {
stmtNode
// CompletionType overwrites system variable `completion_type` within transaction
CompletionType CompletionType
// SavepointName is the savepoint name.
SavepointName string
}
// Restore implements Node interface.
func (n *RollbackStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("ROLLBACK")
if n.SavepointName != "" {
ctx.WritePlain(" TO ")
ctx.WritePlain(n.SavepointName)
}
if err := n.CompletionType.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore RollbackStmt.CompletionType")
}
return nil
}
// Accept implements Node Accept interface.
func (n *RollbackStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*RollbackStmt)
return v.Leave(n)
}
// UseStmt is a statement to use the DBName database as the current database.
// See https://dev.mysql.com/doc/refman/5.7/en/use.html
type UseStmt struct {
stmtNode
DBName string
}
// Restore implements Node interface.
func (n *UseStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("USE ")
ctx.WriteName(n.DBName)
return nil
}
// Accept implements Node Accept interface.
func (n *UseStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*UseStmt)
return v.Leave(n)
}
const (
// SetNames is the const for set names stmt.
// If VariableAssignment.Name == Names, it should be set names stmt.
SetNames = "SetNAMES"
// SetCharset is the const for set charset stmt.
SetCharset = "SetCharset"
// TiDBCloudStorageURI is the const for set tidb_cloud_storage_uri stmt.
TiDBCloudStorageURI = "tidb_cloud_storage_uri"
// CloudStorageURI is similar to above tidb var, but it's used in import into
// to set a separate param for a single import job.
CloudStorageURI = "cloud_storage_uri"
)
// VariableAssignment is a variable assignment struct.
type VariableAssignment struct {
node
Name string
Value ExprNode
IsInstance bool
IsGlobal bool
IsSystem bool
// ExtendValue is a way to store extended info.
// VariableAssignment should be able to store information for SetCharset/SetPWD Stmt.
// For SetCharsetStmt, Value is charset, ExtendValue is collation.
// TODO: Use SetStmt to implement set password statement.
ExtendValue ValueExpr
}
// Restore implements Node interface.
func (n *VariableAssignment) Restore(ctx *format.RestoreCtx) error {
if n.IsSystem {
ctx.WritePlain("@@")
if n.IsGlobal {
ctx.WriteKeyWord("GLOBAL")
} else if n.IsInstance {
ctx.WriteKeyWord("INSTANCE")
} else {
ctx.WriteKeyWord("SESSION")
}
ctx.WritePlain(".")
} else if n.Name != SetNames && n.Name != SetCharset {
ctx.WriteKeyWord("@")
}
if n.Name == SetNames {
ctx.WriteKeyWord("NAMES ")
} else if n.Name == SetCharset {
ctx.WriteKeyWord("CHARSET ")
} else {
ctx.WriteName(n.Name)
ctx.WritePlain("=")
}
if n.Name == TiDBCloudStorageURI {
// need to redact the url for safety when `show processlist;`
ctx.WritePlain(RedactURL(n.Value.(ValueExpr).GetString()))
} else if err := n.Value.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore VariableAssignment.Value")
}
if n.ExtendValue != nil {
ctx.WriteKeyWord(" COLLATE ")
if err := n.ExtendValue.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore VariableAssignment.ExtendValue")
}
}
return nil
}
// Accept implements Node interface.
func (n *VariableAssignment) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*VariableAssignment)
node, ok := n.Value.Accept(v)
if !ok {
return n, false
}
n.Value = node.(ExprNode)
return v.Leave(n)
}
// FlushStmtType is the type for FLUSH statement.
type FlushStmtType int
// Flush statement types.
const (
FlushNone FlushStmtType = iota
FlushTables
FlushPrivileges
FlushStatus
FlushTiDBPlugin
FlushHosts
FlushLogs
FlushClientErrorsSummary
FlushStatsDelta
)
// LogType is the log type used in FLUSH statement.
type LogType int8
const (
LogTypeDefault LogType = iota
LogTypeBinary
LogTypeEngine
LogTypeError
LogTypeGeneral
LogTypeSlow
)
// FlushStmt is a statement to flush tables/privileges/optimizer costs and so on.
type FlushStmt struct {
stmtNode
Tp FlushStmtType // Privileges/Tables/...
NoWriteToBinLog bool
LogType LogType
Tables []*TableName // For FlushTableStmt, if Tables is empty, it means flush all tables.
ReadLock bool
Plugins []string
IsCluster bool // For FlushStatsDelta, whether to flush cluster-wide stats delta
FlushObjects []*StatsObject // For FlushStatsDelta, scoped objects (db.tbl, db.*, *.*). Always non-empty.
}
// Restore implements Node interface.
func (n *FlushStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("FLUSH ")
if n.NoWriteToBinLog {
ctx.WriteKeyWord("NO_WRITE_TO_BINLOG ")
}
switch n.Tp {
case FlushTables:
ctx.WriteKeyWord("TABLES")
for i, v := range n.Tables {
if i == 0 {
ctx.WritePlain(" ")
} else {
ctx.WritePlain(", ")
}
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore FlushStmt.Tables[%d]", i)
}
}
if n.ReadLock {
ctx.WriteKeyWord(" WITH READ LOCK")
}
case FlushPrivileges:
ctx.WriteKeyWord("PRIVILEGES")
case FlushStatus:
ctx.WriteKeyWord("STATUS")
case FlushTiDBPlugin:
ctx.WriteKeyWord("TIDB PLUGINS")
for i, v := range n.Plugins {
if i == 0 {
ctx.WritePlain(" ")
} else {
ctx.WritePlain(", ")
}
ctx.WritePlain(v)
}
case FlushHosts:
ctx.WriteKeyWord("HOSTS")
case FlushLogs:
var logType string
switch n.LogType {
case LogTypeDefault:
logType = "LOGS"
case LogTypeBinary:
logType = "BINARY LOGS"
case LogTypeEngine:
logType = "ENGINE LOGS"
case LogTypeError:
logType = "ERROR LOGS"
case LogTypeGeneral:
logType = "GENERAL LOGS"
case LogTypeSlow:
logType = "SLOW LOGS"
}
ctx.WriteKeyWord(logType)
case FlushClientErrorsSummary:
ctx.WriteKeyWord("CLIENT_ERRORS_SUMMARY")
case FlushStatsDelta:
ctx.WriteKeyWord("STATS_DELTA")
for i, obj := range n.FlushObjects {
if i == 0 {
ctx.WritePlain(" ")
} else {
ctx.WritePlain(", ")
}
if err := obj.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore FlushStmt.FlushObjects[%d]", i)
}
}
if n.IsCluster {
ctx.WritePlain(" ")
ctx.WriteKeyWord("CLUSTER")
}
default:
return errors.New("Unsupported type of FlushStmt")
}
return nil
}
// Accept implements Node Accept interface.
func (n *FlushStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*FlushStmt)
for i, t := range n.Tables {
node, ok := t.Accept(v)
if !ok {
return n, false
}
n.Tables[i] = node.(*TableName)
}
return v.Leave(n)
}
// KillStmt is a statement to kill a query or connection.
type KillStmt struct {
stmtNode
// Query indicates whether terminate a single query on this connection or the whole connection.
// If Query is true, terminates the statement the connection is currently executing, but leaves the connection itself intact.
// If Query is false, terminates the connection associated with the given ConnectionID, after terminating any statement the connection is executing.
Query bool
ConnectionID uint64
// TiDBExtension is used to indicate whether the user knows he is sending kill statement to the right tidb-server.
// When the SQL grammar is "KILL TIDB [CONNECTION | QUERY] connectionID", TiDBExtension will be set.
// It's a special grammar extension in TiDB. This extension exists because, when the connection is:
// client -> LVS proxy -> TiDB, and type Ctrl+C in client, the following action will be executed:
// new a connection; kill xxx;
// kill command may send to the wrong TiDB, because the exists of LVS proxy, and kill the wrong session.
// So, "KILL TIDB" grammar is introduced, and it REQUIRES DIRECT client -> TiDB TOPOLOGY.
// TODO: The standard KILL grammar will be supported once we have global connectionID.
TiDBExtension bool
Expr ExprNode
}
// Restore implements Node interface.
func (n *KillStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("KILL")
if n.TiDBExtension {
ctx.WriteKeyWord(" TIDB")
}
if n.Query {
ctx.WriteKeyWord(" QUERY")
}
if n.Expr != nil {
ctx.WriteKeyWord(" ")
if err := n.Expr.Restore(ctx); err != nil {
return errors.Trace(err)
}
} else {
ctx.WritePlainf(" %d", n.ConnectionID)
}
return nil
}
// Accept implements Node Accept interface.
func (n *KillStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*KillStmt)
return v.Leave(n)
}
// SavepointStmt is the statement of SAVEPOINT.
type SavepointStmt struct {
stmtNode
// Name is the savepoint name.
Name string
}
// Restore implements Node interface.
func (n *SavepointStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("SAVEPOINT ")
ctx.WritePlain(n.Name)
return nil
}
// Accept implements Node Accept interface.
func (n *SavepointStmt) Accept(v Visitor) (Node, bool) {
newNode, _ := v.Enter(n)
n = newNode.(*SavepointStmt)
return v.Leave(n)
}
// ReleaseSavepointStmt is the statement of RELEASE SAVEPOINT.
type ReleaseSavepointStmt struct {
stmtNode
// Name is the savepoint name.
Name string
}
// Restore implements Node interface.
func (n *ReleaseSavepointStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("RELEASE SAVEPOINT ")
ctx.WritePlain(n.Name)
return nil
}
// Accept implements Node Accept interface.
func (n *ReleaseSavepointStmt) Accept(v Visitor) (Node, bool) {
newNode, _ := v.Enter(n)
n = newNode.(*ReleaseSavepointStmt)
return v.Leave(n)
}
// SetStmt is the statement to set variables.
type SetStmt struct {
stmtNode
// Variables is the list of variable assignment.
Variables []*VariableAssignment
}
// Restore implements Node interface.
func (n *SetStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("SET ")
for i, v := range n.Variables {
if i != 0 {
ctx.WritePlain(", ")
}
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore SetStmt.Variables[%d]", i)
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *SetStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*SetStmt)
for i, val := range n.Variables {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.Variables[i] = node.(*VariableAssignment)
}
return v.Leave(n)
}
// SecureText implements SensitiveStatement interface.
// need to redact the tidb_cloud_storage_url for safety when `show processlist;`
func (n *SetStmt) SecureText() string {
redactedStmt := *n
var sb strings.Builder
_ = redactedStmt.Restore(format.NewRestoreCtx(format.DefaultRestoreFlags, &sb))
return sb.String()
}
// SetConfigStmt is the statement to set cluster configs.
type SetConfigStmt struct {
stmtNode
Type string // TiDB, TiKV, PD
Instance string // '127.0.0.1:3306'
Name string // the variable name
Value ExprNode
}
func (n *SetConfigStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("SET CONFIG ")
if n.Type != "" {
ctx.WriteKeyWord(n.Type)
} else {
ctx.WriteString(n.Instance)
}
ctx.WritePlain(" ")
ctx.WriteKeyWord(n.Name)
ctx.WritePlain(" = ")
return n.Value.Restore(ctx)
}
func (n *SetConfigStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*SetConfigStmt)
node, ok := n.Value.Accept(v)
if !ok {
return n, false
}
n.Value = node.(ExprNode)
return v.Leave(n)
}
// SetSessionStatesStmt is a statement to restore session states.
type SetSessionStatesStmt struct {
stmtNode
SessionStates string
}
func (n *SetSessionStatesStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("SET SESSION_STATES ")
ctx.WriteString(n.SessionStates)
return nil
}
func (n *SetSessionStatesStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*SetSessionStatesStmt)
return v.Leave(n)
}
/*
// SetCharsetStmt is a statement to assign values to character and collation variables.
// See https://dev.mysql.com/doc/refman/5.7/en/set-statement.html
type SetCharsetStmt struct {
stmtNode
Charset string
Collate string
}
// Accept implements Node Accept interface.
func (n *SetCharsetStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*SetCharsetStmt)
return v.Leave(n)
}
*/
// SetPwdStmt is a statement to assign a password to user account.
// See https://dev.mysql.com/doc/refman/5.7/en/set-password.html
type SetPwdStmt struct {
stmtNode
User *auth.UserIdentity
Password string
}
// Restore implements Node interface.
func (n *SetPwdStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("SET PASSWORD")
if n.User != nil {
ctx.WriteKeyWord(" FOR ")
if err := n.User.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore SetPwdStmt.User")
}
}
ctx.WritePlain("=")
ctx.WriteString(n.Password)
return nil
}
// SecureText implements SensitiveStatement interface.
func (n *SetPwdStmt) SecureText() string {
return fmt.Sprintf("set password for user %s", n.User)
}
// Accept implements Node Accept interface.
func (n *SetPwdStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*SetPwdStmt)
return v.Leave(n)
}
// SetRoleStmtType is the type for FLUSH statement.
type SetRoleStmtType int
// SetRole statement types.
const (
SetRoleDefault SetRoleStmtType = iota
SetRoleNone
SetRoleAll
SetRoleAllExcept
SetRoleRegular
)
type SetRoleStmt struct {
stmtNode
SetRoleOpt SetRoleStmtType
RoleList []*auth.RoleIdentity
}
func (n *SetRoleStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("SET ROLE")
switch n.SetRoleOpt {
case SetRoleDefault:
ctx.WriteKeyWord(" DEFAULT")
case SetRoleNone:
ctx.WriteKeyWord(" NONE")
case SetRoleAll:
ctx.WriteKeyWord(" ALL")
case SetRoleAllExcept:
ctx.WriteKeyWord(" ALL EXCEPT")
}
for i, role := range n.RoleList {
ctx.WritePlain(" ")
err := role.Restore(ctx)
if err != nil {
return errors.Annotate(err, "An error occurred while restore SetRoleStmt.RoleList")
}
if i != len(n.RoleList)-1 {
ctx.WritePlain(",")
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *SetRoleStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*SetRoleStmt)
return v.Leave(n)
}
type SetDefaultRoleStmt struct {
stmtNode
SetRoleOpt SetRoleStmtType
RoleList []*auth.RoleIdentity
UserList []*auth.UserIdentity
}
func (n *SetDefaultRoleStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("SET DEFAULT ROLE")
switch n.SetRoleOpt {
case SetRoleNone:
ctx.WriteKeyWord(" NONE")
case SetRoleAll:
ctx.WriteKeyWord(" ALL")
default:
}
for i, role := range n.RoleList {
ctx.WritePlain(" ")
err := role.Restore(ctx)
if err != nil {
return errors.Annotate(err, "An error occurred while restore SetDefaultRoleStmt.RoleList")
}
if i != len(n.RoleList)-1 {
ctx.WritePlain(",")
}
}
ctx.WritePlain(" TO")
for i, user := range n.UserList {
ctx.WritePlain(" ")
err := user.Restore(ctx)
if err != nil {
return errors.Annotate(err, "An error occurred while restore SetDefaultRoleStmt.UserList")
}
if i != len(n.UserList)-1 {
ctx.WritePlain(",")
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *SetDefaultRoleStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*SetDefaultRoleStmt)
return v.Leave(n)
}
// UserSpec is used for parsing create user statement.
type UserSpec struct {
User *auth.UserIdentity
AuthOpt *AuthOption
IsRole bool
}
// Restore implements Node interface.
func (n *UserSpec) Restore(ctx *format.RestoreCtx) error {
if err := n.User.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore UserSpec.User")
}
if n.AuthOpt != nil {
ctx.WritePlain(" ")
if err := n.AuthOpt.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore UserSpec.AuthOpt")
}
}
return nil
}
// SecurityString formats the UserSpec without password information.
func (n *UserSpec) SecurityString() string {
withPassword := false
if opt := n.AuthOpt; opt != nil {
if len(opt.AuthString) > 0 || len(opt.HashString) > 0 {
withPassword = true
}
}
if withPassword {
return fmt.Sprintf("{%s password = ***}", n.User)
}
return n.User.String()
}
type AuthTokenOrTLSOption struct {
Type AuthTokenOrTLSOptionType
Value string
}
func (t *AuthTokenOrTLSOption) Restore(ctx *format.RestoreCtx) error {
switch t.Type {
case TlsNone:
ctx.WriteKeyWord("NONE")
case Ssl:
ctx.WriteKeyWord("SSL")
case X509:
ctx.WriteKeyWord("X509")
case Cipher:
ctx.WriteKeyWord("CIPHER ")
ctx.WriteString(t.Value)
case Issuer:
ctx.WriteKeyWord("ISSUER ")
ctx.WriteString(t.Value)
case Subject:
ctx.WriteKeyWord("SUBJECT ")
ctx.WriteString(t.Value)
case SAN:
ctx.WriteKeyWord("SAN ")
ctx.WriteString(t.Value)
case TokenIssuer:
ctx.WriteKeyWord("TOKEN_ISSUER ")
ctx.WriteString(t.Value)
default:
return errors.Errorf("Unsupported AuthTokenOrTLSOption.Type %d", t.Type)
}
return nil
}
type AuthTokenOrTLSOptionType int
const (
TlsNone AuthTokenOrTLSOptionType = iota
Ssl
X509
Cipher
Issuer
Subject
SAN
TokenIssuer
)
func (t AuthTokenOrTLSOptionType) String() string {
switch t {
case TlsNone:
return "NONE"
case Ssl:
return "SSL"
case X509:
return "X509"
case Cipher:
return "CIPHER"
case Issuer:
return "ISSUER"
case Subject:
return "SUBJECT"
case SAN:
return "SAN"
case TokenIssuer:
return "TOKEN_ISSUER"
default:
return "UNKNOWN"
}
}
const (
MaxQueriesPerHour = iota + 1
MaxUpdatesPerHour
MaxConnectionsPerHour
MaxUserConnections
)
type ResourceOption struct {
Type int
Count int64
}
func (r *ResourceOption) Restore(ctx *format.RestoreCtx) error {
switch r.Type {
case MaxQueriesPerHour:
ctx.WriteKeyWord("MAX_QUERIES_PER_HOUR ")
case MaxUpdatesPerHour:
ctx.WriteKeyWord("MAX_UPDATES_PER_HOUR ")
case MaxConnectionsPerHour:
ctx.WriteKeyWord("MAX_CONNECTIONS_PER_HOUR ")
case MaxUserConnections:
ctx.WriteKeyWord("MAX_USER_CONNECTIONS ")
default:
return errors.Errorf("Unsupported ResourceOption.Type %d", r.Type)
}
ctx.WritePlainf("%d", r.Count)
return nil
}
const (
PasswordExpire = iota + 1
PasswordExpireDefault
PasswordExpireNever
PasswordExpireInterval
PasswordHistory
PasswordHistoryDefault
PasswordReuseInterval
PasswordReuseDefault
Lock
Unlock
FailedLoginAttempts
PasswordLockTime
PasswordLockTimeUnbounded
UserCommentType
UserAttributeType
PasswordRequireCurrentDefault
UserResourceGroupName
)
type PasswordOrLockOption struct {
Type int
Count int64
}
func (p *PasswordOrLockOption) Restore(ctx *format.RestoreCtx) error {
switch p.Type {
case PasswordExpire:
ctx.WriteKeyWord("PASSWORD EXPIRE")
case PasswordExpireDefault:
ctx.WriteKeyWord("PASSWORD EXPIRE DEFAULT")
case PasswordExpireNever:
ctx.WriteKeyWord("PASSWORD EXPIRE NEVER")
case PasswordExpireInterval:
ctx.WriteKeyWord("PASSWORD EXPIRE INTERVAL")
ctx.WritePlainf(" %d", p.Count)
ctx.WriteKeyWord(" DAY")
case Lock:
ctx.WriteKeyWord("ACCOUNT LOCK")
case Unlock:
ctx.WriteKeyWord("ACCOUNT UNLOCK")
case FailedLoginAttempts:
ctx.WriteKeyWord("FAILED_LOGIN_ATTEMPTS")
ctx.WritePlainf(" %d", p.Count)
case PasswordLockTime:
ctx.WriteKeyWord("PASSWORD_LOCK_TIME")
ctx.WritePlainf(" %d", p.Count)
case PasswordLockTimeUnbounded:
ctx.WriteKeyWord("PASSWORD_LOCK_TIME UNBOUNDED")
case PasswordHistory:
ctx.WriteKeyWord("PASSWORD HISTORY")
ctx.WritePlainf(" %d", p.Count)
case PasswordHistoryDefault:
ctx.WriteKeyWord("PASSWORD HISTORY DEFAULT")
case PasswordReuseInterval:
ctx.WriteKeyWord("PASSWORD REUSE INTERVAL")
ctx.WritePlainf(" %d", p.Count)
ctx.WriteKeyWord(" DAY")
case PasswordReuseDefault:
ctx.WriteKeyWord("PASSWORD REUSE INTERVAL DEFAULT")
default:
return errors.Errorf("Unsupported PasswordOrLockOption.Type %d", p.Type)
}
return nil
}
type CommentOrAttributeOption struct {
Type int
Value string
}
func (c *CommentOrAttributeOption) Restore(ctx *format.RestoreCtx) error {
if c.Type == UserCommentType {
ctx.WriteKeyWord(" COMMENT ")
ctx.WriteString(c.Value)
} else if c.Type == UserAttributeType {
ctx.WriteKeyWord(" ATTRIBUTE ")
ctx.WriteString(c.Value)
}
return nil
}
type ResourceGroupNameOption struct {
Value string
}
func (c *ResourceGroupNameOption) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord(" RESOURCE GROUP ")
ctx.WriteName(c.Value)
return nil
}
// CreateUserStmt creates user account.
// See https://dev.mysql.com/doc/refman/8.0/en/create-user.html
type CreateUserStmt struct {
stmtNode
IsCreateRole bool
IfNotExists bool
Specs []*UserSpec
AuthTokenOrTLSOptions []*AuthTokenOrTLSOption
ResourceOptions []*ResourceOption
PasswordOrLockOptions []*PasswordOrLockOption
CommentOrAttributeOption *CommentOrAttributeOption
ResourceGroupNameOption *ResourceGroupNameOption
}
// Restore implements Node interface.
func (n *CreateUserStmt) Restore(ctx *format.RestoreCtx) error {
if n.IsCreateRole {
ctx.WriteKeyWord("CREATE ROLE ")
} else {
ctx.WriteKeyWord("CREATE USER ")
}
if n.IfNotExists {
ctx.WriteKeyWord("IF NOT EXISTS ")
}
for i, v := range n.Specs {
if i != 0 {
ctx.WritePlain(", ")
}
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore CreateUserStmt.Specs[%d]", i)
}
}
if len(n.AuthTokenOrTLSOptions) != 0 {
ctx.WriteKeyWord(" REQUIRE ")
}
for i, option := range n.AuthTokenOrTLSOptions {
if i != 0 {
ctx.WriteKeyWord(" AND ")
}
if err := option.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore CreateUserStmt.AuthTokenOrTLSOptions[%d]", i)
}
}
if len(n.ResourceOptions) != 0 {
ctx.WriteKeyWord(" WITH")
}
for i, v := range n.ResourceOptions {
ctx.WritePlain(" ")
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore CreateUserStmt.ResourceOptions[%d]", i)
}
}
for i, v := range n.PasswordOrLockOptions {
ctx.WritePlain(" ")
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore CreateUserStmt.PasswordOrLockOptions[%d]", i)
}
}
if n.CommentOrAttributeOption != nil {
if err := n.CommentOrAttributeOption.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore CreateUserStmt.CommentOrAttributeOption")
}
}
if n.ResourceGroupNameOption != nil {
if err := n.ResourceGroupNameOption.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore CreateUserStmt.ResourceGroupNameOption")
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *CreateUserStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*CreateUserStmt)
return v.Leave(n)
}
// SecureText implements SensitiveStatement interface.
func (n *CreateUserStmt) SecureText() string {
var buf bytes.Buffer
buf.WriteString("create user")
for _, user := range n.Specs {
buf.WriteString(" ")
buf.WriteString(user.SecurityString())
}
return buf.String()
}
// AlterUserStmt modifies user account.
// See https://dev.mysql.com/doc/refman/8.0/en/alter-user.html
type AlterUserStmt struct {
stmtNode
IfExists bool
CurrentAuth *AuthOption
Specs []*UserSpec
AuthTokenOrTLSOptions []*AuthTokenOrTLSOption
ResourceOptions []*ResourceOption
PasswordOrLockOptions []*PasswordOrLockOption
CommentOrAttributeOption *CommentOrAttributeOption
ResourceGroupNameOption *ResourceGroupNameOption
}
// Restore implements Node interface.
func (n *AlterUserStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("ALTER USER ")
if n.IfExists {
ctx.WriteKeyWord("IF EXISTS ")
}
if n.CurrentAuth != nil {
ctx.WriteKeyWord("USER")
ctx.WritePlain("() ")
if err := n.CurrentAuth.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore AlterUserStmt.CurrentAuth")
}
}
for i, v := range n.Specs {
if i != 0 {
ctx.WritePlain(", ")
}
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore AlterUserStmt.Specs[%d]", i)
}
}
if len(n.AuthTokenOrTLSOptions) != 0 {
ctx.WriteKeyWord(" REQUIRE ")
}
for i, option := range n.AuthTokenOrTLSOptions {
if i != 0 {
ctx.WriteKeyWord(" AND ")
}
if err := option.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore AlterUserStmt.AuthTokenOrTLSOptions[%d]", i)
}
}
if len(n.ResourceOptions) != 0 {
ctx.WriteKeyWord(" WITH")
}
for i, v := range n.ResourceOptions {
ctx.WritePlain(" ")
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore AlterUserStmt.ResourceOptions[%d]", i)
}
}
for i, v := range n.PasswordOrLockOptions {
ctx.WritePlain(" ")
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore AlterUserStmt.PasswordOrLockOptions[%d]", i)
}
}
if n.CommentOrAttributeOption != nil {
if err := n.CommentOrAttributeOption.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore AlterUserStmt.CommentOrAttributeOption")
}
}
if n.ResourceGroupNameOption != nil {
if err := n.ResourceGroupNameOption.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore AlterUserStmt.ResourceGroupNameOption")
}
}
return nil
}
// SecureText implements SensitiveStatement interface.
func (n *AlterUserStmt) SecureText() string {
var buf bytes.Buffer
buf.WriteString("alter user")
for _, user := range n.Specs {
buf.WriteString(" ")
buf.WriteString(user.SecurityString())
}
return buf.String()
}
// Accept implements Node Accept interface.
func (n *AlterUserStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*AlterUserStmt)
return v.Leave(n)
}
// AlterInstanceStmt modifies instance.
// See https://dev.mysql.com/doc/refman/8.0/en/alter-instance.html
type AlterInstanceStmt struct {
stmtNode
ReloadTLS bool
NoRollbackOnError bool
}
// Restore implements Node interface.
func (n *AlterInstanceStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("ALTER INSTANCE")
if n.ReloadTLS {
ctx.WriteKeyWord(" RELOAD TLS")
}
if n.NoRollbackOnError {
ctx.WriteKeyWord(" NO ROLLBACK ON ERROR")
}
return nil
}
// Accept implements Node Accept interface.
func (n *AlterInstanceStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*AlterInstanceStmt)
return v.Leave(n)
}
// AlterRangeStmt modifies range configuration.
type AlterRangeStmt struct {
stmtNode
RangeName CIStr
PlacementOption *PlacementOption
}
// Restore implements Node interface.
func (n *AlterRangeStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("ALTER RANGE ")
ctx.WriteName(n.RangeName.O)
ctx.WritePlain(" ")
if err := n.PlacementOption.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore AlterRangeStmt.PlacementOption")
}
return nil
}
// Accept implements Node Accept interface.
func (n *AlterRangeStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*AlterRangeStmt)
return v.Leave(n)
}
// DropUserStmt creates user account.
// See http://dev.mysql.com/doc/refman/5.7/en/drop-user.html
type DropUserStmt struct {
stmtNode
IfExists bool
IsDropRole bool
UserList []*auth.UserIdentity
}
// Restore implements Node interface.
func (n *DropUserStmt) Restore(ctx *format.RestoreCtx) error {
if n.IsDropRole {
ctx.WriteKeyWord("DROP ROLE ")
} else {
ctx.WriteKeyWord("DROP USER ")
}
if n.IfExists {
ctx.WriteKeyWord("IF EXISTS ")
}
for i, v := range n.UserList {
if i != 0 {
ctx.WritePlain(", ")
}
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore DropUserStmt.UserList[%d]", i)
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *DropUserStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*DropUserStmt)
return v.Leave(n)
}
type StringOrUserVar struct {
node
StringLit string
UserVar *VariableExpr
}
func (n *StringOrUserVar) Restore(ctx *format.RestoreCtx) error {
if len(n.StringLit) > 0 {
ctx.WriteString(n.StringLit)
}
if n.UserVar != nil {
if err := n.UserVar.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ColumnNameOrUserVar.UserVar")
}
}
return nil
}
func (n *StringOrUserVar) Accept(v Visitor) (node Node, ok bool) {
newNode, skipChild := v.Enter(n)
if skipChild {
return v.Leave(newNode)
}
n = newNode.(*StringOrUserVar)
if n.UserVar != nil {
node, ok = n.UserVar.Accept(v)
if !ok {
return node, false
}
n.UserVar = node.(*VariableExpr)
}
return v.Leave(n)
}
// RecommendIndexOption is the option for recommend index.
type RecommendIndexOption struct {
Option string
Value ValueExpr
}
// RecommendIndexStmt is a statement to recommend index.
type RecommendIndexStmt struct {
stmtNode
Action string
SQL string
ID int64
Options []RecommendIndexOption
}
func (n *RecommendIndexStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("RECOMMEND INDEX")
switch n.Action {
case "run":
ctx.WriteKeyWord(" RUN")
if n.SQL != "" {
ctx.WriteKeyWord(" FOR ")
ctx.WriteString(n.SQL)
}
if len(n.Options) > 0 {
ctx.WriteKeyWord(" WITH ")
for i, opt := range n.Options {
if i != 0 {
ctx.WritePlain(", ")
}
ctx.WriteKeyWord(opt.Option)
ctx.WritePlain(" = ")
if err := opt.Value.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore RecommendIndexStmt.Options[%d]", i)
}
}
}
case "show":
ctx.WriteKeyWord(" SHOW OPTION")
case "apply":
ctx.WriteKeyWord(" APPLY ")
ctx.WriteKeyWord(fmt.Sprintf("%d", n.ID))
case "ignore":
ctx.WriteKeyWord(" IGNORE ")
ctx.WriteKeyWord(fmt.Sprintf("%d", n.ID))
case "set":
ctx.WriteKeyWord(" SET ")
for i, opt := range n.Options {
if i != 0 {
ctx.WritePlain(", ")
}
ctx.WriteKeyWord(opt.Option)
ctx.WritePlain(" = ")
if err := opt.Value.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore RecommendIndexStmt.Options[%d]", i)
}
}
}
return nil
}
func (n *RecommendIndexStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*RecommendIndexStmt)
return v.Leave(n)
}
// CreateBindingStmt creates sql binding hint.
type CreateBindingStmt struct {
stmtNode
GlobalScope bool
OriginNode StmtNode
HintedNode StmtNode
PlanDigests []*StringOrUserVar
}
func (n *CreateBindingStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("CREATE ")
if n.GlobalScope {
ctx.WriteKeyWord("GLOBAL ")
} else {
ctx.WriteKeyWord("SESSION ")
}
if n.OriginNode == nil {
ctx.WriteKeyWord("BINDING FROM HISTORY USING PLAN DIGEST ")
for i, v := range n.PlanDigests {
if i != 0 {
ctx.WritePlain(", ")
}
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore CreateBindingStmt.PlanDigests[%d]", i)
}
}
} else {
ctx.WriteKeyWord("BINDING FOR ")
if err := n.OriginNode.Restore(ctx); err != nil {
return errors.Trace(err)
}
ctx.WriteKeyWord(" USING ")
if err := n.HintedNode.Restore(ctx); err != nil {
return errors.Trace(err)
}
}
return nil
}
func (n *CreateBindingStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*CreateBindingStmt)
if n.OriginNode != nil {
origNode, ok := n.OriginNode.Accept(v)
if !ok {
return n, false
}
n.OriginNode = origNode.(StmtNode)
hintedNode, ok := n.HintedNode.Accept(v)
if !ok {
return n, false
}
n.HintedNode = hintedNode.(StmtNode)
} else {
for i, digest := range n.PlanDigests {
newDigest, ok := digest.Accept(v)
if !ok {
return n, false
}
n.PlanDigests[i] = newDigest.(*StringOrUserVar)
}
}
return v.Leave(n)
}
// DropBindingStmt deletes sql binding hint.
type DropBindingStmt struct {
stmtNode
GlobalScope bool
OriginNode StmtNode
HintedNode StmtNode
SQLDigests []*StringOrUserVar
}
func (n *DropBindingStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("DROP ")
if n.GlobalScope {
ctx.WriteKeyWord("GLOBAL ")
} else {
ctx.WriteKeyWord("SESSION ")
}
ctx.WriteKeyWord("BINDING FOR ")
if n.OriginNode == nil {
ctx.WriteKeyWord("SQL DIGEST ")
for i, v := range n.SQLDigests {
if i != 0 {
ctx.WritePlain(", ")
}
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore CreateBindingStmt.PlanDigests[%d]", i)
}
}
} else {
if err := n.OriginNode.Restore(ctx); err != nil {
return errors.Trace(err)
}
if n.HintedNode != nil {
ctx.WriteKeyWord(" USING ")
if err := n.HintedNode.Restore(ctx); err != nil {
return errors.Trace(err)
}
}
}
return nil
}
func (n *DropBindingStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*DropBindingStmt)
if n.OriginNode != nil {
// OriginNode is nil means we build drop binding by sql digest
origNode, ok := n.OriginNode.Accept(v)
if !ok {
return n, false
}
n.OriginNode = origNode.(StmtNode)
if n.HintedNode != nil {
hintedNode, ok := n.HintedNode.Accept(v)
if !ok {
return n, false
}
n.HintedNode = hintedNode.(StmtNode)
}
} else {
for i, digest := range n.SQLDigests {
newDigest, ok := digest.Accept(v)
if !ok {
return n, false
}
n.SQLDigests[i] = newDigest.(*StringOrUserVar)
}
}
return v.Leave(n)
}
// BindingStatusType defines the status type for the binding
type BindingStatusType int8
// Binding status types.
const (
BindingStatusTypeEnabled BindingStatusType = iota
BindingStatusTypeDisabled
)
// SetBindingStmt sets sql binding status.
type SetBindingStmt struct {
stmtNode
BindingStatusType BindingStatusType
OriginNode StmtNode
HintedNode StmtNode
SQLDigest string
}
func (n *SetBindingStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("SET ")
ctx.WriteKeyWord("BINDING ")
switch n.BindingStatusType {
case BindingStatusTypeEnabled:
ctx.WriteKeyWord("ENABLED ")
case BindingStatusTypeDisabled:
ctx.WriteKeyWord("DISABLED ")
}
ctx.WriteKeyWord("FOR ")
if n.OriginNode == nil {
ctx.WriteKeyWord("SQL DIGEST ")
ctx.WriteString(n.SQLDigest)
} else {
if err := n.OriginNode.Restore(ctx); err != nil {
return errors.Trace(err)
}
if n.HintedNode != nil {
ctx.WriteKeyWord(" USING ")
if err := n.HintedNode.Restore(ctx); err != nil {
return errors.Trace(err)
}
}
}
return nil
}
func (n *SetBindingStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*SetBindingStmt)
if n.OriginNode != nil {
// OriginNode is nil means we set binding stmt by sql digest
origNode, ok := n.OriginNode.Accept(v)
if !ok {
return n, false
}
n.OriginNode = origNode.(StmtNode)
if n.HintedNode != nil {
hintedNode, ok := n.HintedNode.Accept(v)
if !ok {
return n, false
}
n.HintedNode = hintedNode.(StmtNode)
}
}
return v.Leave(n)
}
// Extended statistics types.
const (
StatsTypeCardinality uint8 = iota
StatsTypeDependency
StatsTypeCorrelation
)
// StatisticsSpec is the specification for ADD /DROP STATISTICS.
type StatisticsSpec struct {
StatsName string
StatsType uint8
Columns []*ColumnName
}
// CreateStatisticsStmt is a statement to create extended statistics.
// Examples:
//
// CREATE STATISTICS stats1 (cardinality) ON t(a, b, c);
// CREATE STATISTICS stats2 (dependency) ON t(a, b);
// CREATE STATISTICS stats3 (correlation) ON t(a, b);
type CreateStatisticsStmt struct {
stmtNode
IfNotExists bool
StatsName string
StatsType uint8
Table *TableName
Columns []*ColumnName
}
// Restore implements Node interface.
func (n *CreateStatisticsStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("CREATE STATISTICS ")
if n.IfNotExists {
ctx.WriteKeyWord("IF NOT EXISTS ")
}
ctx.WriteName(n.StatsName)
switch n.StatsType {
case StatsTypeCardinality:
ctx.WriteKeyWord(" (cardinality) ")
case StatsTypeDependency:
ctx.WriteKeyWord(" (dependency) ")
case StatsTypeCorrelation:
ctx.WriteKeyWord(" (correlation) ")
}
ctx.WriteKeyWord("ON ")
if err := n.Table.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore CreateStatisticsStmt.Table")
}
ctx.WritePlain("(")
for i, col := range n.Columns {
if i != 0 {
ctx.WritePlain(", ")
}
if err := col.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore CreateStatisticsStmt.Columns: [%v]", i)
}
}
ctx.WritePlain(")")
return nil
}
// Accept implements Node Accept interface.
func (n *CreateStatisticsStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*CreateStatisticsStmt)
node, ok := n.Table.Accept(v)
if !ok {
return n, false
}
n.Table = node.(*TableName)
for i, col := range n.Columns {
node, ok = col.Accept(v)
if !ok {
return n, false
}
n.Columns[i] = node.(*ColumnName)
}
return v.Leave(n)
}
// DropStatisticsStmt is a statement to drop extended statistics.
// Examples:
//
// DROP STATISTICS stats1;
type DropStatisticsStmt struct {
stmtNode
StatsName string
}
// Restore implements Node interface.
func (n *DropStatisticsStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("DROP STATISTICS ")
ctx.WriteName(n.StatsName)
return nil
}
// Accept implements Node Accept interface.
func (n *DropStatisticsStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*DropStatisticsStmt)
return v.Leave(n)
}
// DoStmt is the struct for DO statement.
type DoStmt struct {
stmtNode
Exprs []ExprNode
}
// Restore implements Node interface.
func (n *DoStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("DO ")
for i, v := range n.Exprs {
if i != 0 {
ctx.WritePlain(", ")
}
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore DoStmt.Exprs[%d]", i)
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *DoStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*DoStmt)
for i, val := range n.Exprs {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.Exprs[i] = node.(ExprNode)
}
return v.Leave(n)
}
// AdminStmtType is the type for admin statement.
type AdminStmtType int
// Admin statement types.
const (
AdminShowDDL AdminStmtType = iota + 1
AdminCheckTable
AdminShowDDLJobs
AdminCancelDDLJobs
AdminPauseDDLJobs
AdminResumeDDLJobs
AdminCheckIndex
AdminRecoverIndex
AdminCleanupIndex
AdminCheckIndexRange
AdminShowDDLJobQueries
AdminShowDDLJobQueriesWithRange
AdminChecksumTable
AdminShowSlow
AdminShowNextRowID
AdminReloadExprPushdownBlacklist
AdminReloadOptRuleBlacklist
AdminPluginDisable
AdminPluginEnable
AdminFlushBindings
AdminCaptureBindings
AdminEvolveBindings
AdminReloadBindings
AdminReloadStatistics
AdminFlushPlanCache
AdminSetBDRRole
AdminShowBDRRole
AdminUnsetBDRRole
AdminAlterDDLJob
AdminWorkloadRepoCreate
AdminReloadClusterBindings
// adminTpCount is the total number of admin statement types.
adminTpCount
)
// HandleRange represents a range where handle value >= Begin and < End.
type HandleRange struct {
Begin int64
End int64
}
// BDRRole represents the role of the cluster in BDR mode.
type BDRRole string
const (
BDRRolePrimary BDRRole = "primary"
BDRRoleSecondary BDRRole = "secondary"
BDRRoleNone BDRRole = ""
)
type StatementScope int
const (
StatementScopeNone StatementScope = iota
StatementScopeSession
StatementScopeInstance
StatementScopeGlobal
)
// ShowSlowType defines the type for SlowSlow statement.
type ShowSlowType int
const (
// ShowSlowTop is a ShowSlowType constant.
ShowSlowTop ShowSlowType = iota
// ShowSlowRecent is a ShowSlowType constant.
ShowSlowRecent
)
// ShowSlowKind defines the kind for SlowSlow statement when the type is ShowSlowTop.
type ShowSlowKind int
const (
// ShowSlowKindDefault is a ShowSlowKind constant.
ShowSlowKindDefault ShowSlowKind = iota
// ShowSlowKindInternal is a ShowSlowKind constant.
ShowSlowKindInternal
// ShowSlowKindAll is a ShowSlowKind constant.
ShowSlowKindAll
)
// ShowSlow is used for the following command:
//
// admin show slow top [ internal | all] N
// admin show slow recent N
type ShowSlow struct {
Tp ShowSlowType
Count uint64
Kind ShowSlowKind
}
// Restore implements Node interface.
func (n *ShowSlow) Restore(ctx *format.RestoreCtx) error {
switch n.Tp {
case ShowSlowRecent:
ctx.WriteKeyWord("RECENT ")
case ShowSlowTop:
ctx.WriteKeyWord("TOP ")
switch n.Kind {
case ShowSlowKindDefault:
// do nothing
case ShowSlowKindInternal:
ctx.WriteKeyWord("INTERNAL ")
case ShowSlowKindAll:
ctx.WriteKeyWord("ALL ")
default:
return errors.New("Unsupported kind of ShowSlowTop")
}
default:
return errors.New("Unsupported type of ShowSlow")
}
ctx.WritePlainf("%d", n.Count)
return nil
}
// LimitSimple is the struct for Admin statement limit option.
type LimitSimple struct {
Count uint64
Offset uint64
}
type AlterJobOption struct {
// Name is the name of the option, will be converted to lower case during parse.
Name string
// only literal is allowed, we use ExprNode to support negative number
Value ExprNode
}
func (l *AlterJobOption) Restore(ctx *format.RestoreCtx) error {
if l.Value == nil {
ctx.WritePlain(l.Name)
} else {
ctx.WritePlain(l.Name + " = ")
if err := l.Value.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore AlterJobOption")
}
}
return nil
}
// AdminStmt is the struct for Admin statement.
type AdminStmt struct {
stmtNode
Tp AdminStmtType
Index string
Tables []*TableName
JobIDs []int64
JobNumber int64
HandleRanges []HandleRange
ShowSlow *ShowSlow
Plugins []string
Where ExprNode
StatementScope StatementScope
LimitSimple LimitSimple
BDRRole BDRRole
AlterJobOptions []*AlterJobOption
}
// Restore implements Node interface.
func (n *AdminStmt) Restore(ctx *format.RestoreCtx) error {
restoreTables := func() error {
for i, v := range n.Tables {
if i != 0 {
ctx.WritePlain(", ")
}
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore AdminStmt.Tables[%d]", i)
}
}
return nil
}
restoreJobIDs := func() {
for i, v := range n.JobIDs {
if i != 0 {
ctx.WritePlain(", ")
}
ctx.WritePlainf("%d", v)
}
}
ctx.WriteKeyWord("ADMIN ")
switch n.Tp {
case AdminShowDDL:
ctx.WriteKeyWord("SHOW DDL")
case AdminShowDDLJobs:
ctx.WriteKeyWord("SHOW DDL JOBS")
if n.JobNumber != 0 {
ctx.WritePlainf(" %d", n.JobNumber)
}
if n.Where != nil {
ctx.WriteKeyWord(" WHERE ")
if err := n.Where.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore ShowStmt.Where")
}
}
case AdminShowNextRowID:
ctx.WriteKeyWord("SHOW ")
if err := restoreTables(); err != nil {
return err
}
ctx.WriteKeyWord(" NEXT_ROW_ID")
case AdminCheckTable:
ctx.WriteKeyWord("CHECK TABLE ")
if err := restoreTables(); err != nil {
return err
}
case AdminCheckIndex:
ctx.WriteKeyWord("CHECK INDEX ")
if err := restoreTables(); err != nil {
return err
}
ctx.WritePlainf(" %s", n.Index)
case AdminRecoverIndex:
ctx.WriteKeyWord("RECOVER INDEX ")
if err := restoreTables(); err != nil {
return err
}
ctx.WritePlainf(" %s", n.Index)
case AdminCleanupIndex:
ctx.WriteKeyWord("CLEANUP INDEX ")
if err := restoreTables(); err != nil {
return err
}
ctx.WritePlainf(" %s", n.Index)
case AdminCheckIndexRange:
ctx.WriteKeyWord("CHECK INDEX ")
if err := restoreTables(); err != nil {
return err
}
ctx.WritePlainf(" %s", n.Index)
if n.HandleRanges != nil {
ctx.WritePlain(" ")
for i, v := range n.HandleRanges {
if i != 0 {
ctx.WritePlain(", ")
}
ctx.WritePlainf("(%d,%d)", v.Begin, v.End)
}
}
case AdminChecksumTable:
ctx.WriteKeyWord("CHECKSUM TABLE ")
if err := restoreTables(); err != nil {
return err
}
case AdminCancelDDLJobs:
ctx.WriteKeyWord("CANCEL DDL JOBS ")
restoreJobIDs()
case AdminPauseDDLJobs:
ctx.WriteKeyWord("PAUSE DDL JOBS ")
restoreJobIDs()
case AdminResumeDDLJobs:
ctx.WriteKeyWord("RESUME DDL JOBS ")
restoreJobIDs()
case AdminShowDDLJobQueries:
ctx.WriteKeyWord("SHOW DDL JOB QUERIES ")
restoreJobIDs()
case AdminShowDDLJobQueriesWithRange:
ctx.WriteKeyWord("SHOW DDL JOB QUERIES LIMIT ")
ctx.WritePlainf("%d, %d", n.LimitSimple.Offset, n.LimitSimple.Count)
case AdminShowSlow:
ctx.WriteKeyWord("SHOW SLOW ")
if err := n.ShowSlow.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore AdminStmt.ShowSlow")
}
case AdminReloadExprPushdownBlacklist:
ctx.WriteKeyWord("RELOAD EXPR_PUSHDOWN_BLACKLIST")
case AdminReloadOptRuleBlacklist:
ctx.WriteKeyWord("RELOAD OPT_RULE_BLACKLIST")
case AdminPluginEnable:
ctx.WriteKeyWord("PLUGINS ENABLE")
for i, v := range n.Plugins {
if i == 0 {
ctx.WritePlain(" ")
} else {
ctx.WritePlain(", ")
}
ctx.WritePlain(v)
}
case AdminPluginDisable:
ctx.WriteKeyWord("PLUGINS DISABLE")
for i, v := range n.Plugins {
if i == 0 {
ctx.WritePlain(" ")
} else {
ctx.WritePlain(", ")
}
ctx.WritePlain(v)
}
case AdminFlushBindings:
ctx.WriteKeyWord("FLUSH BINDINGS")
case AdminCaptureBindings:
ctx.WriteKeyWord("CAPTURE BINDINGS")
case AdminEvolveBindings:
ctx.WriteKeyWord("EVOLVE BINDINGS")
case AdminReloadBindings:
ctx.WriteKeyWord("RELOAD BINDINGS")
case AdminReloadClusterBindings:
ctx.WriteKeyWord("RELOAD CLUSTER BINDINGS")
case AdminReloadStatistics:
ctx.WriteKeyWord("RELOAD STATS_EXTENDED")
case AdminFlushPlanCache:
if n.StatementScope == StatementScopeSession {
ctx.WriteKeyWord("FLUSH SESSION PLAN_CACHE")
} else if n.StatementScope == StatementScopeInstance {
ctx.WriteKeyWord("FLUSH INSTANCE PLAN_CACHE")
} else if n.StatementScope == StatementScopeGlobal {
ctx.WriteKeyWord("FLUSH GLOBAL PLAN_CACHE")
}
case AdminSetBDRRole:
switch n.BDRRole {
case BDRRolePrimary:
ctx.WriteKeyWord("SET BDR ROLE PRIMARY")
case BDRRoleSecondary:
ctx.WriteKeyWord("SET BDR ROLE SECONDARY")
default:
return errors.New("Unsupported BDR role")
}
case AdminShowBDRRole:
ctx.WriteKeyWord("SHOW BDR ROLE")
case AdminUnsetBDRRole:
ctx.WriteKeyWord("UNSET BDR ROLE")
case AdminAlterDDLJob:
ctx.WriteKeyWord("ALTER DDL JOBS ")
ctx.WritePlainf("%d", n.JobNumber)
for i, option := range n.AlterJobOptions {
if i != 0 {
ctx.WritePlain(",")
}
ctx.WritePlain(" ")
if err := option.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore AdminStmt.AlterJobOptions[%d]", i)
}
}
case AdminWorkloadRepoCreate:
ctx.WriteKeyWord("CREATE WORKLOAD SNAPSHOT")
default:
return errors.New("Unsupported AdminStmt type")
}
return nil
}
// Accept implements Node Accept interface.
func (n *AdminStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*AdminStmt)
for i, val := range n.Tables {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.Tables[i] = node.(*TableName)
}
if n.Where != nil {
node, ok := n.Where.Accept(v)
if !ok {
return n, false
}
n.Where = node.(ExprNode)
}
return v.Leave(n)
}
// RoleOrPriv is a temporary structure to be further processed into auth.RoleIdentity or PrivElem
type RoleOrPriv struct {
Symbols string // hold undecided symbols
Node any // hold auth.RoleIdentity or PrivElem that can be sure when parsing
}
func (n *RoleOrPriv) ToRole() (*auth.RoleIdentity, error) {
if n.Node != nil {
if r, ok := n.Node.(*auth.RoleIdentity); ok {
return r, nil
}
return nil, errors.Errorf("can't convert to RoleIdentity, type %T", n.Node)
}
return &auth.RoleIdentity{Username: n.Symbols, Hostname: "%"}, nil
}
func (n *RoleOrPriv) ToPriv() (*PrivElem, error) {
if n.Node != nil {
if p, ok := n.Node.(*PrivElem); ok {
return p, nil
}
return nil, errors.Errorf("can't convert to PrivElem, type %T", n.Node)
}
if len(n.Symbols) == 0 {
return nil, errors.New("symbols should not be length 0")
}
return &PrivElem{Priv: mysql.ExtendedPriv, Name: n.Symbols}, nil
}
// PrivElem is the privilege type and optional column list.
type PrivElem struct {
node
Priv mysql.PrivilegeType
Cols []*ColumnName
Name string
}
// Restore implements Node interface.
func (n *PrivElem) Restore(ctx *format.RestoreCtx) error {
if n.Priv == mysql.AllPriv {
ctx.WriteKeyWord("ALL")
} else if n.Priv == mysql.ExtendedPriv {
ctx.WriteKeyWord(n.Name)
} else {
str, ok := mysql.Priv2Str[n.Priv]
if !ok {
return errors.New("Undefined privilege type")
}
ctx.WriteKeyWord(str)
}
if n.Cols != nil {
ctx.WritePlain(" (")
for i, v := range n.Cols {
if i != 0 {
ctx.WritePlain(",")
}
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore PrivElem.Cols[%d]", i)
}
}
ctx.WritePlain(")")
}
return nil
}
// Accept implements Node Accept interface.
func (n *PrivElem) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*PrivElem)
for i, val := range n.Cols {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.Cols[i] = node.(*ColumnName)
}
return v.Leave(n)
}
// ObjectTypeType is the type for object type.
type ObjectTypeType int
const (
// ObjectTypeNone is for empty object type.
ObjectTypeNone ObjectTypeType = iota + 1
// ObjectTypeTable means the following object is a table.
ObjectTypeTable
// ObjectTypeFunction means the following object is a stored function.
ObjectTypeFunction
// ObjectTypeProcedure means the following object is a stored procedure.
ObjectTypeProcedure
)
// Restore implements Node interface.
func (n ObjectTypeType) Restore(ctx *format.RestoreCtx) error {
switch n {
case ObjectTypeNone:
// do nothing
case ObjectTypeTable:
ctx.WriteKeyWord("TABLE")
case ObjectTypeFunction:
ctx.WriteKeyWord("FUNCTION")
case ObjectTypeProcedure:
ctx.WriteKeyWord("PROCEDURE")
default:
return errors.New("Unsupported object type")
}
return nil
}
// GrantLevelType is the type for grant level.
type GrantLevelType int
const (
// GrantLevelNone is the dummy const for default value.
GrantLevelNone GrantLevelType = iota + 1
// GrantLevelGlobal means the privileges are administrative or apply to all databases on a given server.
GrantLevelGlobal
// GrantLevelDB means the privileges apply to all objects in a given database.
GrantLevelDB
// GrantLevelTable means the privileges apply to all columns in a given table.
GrantLevelTable
)
// GrantLevel is used for store the privilege scope.
type GrantLevel struct {
Level GrantLevelType
DBName string
TableName string
}
// Restore implements Node interface.
func (n *GrantLevel) Restore(ctx *format.RestoreCtx) error {
switch n.Level {
case GrantLevelDB:
if n.DBName == "" {
ctx.WritePlain("*")
} else {
ctx.WriteName(n.DBName)
ctx.WritePlain(".*")
}
case GrantLevelGlobal:
ctx.WritePlain("*.*")
case GrantLevelTable:
if n.DBName != "" {
ctx.WriteName(n.DBName)
ctx.WritePlain(".")
}
ctx.WriteName(n.TableName)
}
return nil
}
// RevokeStmt is the struct for REVOKE statement.
type RevokeStmt struct {
stmtNode
Privs []*PrivElem
ObjectType ObjectTypeType
Level *GrantLevel
Users []*UserSpec
}
// Restore implements Node interface.
func (n *RevokeStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("REVOKE ")
for i, v := range n.Privs {
if i != 0 {
ctx.WritePlain(", ")
}
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore RevokeStmt.Privs[%d]", i)
}
}
ctx.WriteKeyWord(" ON ")
if n.ObjectType != ObjectTypeNone {
if err := n.ObjectType.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore RevokeStmt.ObjectType")
}
ctx.WritePlain(" ")
}
if err := n.Level.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore RevokeStmt.Level")
}
ctx.WriteKeyWord(" FROM ")
for i, v := range n.Users {
if i != 0 {
ctx.WritePlain(", ")
}
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore RevokeStmt.Users[%d]", i)
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *RevokeStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*RevokeStmt)
for i, val := range n.Privs {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.Privs[i] = node.(*PrivElem)
}
return v.Leave(n)
}
// RevokeStmt is the struct for REVOKE statement.
type RevokeRoleStmt struct {
stmtNode
Roles []*auth.RoleIdentity
Users []*auth.UserIdentity
}
// Restore implements Node interface.
func (n *RevokeRoleStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("REVOKE ")
for i, role := range n.Roles {
if i != 0 {
ctx.WritePlain(", ")
}
if err := role.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore RevokeRoleStmt.Roles[%d]", i)
}
}
ctx.WriteKeyWord(" FROM ")
for i, v := range n.Users {
if i != 0 {
ctx.WritePlain(", ")
}
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore RevokeRoleStmt.Users[%d]", i)
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *RevokeRoleStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*RevokeRoleStmt)
return v.Leave(n)
}
// GrantStmt is the struct for GRANT statement.
type GrantStmt struct {
stmtNode
Privs []*PrivElem
ObjectType ObjectTypeType
Level *GrantLevel
Users []*UserSpec
AuthTokenOrTLSOptions []*AuthTokenOrTLSOption
WithGrant bool
}
// Restore implements Node interface.
func (n *GrantStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("GRANT ")
for i, v := range n.Privs {
if i != 0 && v.Priv != 0 {
ctx.WritePlain(", ")
} else if v.Priv == 0 {
ctx.WritePlain(" ")
}
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore GrantStmt.Privs[%d]", i)
}
}
ctx.WriteKeyWord(" ON ")
if n.ObjectType != ObjectTypeNone {
if err := n.ObjectType.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore GrantStmt.ObjectType")
}
ctx.WritePlain(" ")
}
if err := n.Level.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore GrantStmt.Level")
}
ctx.WriteKeyWord(" TO ")
for i, v := range n.Users {
if i != 0 {
ctx.WritePlain(", ")
}
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore GrantStmt.Users[%d]", i)
}
}
if n.AuthTokenOrTLSOptions != nil {
if len(n.AuthTokenOrTLSOptions) != 0 {
ctx.WriteKeyWord(" REQUIRE ")
}
for i, option := range n.AuthTokenOrTLSOptions {
if i != 0 {
ctx.WriteKeyWord(" AND ")
}
if err := option.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore GrantStmt.AuthTokenOrTLSOptions[%d]", i)
}
}
}
if n.WithGrant {
ctx.WriteKeyWord(" WITH GRANT OPTION")
}
return nil
}
// SecureText implements SensitiveStatement interface.
func (n *GrantStmt) SecureText() string {
text := n.text
// Filter "identified by xxx" because it would expose password information.
idx := strings.Index(strings.ToLower(text), "identified")
if idx > 0 {
text = text[:idx]
}
return text
}
// Accept implements Node Accept interface.
func (n *GrantStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*GrantStmt)
for i, val := range n.Privs {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.Privs[i] = node.(*PrivElem)
}
return v.Leave(n)
}
// GrantProxyStmt is the struct for GRANT PROXY statement.
type GrantProxyStmt struct {
stmtNode
LocalUser *auth.UserIdentity
ExternalUsers []*auth.UserIdentity
WithGrant bool
}
// Accept implements Node Accept interface.
func (n *GrantProxyStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*GrantProxyStmt)
return v.Leave(n)
}
// Restore implements Node interface.
func (n *GrantProxyStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("GRANT PROXY ON ")
if err := n.LocalUser.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore GrantProxyStmt.LocalUser")
}
ctx.WriteKeyWord(" TO ")
for i, v := range n.ExternalUsers {
if i != 0 {
ctx.WritePlain(", ")
}
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore GrantProxyStmt.ExternalUsers[%d]", i)
}
}
if n.WithGrant {
ctx.WriteKeyWord(" WITH GRANT OPTION")
}
return nil
}
// GrantRoleStmt is the struct for GRANT TO statement.
type GrantRoleStmt struct {
stmtNode
Roles []*auth.RoleIdentity
Users []*auth.UserIdentity
}
// Accept implements Node Accept interface.
func (n *GrantRoleStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*GrantRoleStmt)
return v.Leave(n)
}
// Restore implements Node interface.
func (n *GrantRoleStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("GRANT ")
if len(n.Roles) > 0 {
for i, role := range n.Roles {
if i != 0 {
ctx.WritePlain(", ")
}
if err := role.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore GrantRoleStmt.Roles[%d]", i)
}
}
}
ctx.WriteKeyWord(" TO ")
for i, v := range n.Users {
if i != 0 {
ctx.WritePlain(", ")
}
if err := v.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore GrantStmt.Users[%d]", i)
}
}
return nil
}
// SecureText implements SensitiveStatement interface.
func (n *GrantRoleStmt) SecureText() string {
text := n.text
// Filter "identified by xxx" because it would expose password information.
idx := strings.Index(strings.ToLower(text), "identified")
if idx > 0 {
text = text[:idx]
}
return text
}
// ShutdownStmt is a statement to stop the TiDB server.
// See https://dev.mysql.com/doc/refman/5.7/en/shutdown.html
type ShutdownStmt struct {
stmtNode
}
// Restore implements Node interface.
func (n *ShutdownStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("SHUTDOWN")
return nil
}
// Accept implements Node Accept interface.
func (n *ShutdownStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ShutdownStmt)
return v.Leave(n)
}
// RestartStmt is a statement to restart the TiDB server.
// See https://dev.mysql.com/doc/refman/8.0/en/restart.html
type RestartStmt struct {
stmtNode
}
// Restore implements Node interface.
func (n *RestartStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("RESTART")
return nil
}
// Accept implements Node Accept interface.
func (n *RestartStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*RestartStmt)
return v.Leave(n)
}
// HelpStmt is a statement for server side help
// See https://dev.mysql.com/doc/refman/8.0/en/help.html
type HelpStmt struct {
stmtNode
Topic string
}
// Restore implements Node interface.
func (n *HelpStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("HELP ")
ctx.WriteString(n.Topic)
return nil
}
// Accept implements Node Accept interface.
func (n *HelpStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*HelpStmt)
return v.Leave(n)
}
// RenameUserStmt is a statement to rename a user.
// See http://dev.mysql.com/doc/refman/5.7/en/rename-user.html
type RenameUserStmt struct {
stmtNode
UserToUsers []*UserToUser
}
// Restore implements Node interface.
func (n *RenameUserStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("RENAME USER ")
for index, user2user := range n.UserToUsers {
if index != 0 {
ctx.WritePlain(", ")
}
if err := user2user.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore RenameUserStmt.UserToUsers")
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *RenameUserStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*RenameUserStmt)
for i, t := range n.UserToUsers {
node, ok := t.Accept(v)
if !ok {
return n, false
}
n.UserToUsers[i] = node.(*UserToUser)
}
return v.Leave(n)
}
// UserToUser represents renaming old user to new user used in RenameUserStmt.
type UserToUser struct {
node
OldUser *auth.UserIdentity
NewUser *auth.UserIdentity
}
// Restore implements Node interface.
func (n *UserToUser) Restore(ctx *format.RestoreCtx) error {
if err := n.OldUser.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore UserToUser.OldUser")
}
ctx.WriteKeyWord(" TO ")
if err := n.NewUser.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore UserToUser.NewUser")
}
return nil
}
// Accept implements Node Accept interface.
func (n *UserToUser) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*UserToUser)
return v.Leave(n)
}
type BRIEKind uint8
type BRIEOptionType uint16
const (
BRIEKindBackup BRIEKind = iota
BRIEKindCancelJob
BRIEKindStreamStart
BRIEKindStreamMetaData
BRIEKindStreamStatus
BRIEKindStreamPause
BRIEKindStreamResume
BRIEKindStreamStop
BRIEKindStreamPurge
BRIEKindRestore
BRIEKindRestorePIT
BRIEKindShowJob
BRIEKindShowQuery
BRIEKindShowBackupMeta
// brieKindCount is the total number of BRIE kinds.
brieKindCount
// common BRIE options
BRIEOptionRateLimit BRIEOptionType = iota + 1
BRIEOptionConcurrency
BRIEOptionChecksum
BRIEOptionSendCreds
BRIEOptionCheckpoint
BRIEOptionStartTS
BRIEOptionUntilTS
BRIEOptionChecksumConcurrency
BRIEOptionEncryptionMethod
BRIEOptionEncryptionKeyFile
// backup options
BRIEOptionBackupTimeAgo
BRIEOptionBackupTS
BRIEOptionBackupTSO
BRIEOptionLastBackupTS
BRIEOptionLastBackupTSO
BRIEOptionGCTTL
BRIEOptionCompressionLevel
BRIEOptionCompression
BRIEOptionIgnoreStats
BRIEOptionLoadStats
// restore options
BRIEOptionOnline
BRIEOptionFullBackupStorage
BRIEOptionRestoredTS
BRIEOptionWaitTiflashReady
BRIEOptionWithSysTable
// import options
BRIEOptionAnalyze
BRIEOptionBackend
BRIEOptionOnDuplicate
BRIEOptionSkipSchemaFiles
BRIEOptionStrictFormat
BRIEOptionTiKVImporter
BRIEOptionResume
// CSV options
BRIEOptionCSVBackslashEscape
BRIEOptionCSVDelimiter
BRIEOptionCSVHeader
BRIEOptionCSVNotNull
BRIEOptionCSVNull
BRIEOptionCSVSeparator
BRIEOptionCSVTrimLastSeparators
BRIECSVHeaderIsColumns = ^uint64(0)
)
type BRIEOptionLevel uint64
const (
BRIEOptionLevelOff BRIEOptionLevel = iota // equals FALSE
BRIEOptionLevelRequired // equals TRUE
BRIEOptionLevelOptional
)
func (kind BRIEKind) String() string {
switch kind {
case BRIEKindBackup:
return "BACKUP"
case BRIEKindRestore:
return "RESTORE"
case BRIEKindStreamStart:
return "BACKUP LOGS"
case BRIEKindStreamStop:
return "STOP BACKUP LOGS"
case BRIEKindStreamPause:
return "PAUSE BACKUP LOGS"
case BRIEKindStreamResume:
return "RESUME BACKUP LOGS"
case BRIEKindStreamStatus:
return "SHOW BACKUP LOGS STATUS"
case BRIEKindStreamMetaData:
return "SHOW BACKUP LOGS METADATA"
case BRIEKindStreamPurge:
return "PURGE BACKUP LOGS"
case BRIEKindRestorePIT:
return "RESTORE POINT"
case BRIEKindShowJob:
return "SHOW BR JOB"
case BRIEKindShowQuery:
return "SHOW BR JOB QUERY"
case BRIEKindCancelJob:
return "CANCEL BR JOB"
case BRIEKindShowBackupMeta:
return "SHOW BACKUP METADATA"
default:
return ""
}
}
func (kind BRIEOptionType) String() string {
switch kind {
case BRIEOptionRateLimit:
return "RATE_LIMIT"
case BRIEOptionConcurrency:
return "CONCURRENCY"
case BRIEOptionChecksum:
return "CHECKSUM"
case BRIEOptionSendCreds:
return "SEND_CREDENTIALS_TO_TIKV"
case BRIEOptionBackupTimeAgo, BRIEOptionBackupTS, BRIEOptionBackupTSO:
return "SNAPSHOT"
case BRIEOptionLastBackupTS, BRIEOptionLastBackupTSO:
return "LAST_BACKUP"
case BRIEOptionOnline:
return "ONLINE"
case BRIEOptionCheckpoint:
return "CHECKPOINT"
case BRIEOptionAnalyze:
return "ANALYZE"
case BRIEOptionBackend:
return "BACKEND"
case BRIEOptionOnDuplicate:
return "ON_DUPLICATE"
case BRIEOptionSkipSchemaFiles:
return "SKIP_SCHEMA_FILES"
case BRIEOptionStrictFormat:
return "STRICT_FORMAT"
case BRIEOptionTiKVImporter:
return "TIKV_IMPORTER"
case BRIEOptionResume:
return "RESUME"
case BRIEOptionCSVBackslashEscape:
return "CSV_BACKSLASH_ESCAPE"
case BRIEOptionCSVDelimiter:
return "CSV_DELIMITER"
case BRIEOptionCSVHeader:
return "CSV_HEADER"
case BRIEOptionCSVNotNull:
return "CSV_NOT_NULL"
case BRIEOptionCSVNull:
return "CSV_NULL"
case BRIEOptionCSVSeparator:
return "CSV_SEPARATOR"
case BRIEOptionCSVTrimLastSeparators:
return "CSV_TRIM_LAST_SEPARATORS"
case BRIEOptionFullBackupStorage:
return "FULL_BACKUP_STORAGE"
case BRIEOptionRestoredTS:
return "RESTORED_TS"
case BRIEOptionStartTS:
return "START_TS"
case BRIEOptionUntilTS:
return "UNTIL_TS"
case BRIEOptionGCTTL:
return "GC_TTL"
case BRIEOptionWaitTiflashReady:
return "WAIT_TIFLASH_READY"
case BRIEOptionWithSysTable:
return "WITH_SYS_TABLE"
case BRIEOptionIgnoreStats:
return "IGNORE_STATS"
case BRIEOptionLoadStats:
return "LOAD_STATS"
case BRIEOptionChecksumConcurrency:
return "CHECKSUM_CONCURRENCY"
case BRIEOptionCompressionLevel:
return "COMPRESSION_LEVEL"
case BRIEOptionCompression:
return "COMPRESSION_TYPE"
case BRIEOptionEncryptionMethod:
return "ENCRYPTION_METHOD"
case BRIEOptionEncryptionKeyFile:
return "ENCRYPTION_KEY_FILE"
default:
return ""
}
}
func (level BRIEOptionLevel) String() string {
switch level {
case BRIEOptionLevelOff:
return "OFF"
case BRIEOptionLevelOptional:
return "OPTIONAL"
case BRIEOptionLevelRequired:
return "REQUIRED"
default:
return ""
}
}
type BRIEOption struct {
Tp BRIEOptionType
StrValue string
UintValue uint64
}
func (opt *BRIEOption) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord(opt.Tp.String())
ctx.WritePlain(" = ")
switch opt.Tp {
case BRIEOptionBackupTS, BRIEOptionLastBackupTS, BRIEOptionBackend, BRIEOptionOnDuplicate, BRIEOptionTiKVImporter, BRIEOptionCSVDelimiter, BRIEOptionCSVNull, BRIEOptionCSVSeparator, BRIEOptionFullBackupStorage, BRIEOptionRestoredTS, BRIEOptionStartTS, BRIEOptionUntilTS, BRIEOptionGCTTL, BRIEOptionCompression, BRIEOptionEncryptionMethod, BRIEOptionEncryptionKeyFile:
ctx.WriteString(opt.StrValue)
case BRIEOptionBackupTimeAgo:
ctx.WritePlainf("%d ", opt.UintValue/1000)
ctx.WriteKeyWord("MICROSECOND AGO")
case BRIEOptionRateLimit:
ctx.WritePlainf("%d ", opt.UintValue/1048576)
ctx.WriteKeyWord("MB")
ctx.WritePlain("/")
ctx.WriteKeyWord("SECOND")
case BRIEOptionCSVHeader:
if opt.UintValue == BRIECSVHeaderIsColumns {
ctx.WriteKeyWord("COLUMNS")
} else {
ctx.WritePlainf("%d", opt.UintValue)
}
case BRIEOptionChecksum, BRIEOptionAnalyze:
// BACKUP/RESTORE doesn't support OPTIONAL value for now, should warn at executor
ctx.WriteKeyWord(BRIEOptionLevel(opt.UintValue).String())
default:
ctx.WritePlainf("%d", opt.UintValue)
}
return nil
}
// BRIEStmt is a statement for backup, restore, import and export.
type BRIEStmt struct {
stmtNode
Kind BRIEKind
Schemas []string
Tables []*TableName
Storage string
JobID int64
Options []*BRIEOption
}
func (n *BRIEStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*BRIEStmt)
for i, val := range n.Tables {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.Tables[i] = node.(*TableName)
}
return v.Leave(n)
}
func (n *BRIEStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord(n.Kind.String())
switch n.Kind {
case BRIEKindRestore, BRIEKindBackup:
switch {
case len(n.Tables) != 0:
ctx.WriteKeyWord(" TABLE ")
for index, table := range n.Tables {
if index != 0 {
ctx.WritePlain(", ")
}
if err := table.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore BRIEStmt.Tables[%d]", index)
}
}
case len(n.Schemas) != 0:
ctx.WriteKeyWord(" DATABASE ")
for index, schema := range n.Schemas {
if index != 0 {
ctx.WritePlain(", ")
}
ctx.WriteName(schema)
}
default:
ctx.WriteKeyWord(" DATABASE")
ctx.WritePlain(" *")
}
if n.Kind == BRIEKindBackup {
ctx.WriteKeyWord(" TO ")
ctx.WriteString(n.Storage)
} else {
ctx.WriteKeyWord(" FROM ")
ctx.WriteString(n.Storage)
}
case BRIEKindCancelJob, BRIEKindShowJob, BRIEKindShowQuery:
ctx.WritePlainf(" %d", n.JobID)
case BRIEKindStreamStart:
ctx.WriteKeyWord(" TO ")
ctx.WriteString(n.Storage)
case BRIEKindRestorePIT, BRIEKindStreamMetaData, BRIEKindShowBackupMeta, BRIEKindStreamPurge:
ctx.WriteKeyWord(" FROM ")
ctx.WriteString(n.Storage)
}
for _, opt := range n.Options {
ctx.WritePlain(" ")
if err := opt.Restore(ctx); err != nil {
return err
}
}
return nil
}
// RedactURL redacts the secret tokens in the URL. only S3 url need redaction for now.
// if the url is not a valid url, return the original string.
func RedactURL(str string) string {
// FIXME: this solution is not scalable, and duplicates some logic from BR.
u, err := url.Parse(str)
if err != nil {
return str
}
scheme := u.Scheme
failpoint.Inject("forceRedactURL", func() {
scheme = "s3"
})
var redactKeys map[string]struct{}
switch strings.ToLower(scheme) {
case "s3", "ks3", "oss":
redactKeys = map[string]struct{}{
"access-key": {},
"secret-access-key": {},
"session-token": {},
}
case "azure", "azblob":
redactKeys = map[string]struct{}{
"account-key": {},
"encryption-key": {},
"sas-token": {},
}
}
if len(redactKeys) > 0 {
values := u.Query()
for k := range values {
// see below on why we normalize key
// https://github.com/pingcap/tidb/blob/a7c0d95f16ea2582bb569278c3f829403e6c3a7e/br/pkg/storage/parse.go#L163
normalizedKey := strings.ToLower(strings.ReplaceAll(k, "_", "-"))
if _, ok := redactKeys[normalizedKey]; ok {
values[k] = []string{"xxxxxx"}
}
}
// In go1.25.5, url.Values.Encode() will sort the keys.
u.RawQuery = values.Encode()
}
return u.String()
}
// SecureText implements SensitiveStmtNode
func (n *BRIEStmt) SecureText() string {
redactedStmt := &BRIEStmt{
Kind: n.Kind,
Schemas: n.Schemas,
Tables: n.Tables,
Storage: RedactURL(n.Storage),
Options: n.Options,
}
var sb strings.Builder
_ = redactedStmt.Restore(format.NewRestoreCtx(format.DefaultRestoreFlags, &sb))
return sb.String()
}
type ImportIntoActionTp string
const (
ImportIntoCancel ImportIntoActionTp = "cancel"
)
// ImportIntoActionStmt represent CANCEL IMPORT INTO JOB statement.
// will support pause/resume/drop later.
type ImportIntoActionStmt struct {
stmtNode
Tp ImportIntoActionTp
JobID int64
}
func (n *ImportIntoActionStmt) Accept(v Visitor) (Node, bool) {
newNode, _ := v.Enter(n)
return v.Leave(newNode)
}
func (n *ImportIntoActionStmt) Restore(ctx *format.RestoreCtx) error {
if n.Tp != ImportIntoCancel {
return errors.Errorf("invalid IMPORT INTO action type: %s", n.Tp)
}
ctx.WriteKeyWord("CANCEL IMPORT JOB ")
ctx.WritePlainf("%d", n.JobID)
return nil
}
// CancelDistributionJobStmt represent CANCEL DISTRIBUTION JOB statement.
type CancelDistributionJobStmt struct {
stmtNode
JobID int64
}
func (n *CancelDistributionJobStmt) Accept(v Visitor) (Node, bool) {
newNode, _ := v.Enter(n)
return v.Leave(newNode)
}
func (n *CancelDistributionJobStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("CANCEL DISTRIBUTION JOB ")
ctx.WritePlainf("%d", n.JobID)
return nil
}
// Ident is the table identifier composed of schema name and table name.
type Ident struct {
Schema CIStr
Name CIStr
}
// String implements fmt.Stringer interface.
func (i Ident) String() string {
if i.Schema.O == "" {
return i.Name.O
}
return fmt.Sprintf("%s.%s", i.Schema, i.Name)
}
// SelectStmtOpts wrap around select hints and switches
type SelectStmtOpts struct {
Distinct bool
SQLBigResult bool
SQLBufferResult bool
SQLCache bool
SQLSmallResult bool
CalcFoundRows bool
StraightJoin bool
Priority mysql.PriorityEnum
TableHints []*TableOptimizerHint
ExplicitAll bool
}
// TableOptimizerHint is Table level optimizer hint
type TableOptimizerHint struct {
node
// HintName is the name or alias of the table(s) which the hint will affect.
// Table hints has no schema info
// It allows only table name or alias (if table has an alias)
HintName CIStr
// HintData is the payload of the hint. The actual type of this field
// is defined differently as according `HintName`. Define as following:
//
// Statement Execution Time Optimizer Hints
// See https://dev.mysql.com/doc/refman/5.7/en/optimizer-hints.html#optimizer-hints-execution-time
// - MAX_EXECUTION_TIME => uint64
// - MEMORY_QUOTA => int64
// - QUERY_TYPE => CIStr
//
// Time Range is used to hint the time range of inspection tables
// e.g: select /*+ time_range('','') */ * from information_schema.inspection_result.
// - TIME_RANGE => ast.HintTimeRange
// - READ_FROM_STORAGE => CIStr
// - USE_TOJA => bool
// - NTH_PLAN => int64
HintData any
// QBName is the default effective query block of this hint.
QBName CIStr
Tables []HintTable
Indexes []CIStr
}
// HintTimeRange is the payload of `TIME_RANGE` hint
type HintTimeRange struct {
From string
To string
}
// LeadingList represents a nested structure in LEADING hints.
// It could be *HintTable or LeadingList
//
// eg: LEADING(a, (b, c), d)
// will be parsed into a LeadingList like:
// Items = [HintTable("a"), LeadingList{[HintTable("b"), HintTable("c")]}, HintTable("d")]
type LeadingList struct {
Items []interface{}
}
// HintSetVar is the payload of `SET_VAR` hint
type HintSetVar struct {
VarName string
Value string
}
// HintTable is table in the hint. It may have query block info.
type HintTable struct {
DBName CIStr
TableName CIStr
QBName CIStr
PartitionList []CIStr
}
// FlattenLeadingList collects all HintTable nodes from a possibly nested LeadingList into a flat slice.
// Note:
// - Only table names are preserved.
func FlattenLeadingList(list *LeadingList) []HintTable {
if list == nil {
return nil
}
var result []HintTable
for _, item := range list.Items {
switch t := item.(type) {
case *HintTable:
result = append(result, *t)
case *LeadingList:
result = append(result, FlattenLeadingList(t)...)
}
}
return result
}
func (ht *HintTable) Restore(ctx *format.RestoreCtx) {
if !ctx.Flags.HasWithoutSchemaNameFlag() {
if ht.DBName.L != "" {
ctx.WriteName(ht.DBName.String())
ctx.WriteKeyWord(".")
}
}
ctx.WriteName(ht.TableName.String())
if ht.QBName.L != "" {
ctx.WriteKeyWord("@")
ctx.WriteName(ht.QBName.String())
}
if len(ht.PartitionList) > 0 {
ctx.WriteKeyWord(" PARTITION")
ctx.WritePlain("(")
for i, p := range ht.PartitionList {
if i > 0 {
ctx.WritePlain(", ")
}
ctx.WriteName(p.String())
}
ctx.WritePlain(")")
}
}
func (lt *LeadingList) RestoreWithQB(ctx *format.RestoreCtx, qbName CIStr, needParen bool, isTop bool, qbOnTable bool) error {
if lt == nil || len(lt.Items) == 0 {
return nil
}
if needParen {
ctx.WritePlain("(")
}
currentQBName := qbName // hint level QBName
for i, item := range lt.Items {
if i > 0 {
ctx.WritePlain(", ")
}
switch t := item.(type) {
case *HintTable:
if i == 0 && currentQBName.L != "" && !qbOnTable {
ctx.WriteKeyWord("@")
ctx.WriteName(currentQBName.String())
ctx.WritePlain(" ")
t.Restore(ctx)
currentQBName = CIStr{}
} else {
t.Restore(ctx)
}
case *LeadingList:
if err := t.RestoreWithQB(ctx, currentQBName, true, false, qbOnTable); err != nil {
return err
}
currentQBName = CIStr{}
default:
return fmt.Errorf("unexpected type in LeadingList: %T", t)
}
}
if needParen {
ctx.WritePlain(")")
}
return nil
}
// Restore implements Node interface.
func (n *TableOptimizerHint) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord(n.HintName.String())
ctx.WritePlain("(")
if n.HintName.L != "leading" && n.QBName.L != "" {
if n.HintName.L != "qb_name" {
ctx.WriteKeyWord("@")
}
ctx.WriteName(n.QBName.String())
}
if n.HintName.L == "qb_name" && len(n.Tables) == 0 {
ctx.WritePlain(")")
return nil
}
// Hints without args except query block.
switch n.HintName.L {
case "mpp_1phase_agg", "mpp_2phase_agg", "hash_agg", "stream_agg", "agg_to_cop", "read_consistent_replica", "no_index_merge", "ignore_plan_cache", "use_plan_cache", "limit_to_cop", "straight_join", "merge", "no_decorrelate":
ctx.WritePlain(")")
return nil
}
if n.HintName.L != "leading" && n.QBName.L != "" {
ctx.WritePlain(" ")
}
// Hints with args except query block.
switch n.HintName.L {
case "max_execution_time":
ctx.WritePlainf("%d", n.HintData.(uint64))
case "resource_group":
ctx.WriteName(n.HintData.(string))
case "nth_plan":
ctx.WritePlainf("%d", n.HintData.(int64))
case "leading":
if list, ok := n.HintData.(*LeadingList); ok && list != nil {
// if table level QBName or not
qbOnTable := false
if len(n.Tables) > 0 && n.Tables[0].QBName.L != "" {
qbOnTable = true
}
if err := list.RestoreWithQB(ctx, n.QBName, false, true, qbOnTable); err != nil {
return err
}
} else {
for i, table := range n.Tables {
if i != 0 {
ctx.WritePlain(", ")
}
table.Restore(ctx)
}
}
case "tidb_hj", "tidb_smj", "tidb_inlj", "hash_join", "hash_join_build", "hash_join_probe", "merge_join", "inl_join",
"broadcast_join", "shuffle_join", "inl_hash_join", "inl_merge_join", "no_hash_join", "no_merge_join",
"no_index_join", "no_index_hash_join", "no_index_merge_join":
for i, table := range n.Tables {
if i != 0 {
ctx.WritePlain(", ")
}
table.Restore(ctx)
}
case "use_index", "ignore_index", "use_index_merge", "force_index", "order_index", "no_order_index", "index_lookup_pushdown", "no_index_lookup_pushdown":
n.Tables[0].Restore(ctx)
ctx.WritePlain(" ")
for i, index := range n.Indexes {
if i != 0 {
ctx.WritePlain(", ")
}
ctx.WriteName(index.String())
}
case "qb_name":
if len(n.Tables) > 0 {
ctx.WritePlain(", ")
for i, table := range n.Tables {
if i != 0 {
ctx.WritePlain(". ")
}
table.Restore(ctx)
}
}
case "use_toja", "use_cascades":
if n.HintData.(bool) {
ctx.WritePlain("TRUE")
} else {
ctx.WritePlain("FALSE")
}
case "query_type":
ctx.WriteKeyWord(n.HintData.(CIStr).String())
case "memory_quota":
ctx.WritePlainf("%d MB", n.HintData.(int64)/1024/1024)
case "read_from_storage":
ctx.WriteKeyWord(n.HintData.(CIStr).String())
for i, table := range n.Tables {
if i == 0 {
ctx.WritePlain("[")
}
table.Restore(ctx)
if i == len(n.Tables)-1 {
ctx.WritePlain("]")
} else {
ctx.WritePlain(", ")
}
}
case "time_range":
hintData := n.HintData.(HintTimeRange)
ctx.WriteString(hintData.From)
ctx.WritePlain(", ")
ctx.WriteString(hintData.To)
case "set_var":
hintData := n.HintData.(HintSetVar)
ctx.WritePlain(hintData.VarName)
ctx.WritePlain(" = ")
ctx.WriteString(hintData.Value)
}
ctx.WritePlain(")")
return nil
}
// Accept implements Node Accept interface.
func (n *TableOptimizerHint) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*TableOptimizerHint)
return v.Leave(n)
}
// TextString represent a string, it can be a binary literal.
type TextString struct {
Value string
IsBinaryLiteral bool
}
type BinaryLiteral interface {
ToString() string
}
// NewDecimal creates a types.Decimal value, it's provided by parser driver.
var NewDecimal func(string) (any, error)
// NewHexLiteral creates a types.HexLiteral value, it's provided by parser driver.
var NewHexLiteral func(string) (any, error)
// NewBitLiteral creates a types.BitLiteral value, it's provided by parser driver.
var NewBitLiteral func(string) (any, error)
// SetResourceGroupStmt is a statement to set the resource group name for current session.
type SetResourceGroupStmt struct {
stmtNode
Name CIStr
}
func (n *SetResourceGroupStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("SET RESOURCE GROUP ")
ctx.WriteName(n.Name.O)
return nil
}
// Accept implements Node Accept interface.
func (n *SetResourceGroupStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*SetResourceGroupStmt)
return v.Leave(n)
}
// CalibrateResourceType is the type for CalibrateResource statement.
type CalibrateResourceType int
// calibrate resource [ workload < TPCC | OLTP_READ_WRITE | OLTP_READ_ONLY | OLTP_WRITE_ONLY | TPCH_10> ]
const (
WorkloadNone CalibrateResourceType = iota
TPCC
OLTPREADWRITE
OLTPREADONLY
OLTPWRITEONLY
TPCH10
)
func (n CalibrateResourceType) Restore(ctx *format.RestoreCtx) error {
switch n {
case TPCC:
ctx.WriteKeyWord(" WORKLOAD TPCC")
case OLTPREADWRITE:
ctx.WriteKeyWord(" WORKLOAD OLTP_READ_WRITE")
case OLTPREADONLY:
ctx.WriteKeyWord(" WORKLOAD OLTP_READ_ONLY")
case OLTPWRITEONLY:
ctx.WriteKeyWord(" WORKLOAD OLTP_WRITE_ONLY")
case TPCH10:
ctx.WriteKeyWord(" WORKLOAD TPCH_10")
}
return nil
}
// CalibrateResourceStmt is a statement to fetch the cluster RU capacity
type CalibrateResourceStmt struct {
stmtNode
DynamicCalibrateResourceOptionList []*DynamicCalibrateResourceOption
Tp CalibrateResourceType
}
// Restore implements Node interface.
func (n *CalibrateResourceStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("CALIBRATE RESOURCE")
if err := n.Tp.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore CalibrateResourceStmt.CalibrateResourceType")
}
for i, option := range n.DynamicCalibrateResourceOptionList {
ctx.WritePlain(" ")
if err := option.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while splicing DynamicCalibrateResourceOption: [%v]", i)
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *CalibrateResourceStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*CalibrateResourceStmt)
for _, val := range n.DynamicCalibrateResourceOptionList {
_, ok := val.Accept(v)
if !ok {
return n, false
}
}
return v.Leave(n)
}
type DynamicCalibrateType int
const (
// specific time
CalibrateStartTime = iota
CalibrateEndTime
CalibrateDuration
)
type DynamicCalibrateResourceOption struct {
stmtNode
Tp DynamicCalibrateType
StrValue string
Ts ExprNode
Unit TimeUnitType
}
func (n *DynamicCalibrateResourceOption) Restore(ctx *format.RestoreCtx) error {
switch n.Tp {
case CalibrateStartTime:
ctx.WriteKeyWord("START_TIME ")
if err := n.Ts.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while splicing DynamicCalibrateResourceOption StartTime")
}
case CalibrateEndTime:
ctx.WriteKeyWord("END_TIME ")
if err := n.Ts.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while splicing DynamicCalibrateResourceOption EndTime")
}
case CalibrateDuration:
ctx.WriteKeyWord("DURATION ")
if len(n.StrValue) > 0 {
ctx.WriteString(n.StrValue)
} else {
ctx.WriteKeyWord("INTERVAL ")
if err := n.Ts.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occurred while restore DynamicCalibrateResourceOption DURATION TS")
}
ctx.WritePlain(" ")
ctx.WriteKeyWord(n.Unit.String())
}
default:
return errors.Errorf("invalid DynamicCalibrateResourceOption: %d", n.Tp)
}
return nil
}
// Accept implements Node Accept interface.
func (n *DynamicCalibrateResourceOption) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*DynamicCalibrateResourceOption)
if n.Ts != nil {
node, ok := n.Ts.Accept(v)
if !ok {
return n, false
}
n.Ts = node.(ExprNode)
}
return v.Leave(n)
}
// DropQueryWatchStmt is a statement to drop a runaway watch item.
type DropQueryWatchStmt struct {
stmtNode
IntValue int64
GroupNameStr CIStr
GroupNameExpr ExprNode
}
func (n *DropQueryWatchStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("QUERY WATCH REMOVE ")
switch {
case n.GroupNameStr.String() != "":
ctx.WriteKeyWord("RESOURCE GROUP ")
ctx.WriteName(n.GroupNameStr.String())
case n.GroupNameExpr != nil:
ctx.WriteKeyWord("RESOURCE GROUP ")
if err := n.GroupNameExpr.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore expr: [%v]", n.GroupNameExpr)
}
default:
ctx.WritePlainf("%d", n.IntValue)
}
return nil
}
// Accept implements Node Accept interface.
func (n *DropQueryWatchStmt) Accept(v Visitor) (Node, bool) {
newNode, _ := v.Enter(n)
n = newNode.(*DropQueryWatchStmt)
return v.Leave(n)
}
// AddQueryWatchStmt is a statement to add a runaway watch item.
type AddQueryWatchStmt struct {
stmtNode
QueryWatchOptionList []*QueryWatchOption
}
func (n *AddQueryWatchStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("QUERY WATCH ADD")
for i, option := range n.QueryWatchOptionList {
ctx.WritePlain(" ")
if err := option.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while splicing QueryWatchOptionList: [%v]", i)
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *AddQueryWatchStmt) Accept(v Visitor) (Node, bool) {
newNode, _ := v.Enter(n)
n = newNode.(*AddQueryWatchStmt)
for _, val := range n.QueryWatchOptionList {
_, ok := val.Accept(v)
if !ok {
return n, false
}
}
return v.Leave(n)
}
type QueryWatchOptionType int
const (
QueryWatchResourceGroup QueryWatchOptionType = iota
QueryWatchAction
QueryWatchType
)
// QueryWatchOption is used for parsing manual management of watching runaway queries option.
type QueryWatchOption struct {
stmtNode
Tp QueryWatchOptionType
ResourceGroupOption *QueryWatchResourceGroupOption
ActionOption *ResourceGroupRunawayActionOption
TextOption *QueryWatchTextOption
}
// Restore implements Node interface.
func (n *QueryWatchOption) Restore(ctx *format.RestoreCtx) error {
switch n.Tp {
case QueryWatchResourceGroup:
return n.ResourceGroupOption.restore(ctx)
case QueryWatchAction:
return n.ActionOption.Restore(ctx)
case QueryWatchType:
return n.TextOption.Restore(ctx)
}
return nil
}
// Accept implements Node Accept interface.
func (n *QueryWatchOption) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*QueryWatchOption)
if n.ResourceGroupOption != nil && n.ResourceGroupOption.GroupNameExpr != nil {
node, ok := n.ResourceGroupOption.GroupNameExpr.Accept(v)
if !ok {
return n, false
}
n.ResourceGroupOption.GroupNameExpr = node.(ExprNode)
}
if n.ActionOption != nil {
node, ok := n.ActionOption.Accept(v)
if !ok {
return n, false
}
n.ActionOption = node.(*ResourceGroupRunawayActionOption)
}
if n.TextOption != nil {
node, ok := n.TextOption.Accept(v)
if !ok {
return n, false
}
n.TextOption = node.(*QueryWatchTextOption)
}
return v.Leave(n)
}
func CheckQueryWatchAppend(ops []*QueryWatchOption, newOp *QueryWatchOption) bool {
for _, op := range ops {
if op.Tp == newOp.Tp {
return false
}
}
return true
}
// QueryWatchResourceGroupOption is used for parsing the query watch resource group name.
type QueryWatchResourceGroupOption struct {
GroupNameStr CIStr
GroupNameExpr ExprNode
}
func (n *QueryWatchResourceGroupOption) restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("RESOURCE GROUP ")
if n.GroupNameExpr != nil {
if err := n.GroupNameExpr.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while splicing ExprValue: [%v]", n.GroupNameExpr)
}
} else {
ctx.WriteName(n.GroupNameStr.String())
}
return nil
}
// QueryWatchTextOption is used for parsing the query watch text option.
type QueryWatchTextOption struct {
node
Type RunawayWatchType
PatternExpr ExprNode
TypeSpecified bool
}
// Restore implements Node interface.
func (n *QueryWatchTextOption) Restore(ctx *format.RestoreCtx) error {
if n.TypeSpecified {
ctx.WriteKeyWord("SQL TEXT ")
ctx.WriteKeyWord(n.Type.String())
ctx.WriteKeyWord(" TO ")
} else {
switch n.Type {
case WatchSimilar:
ctx.WriteKeyWord("SQL DIGEST ")
case WatchPlan:
ctx.WriteKeyWord("PLAN DIGEST ")
}
}
if err := n.PatternExpr.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while splicing ExprValue: [%v]", n.PatternExpr)
}
return nil
}
// Accept implements Node Accept interface.
func (n *QueryWatchTextOption) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*QueryWatchTextOption)
if n.PatternExpr != nil {
node, ok := n.PatternExpr.Accept(v)
if !ok {
return n, false
}
n.PatternExpr = node.(ExprNode)
}
return v.Leave(n)
}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package ast
import (
"encoding/json"
"strings"
"unsafe"
"github.com/pingcap/errors"
"github.com/pingcap/tidb/pkg/parser/util"
)
// TableLockType is the type of the table lock.
type TableLockType byte
const (
// TableLockNone means this table lock is absent.
TableLockNone TableLockType = iota
// TableLockRead means the session with this lock can read the table (but not write it).
// Multiple sessions can acquire a READ lock for the table at the same time.
// Other sessions can read the table without explicitly acquiring a READ lock.
TableLockRead
// TableLockReadLocal is not supported.
TableLockReadLocal
// TableLockReadOnly is used to set a table into read-only status,
// when the session exits, it will not release its lock automatically.
TableLockReadOnly
// TableLockWrite means only the session with this lock has write/read permission.
// Only the session that holds the lock can access the table. No other session can access it until the lock is released.
TableLockWrite
// TableLockWriteLocal means the session with this lock has write/read permission, and the other session still has read permission.
TableLockWriteLocal
)
// String implements fmt.Stringer interface.
func (t TableLockType) String() string {
switch t {
case TableLockNone:
return "NONE"
case TableLockRead:
return "READ"
case TableLockReadLocal:
return "READ LOCAL"
case TableLockReadOnly:
return "READ ONLY"
case TableLockWriteLocal:
return "WRITE LOCAL"
case TableLockWrite:
return "WRITE"
}
return ""
}
// ViewAlgorithm is VIEW's SQL ALGORITHM characteristic.
// See https://dev.mysql.com/doc/refman/5.7/en/view-algorithms.html
type ViewAlgorithm int
// ViewAlgorithm values.
const (
AlgorithmUndefined ViewAlgorithm = iota
AlgorithmMerge
AlgorithmTemptable
)
// String implements fmt.Stringer interface.
func (v *ViewAlgorithm) String() string {
switch *v {
case AlgorithmMerge:
return "MERGE"
case AlgorithmTemptable:
return "TEMPTABLE"
case AlgorithmUndefined:
return "UNDEFINED"
default:
return "UNDEFINED"
}
}
// ViewSecurity is VIEW's SQL SECURITY characteristic.
// See https://dev.mysql.com/doc/refman/5.7/en/create-view.html
type ViewSecurity int
// ViewSecurity values.
const (
SecurityDefiner ViewSecurity = iota
SecurityInvoker
)
// String implements fmt.Stringer interface.
func (v *ViewSecurity) String() string {
switch *v {
case SecurityInvoker:
return "INVOKER"
case SecurityDefiner:
return "DEFINER"
default:
return "DEFINER"
}
}
// ViewCheckOption is VIEW's WITH CHECK OPTION clause part.
// See https://dev.mysql.com/doc/refman/5.7/en/view-check-option.html
type ViewCheckOption int
// ViewCheckOption values.
const (
CheckOptionLocal ViewCheckOption = iota
CheckOptionCascaded
)
// String implements fmt.Stringer interface.
func (v *ViewCheckOption) String() string {
switch *v {
case CheckOptionLocal:
return "LOCAL"
case CheckOptionCascaded:
return "CASCADED"
default:
return "CASCADED"
}
}
// PartitionType is the type for PartitionInfo
type PartitionType int
// PartitionType types.
const (
// Actually non-partitioned, but during DDL keeping the table as
// a single partition
PartitionTypeNone PartitionType = 0
PartitionTypeRange PartitionType = 1
PartitionTypeHash PartitionType = 2
PartitionTypeList PartitionType = 3
PartitionTypeKey PartitionType = 4
PartitionTypeSystemTime PartitionType = 5
)
// String implements fmt.Stringer interface.
func (p PartitionType) String() string {
switch p {
case PartitionTypeRange:
return "RANGE"
case PartitionTypeHash:
return "HASH"
case PartitionTypeList:
return "LIST"
case PartitionTypeKey:
return "KEY"
case PartitionTypeSystemTime:
return "SYSTEM_TIME"
case PartitionTypeNone:
return "NONE"
default:
return ""
}
}
// PrimaryKeyType is the type of primary key.
// Available values are "clustered", "nonclustered", and ""(default).
type PrimaryKeyType int8
// String implements fmt.Stringer interface.
func (p PrimaryKeyType) String() string {
switch p {
case PrimaryKeyTypeClustered:
return "CLUSTERED"
case PrimaryKeyTypeNonClustered:
return "NONCLUSTERED"
default:
return ""
}
}
// PrimaryKeyType values.
const (
PrimaryKeyTypeDefault PrimaryKeyType = iota
PrimaryKeyTypeClustered
PrimaryKeyTypeNonClustered
)
// IndexType is the type of index
type IndexType int
// String implements Stringer interface.
func (t IndexType) String() string {
switch t {
case IndexTypeBtree:
return "BTREE"
case IndexTypeHash:
return "HASH"
case IndexTypeRtree:
return "RTREE"
case IndexTypeHypo:
return "HYPO"
case IndexTypeHNSW:
return "HNSW"
case IndexTypeVector:
return "VECTOR"
case IndexTypeInverted:
return "INVERTED"
case IndexTypeFulltext:
return "FULLTEXT"
default:
return ""
}
}
// IndexTypes
// Warning: 1) Also used in TiFlash 2) May come from a previous version persisted in TableInfo.
// So you must keep it compatible when modifying it.
const (
IndexTypeInvalid IndexType = iota
IndexTypeBtree
IndexTypeHash
IndexTypeRtree
IndexTypeHypo
IndexTypeVector
IndexTypeInverted
// IndexTypeHNSW is only used in AST.
// It will be rewritten into IndexTypeVector after preprocessor phase.
IndexTypeHNSW
IndexTypeFulltext
)
// ReferOptionType is the type for refer options.
type ReferOptionType int
// Refer option types.
const (
ReferOptionNoOption ReferOptionType = iota
ReferOptionRestrict
ReferOptionCascade
ReferOptionSetNull
ReferOptionNoAction
ReferOptionSetDefault
)
// String implements fmt.Stringer interface.
func (r ReferOptionType) String() string {
switch r {
case ReferOptionRestrict:
return "RESTRICT"
case ReferOptionCascade:
return "CASCADE"
case ReferOptionSetNull:
return "SET NULL"
case ReferOptionNoAction:
return "NO ACTION"
case ReferOptionSetDefault:
return "SET DEFAULT"
}
return ""
}
// CIStr is case insensitive string.
type CIStr struct {
O string `json:"O"` // Original string.
L string `json:"L"` // Lower case string.
}
// Hash64 implements HashEquals interface.
func (cis *CIStr) Hash64(h util.IHasher) {
h.HashString(cis.L)
}
// Equals implements HashEquals interface.
func (cis *CIStr) Equals(other any) bool {
cis2, ok := other.(*CIStr)
if !ok {
return false
}
if cis == nil {
return cis2 == nil
}
if cis2 == nil {
return false
}
return cis.L == cis2.L
}
// String implements fmt.Stringer interface.
func (cis CIStr) String() string {
return cis.O
}
// NewCIStr creates a new CIStr.
func NewCIStr(s string) (cs CIStr) {
cs.O = s
cs.L = strings.ToLower(s)
return
}
// UnmarshalJSON implements the user defined unmarshal method.
// CIStr can be unmarshaled from a single string, so PartitionDefinition.Name
// in this change https://github.com/pingcap/tidb/pull/6460/files would be
// compatible during TiDB upgrading.
func (cis *CIStr) UnmarshalJSON(b []byte) error {
type T CIStr
if err := json.Unmarshal(b, (*T)(cis)); err == nil {
return nil
}
// Unmarshal CIStr from a single string.
err := json.Unmarshal(b, &cis.O)
if err != nil {
return errors.Trace(err)
}
cis.L = strings.ToLower(cis.O)
return nil
}
// MemoryUsage return the memory usage of CIStr
func (cis *CIStr) MemoryUsage() (sum int64) {
if cis == nil {
return
}
return int64(unsafe.Sizeof(cis.O))*2 + int64(len(cis.O)+len(cis.L))
}
// RunawayActionType is the type of runaway action.
type RunawayActionType int32
// RunawayActionType values.
const (
RunawayActionNone RunawayActionType = iota
RunawayActionDryRun
RunawayActionCooldown
RunawayActionKill
RunawayActionSwitchGroup
)
// RunawayWatchType is the type of runaway watch.
type RunawayWatchType int32
// RunawayWatchType values.
const (
WatchNone RunawayWatchType = iota
WatchExact
WatchSimilar
WatchPlan
)
// String implements fmt.Stringer interface.
func (t RunawayWatchType) String() string {
switch t {
case WatchExact:
return "EXACT"
case WatchSimilar:
return "SIMILAR"
case WatchPlan:
return "PLAN"
default:
return "NONE"
}
}
// RunawayOptionType is the runaway's option type.
type RunawayOptionType int
// RunawayOptionType values.
const (
RunawayRule RunawayOptionType = iota
RunawayAction
RunawayWatch
)
// String implements fmt.Stringer interface.
func (t RunawayActionType) String() string {
switch t {
case RunawayActionDryRun:
return "DRYRUN"
case RunawayActionCooldown:
return "COOLDOWN"
case RunawayActionKill:
return "KILL"
case RunawayActionSwitchGroup:
return "SWITCH_GROUP"
default:
return "DRYRUN"
}
}
// ColumnChoice is the type of the column choice.
type ColumnChoice byte
// ColumnChoice values.
const (
DefaultChoice ColumnChoice = iota
AllColumns
PredicateColumns
ColumnList
)
// String implements fmt.Stringer interface.
func (s ColumnChoice) String() string {
switch s {
case AllColumns:
return "ALL"
case PredicateColumns:
return "PREDICATE"
case ColumnList:
return "LIST"
default:
return "DEFAULT"
}
}
// Priority values.
const (
LowPriorityValue = 1
MediumPriorityValue = 8
HighPriorityValue = 16
)
// PriorityValueToName converts the priority value to corresponding name
func PriorityValueToName(value uint64) string {
switch value {
case LowPriorityValue:
return "LOW"
case MediumPriorityValue:
return "MEDIUM"
case HighPriorityValue:
return "HIGH"
default:
return "MEDIUM"
}
}
// Copyright 2023 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package ast
import (
"strconv"
"github.com/pingcap/errors"
"github.com/pingcap/tidb/pkg/parser/format"
"github.com/pingcap/tidb/pkg/parser/types"
)
var (
_ Node = &StoreParameter{}
_ Node = &ProcedureDecl{}
_ StmtNode = &ProcedureBlock{}
_ StmtNode = &ProcedureInfo{}
_ StmtNode = &DropProcedureStmt{}
_ StmtNode = &ProcedureElseIfBlock{}
_ StmtNode = &ProcedureElseBlock{}
_ StmtNode = &ProcedureIfBlock{}
_ StmtNode = &SimpleWhenThenStmt{}
_ StmtNode = &ProcedureIfInfo{}
_ StmtNode = &ProcedureLabelBlock{}
_ StmtNode = &ProcedureLabelLoop{}
_ StmtNode = &ProcedureJump{}
_ DeclNode = &ProcedureErrorControl{}
_ DeclNode = &ProcedureCursor{}
_ DeclNode = &ProcedureDecl{}
_ LabelInfo = &ProcedureLabelBlock{}
_ LabelInfo = &ProcedureLabelLoop{}
_ ErrNode = &ProcedureErrorCon{}
_ ErrNode = &ProcedureErrorVal{}
_ ErrNode = &ProcedureErrorState{}
)
// procedure param type.
const (
MODE_IN = iota
MODE_OUT
MODE_INOUT
)
// procedure handler operation type.
const (
PROCEDUR_CONTINUE = iota
PROCEDUR_EXIT
)
// procedure handler value string.
const (
PROCEDUR_SQLWARNING = iota
PROCEDUR_NOT_FOUND
PROCEDUR_SQLEXCEPTION
PROCEDUR_END
)
// DeclNode expresses procedure block variable interface(include handler\cursor\sp variable)
type DeclNode interface {
Node
}
// ErrNode expresses all types of handler condition value.
type ErrNode interface {
StmtNode
}
// ProcedureDeclInfo is the base node of a procedure variable.
type ProcedureDeclInfo struct {
node
}
// ProcedureErrorCondition is the base node of a condition value.
type ProcedureErrorCondition struct {
stmtNode
}
// LabelInfo is the interface of loop and block label.
type LabelInfo interface {
// GetErrorStatus gets label status, if error, return end label name and true.
// if normal,The returned string has no meaning and false.
GetErrorStatus() (string, bool)
// GetLabelName gets label name.
GetLabelName() string
// IsBlock gets type flag, true is block, false is loop.
IsBlock() bool
// GetBlock gets block stmtnode
GetBlock() StmtNode
}
// StoreParameter is the parameter of stored procedure.
type StoreParameter struct {
node
Paramstatus int
ParamType *types.FieldType
ParamName string
}
// Restore implements Node interface.
func (n *StoreParameter) Restore(ctx *format.RestoreCtx) error {
switch n.Paramstatus {
case MODE_IN:
ctx.WriteKeyWord(" IN ")
case MODE_OUT:
ctx.WriteKeyWord(" OUT ")
case MODE_INOUT:
ctx.WriteKeyWord(" INOUT ")
}
ctx.WriteName(n.ParamName)
ctx.WritePlain(" ")
ctx.WriteKeyWord(n.ParamType.CompactStr())
return nil
}
// Accept implements Node Accept interface.
func (n *StoreParameter) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*StoreParameter)
return v.Leave(n)
}
// ProcedureDecl represents the internal variables of stored procedure .
type ProcedureDecl struct {
ProcedureDeclInfo
DeclNames []string
DeclType *types.FieldType
DeclDefault ExprNode
}
// Restore implements Node interface.
func (n *ProcedureDecl) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("DECLARE ")
for i, name := range n.DeclNames {
if i != 0 {
ctx.WritePlain(",")
}
ctx.WriteName(name)
}
ctx.WritePlain(" ")
ctx.WriteKeyWord(n.DeclType.CompactStr())
if n.DeclDefault != nil {
ctx.WriteKeyWord(" DEFAULT ")
if err := n.DeclDefault.Restore(ctx); err != nil {
return errors.Annotate(err, "An error occur while restore expr")
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *ProcedureDecl) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ProcedureDecl)
if n.DeclDefault != nil {
node, ok := n.DeclDefault.Accept(v)
if !ok {
return n, false
}
n.DeclDefault = node.(ExprNode)
}
return v.Leave(n)
}
// ProcedureBlock represents a procedure block.
type ProcedureBlock struct {
stmtNode
ProcedureVars []DeclNode // include handler && cursor && variable
ProcedureProcStmts []StmtNode // procedure statement
}
// Restore implements Node interface.
func (n *ProcedureBlock) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("BEGIN ")
for _, ProcedureVar := range n.ProcedureVars {
err := ProcedureVar.Restore(ctx)
if err != nil {
return err
}
ctx.WritePlain(";")
}
for _, ProcedureProcStmt := range n.ProcedureProcStmts {
err := ProcedureProcStmt.Restore(ctx)
if err != nil {
return err
}
ctx.WritePlain(";")
}
ctx.WriteKeyWord(" END")
return nil
}
// Accept implements Node interface.
func (n *ProcedureBlock) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ProcedureBlock)
for i, ProcedureVar := range n.ProcedureVars {
node, ok := ProcedureVar.Accept(v)
if !ok {
return n, false
}
n.ProcedureVars[i] = node.(DeclNode)
}
// Store Procedure doesn't check the justifiability for statements, so don't traverse ProcedureProcStmts.
return v.Leave(n)
}
// ProcedureInfo stores all procedure information.
type ProcedureInfo struct {
stmtNode
IfNotExists bool
ProcedureName *TableName
ProcedureParam []*StoreParameter //procedure param
ProcedureBody StmtNode //procedure body statement
ProcedureParamStr string //procedure parameter string
}
// Restore implements Node interface.
func (n *ProcedureInfo) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("CREATE PROCEDURE ")
if n.IfNotExists {
ctx.WriteKeyWord("IF NOT EXISTS ")
}
err := n.ProcedureName.Restore(ctx)
if err != nil {
return err
}
ctx.WritePlain("(")
for i, ProcedureParam := range n.ProcedureParam {
if i > 0 {
ctx.WritePlain(",")
}
err := ProcedureParam.Restore(ctx)
if err != nil {
return err
}
}
ctx.WritePlain(") ")
err = (n.ProcedureBody).Restore(ctx)
if err != nil {
return err
}
return nil
}
// Accept implements Node Accept interface.
func (n *ProcedureInfo) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ProcedureInfo)
for i, ProcedureParam := range n.ProcedureParam {
node, ok := ProcedureParam.Accept(v)
if !ok {
return n, false
}
n.ProcedureParam[i] = node.(*StoreParameter)
}
node, ok := n.ProcedureBody.Accept(v)
if !ok {
return n, false
}
n.ProcedureBody = node.(StmtNode)
return v.Leave(n)
}
// DropProcedureStmt represents the ast of `drop procedure`
type DropProcedureStmt struct {
stmtNode
IfExists bool
ProcedureName *TableName
}
// Restore implements DropProcedureStmt interface.
func (n *DropProcedureStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("DROP PROCEDURE ")
if n.IfExists {
ctx.WriteKeyWord("IF EXISTS ")
}
err := n.ProcedureName.Restore(ctx)
if err != nil {
return err
}
return nil
}
// Accept implements Node interface.
func (n *DropProcedureStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*DropProcedureStmt)
return v.Leave(n)
}
// ProcedureIfInfo stores the `if statement` of procedure.
type ProcedureIfInfo struct {
stmtNode
IfBody *ProcedureIfBlock
}
// Restore implements Node interface.
func (n *ProcedureIfInfo) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("IF ")
err := n.IfBody.Restore(ctx)
if err != nil {
return err
}
ctx.WriteKeyWord("END IF")
return nil
}
// Accept implements ProcedureIfInfo Accept interface.
func (n *ProcedureIfInfo) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ProcedureIfInfo)
node, ok := n.IfBody.Accept(v)
if !ok {
return n, false
}
n.IfBody = node.(*ProcedureIfBlock)
return v.Leave(n)
}
// ProcedureElseIfBlock stores the `elseif` statement info of procedure.
type ProcedureElseIfBlock struct {
stmtNode
ProcedureIfStmt *ProcedureIfBlock
}
// Restore implements Node interface.
func (n *ProcedureElseIfBlock) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("ELSEIF ")
err := n.ProcedureIfStmt.Restore(ctx)
if err != nil {
return err
}
return nil
}
// Accept implements ProcedureElseIfBlock Accept interface.
func (n *ProcedureElseIfBlock) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ProcedureElseIfBlock)
node, ok := n.ProcedureIfStmt.Accept(v)
if !ok {
return n, false
}
n.ProcedureIfStmt = node.(*ProcedureIfBlock)
return v.Leave(n)
}
// ProcedureElseBlock stores procedure `else` statement info.
type ProcedureElseBlock struct {
stmtNode
ProcedureIfStmts []StmtNode
}
// Restore implements ProcedureElseBlock interface.
func (n *ProcedureElseBlock) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("ELSE ")
for _, stmt := range n.ProcedureIfStmts {
err := stmt.Restore(ctx)
if err != nil {
return err
}
ctx.WriteKeyWord(";")
}
return nil
}
// Accept implements ProcedureElseBlock Accept interface.
func (n *ProcedureElseBlock) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ProcedureElseBlock)
return v.Leave(n)
}
// ProcedureIfBlock stores `expr ... else if ... else ...` statement in procedure.
type ProcedureIfBlock struct {
stmtNode
IfExpr ExprNode
ProcedureIfStmts []StmtNode
ProcedureElseStmt StmtNode
}
// Restore implements ProcedureIfBlock interface.
func (n *ProcedureIfBlock) Restore(ctx *format.RestoreCtx) error {
err := n.IfExpr.Restore(ctx)
if err != nil {
return err
}
ctx.WriteKeyWord(" THEN ")
for _, stmt := range n.ProcedureIfStmts {
err := stmt.Restore(ctx)
if err != nil {
return err
}
ctx.WriteKeyWord(";")
}
if n.ProcedureElseStmt != nil {
err = n.ProcedureElseStmt.Restore(ctx)
if err != nil {
return err
}
}
return nil
}
// Accept implements ProcedureIfBlock Accept interface.
func (n *ProcedureIfBlock) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ProcedureIfBlock)
if n.IfExpr != nil {
node, ok := n.IfExpr.Accept(v)
if !ok {
return n, false
}
n.IfExpr = node.(ExprNode)
}
if n.ProcedureElseStmt != nil {
node, ok := n.ProcedureElseStmt.Accept(v)
if !ok {
return n, false
}
n.ProcedureElseStmt = node.(StmtNode)
}
return v.Leave(n)
}
// SimpleWhenThenStmt stores `case expr then ...` statement.
type SimpleWhenThenStmt struct {
stmtNode
Expr ExprNode
ProcedureStmts []StmtNode
}
// Restore implements SimpleWhenThenStmt interface.
func (n *SimpleWhenThenStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("WHEN ")
err := n.Expr.Restore(ctx)
if err != nil {
return err
}
ctx.WriteKeyWord(" THEN ")
for _, stmt := range n.ProcedureStmts {
err := stmt.Restore(ctx)
if err != nil {
return err
}
ctx.WriteKeyWord(";")
}
return nil
}
// Accept implements SimpleWhenThenStmt Accept interface.
func (n *SimpleWhenThenStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*SimpleWhenThenStmt)
if n.Expr != nil {
node, ok := n.Expr.Accept(v)
if !ok {
return n, false
}
n.Expr = node.(ExprNode)
}
// Store Procedure do not check sql justifiability, so don't traverse ProcedureStmts.
return v.Leave(n)
}
// SimpleCaseStmt store WhenCases SimpleWhenThenStmt `case expr SimpleWhenThenStmt else ...` statement.
type SimpleCaseStmt struct {
stmtNode
Condition ExprNode
WhenCases []*SimpleWhenThenStmt
ElseCases []StmtNode
}
// Restore implements SimpleCaseStmt interface.
func (n *SimpleCaseStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("CASE ")
err := n.Condition.Restore(ctx)
if err != nil {
return err
}
ctx.WriteKeyWord(" ")
for _, stmt := range n.WhenCases {
err := stmt.Restore(ctx)
if err != nil {
return err
}
}
if n.ElseCases != nil {
ctx.WriteKeyWord(" ELSE ")
for _, stmt := range n.ElseCases {
err := stmt.Restore(ctx)
if err != nil {
return err
}
ctx.WriteKeyWord(";")
}
}
ctx.WriteKeyWord(" END CASE")
return nil
}
// Accept implements SimpleCaseStmt Accept interface.
func (n *SimpleCaseStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*SimpleCaseStmt)
node, ok := n.Condition.Accept(v)
if !ok {
return n, false
}
n.Condition = node.(ExprNode)
for i, stmt := range n.WhenCases {
node, ok := stmt.Accept(v)
if !ok {
return n, false
}
n.WhenCases[i] = node.(*SimpleWhenThenStmt)
}
if n.ElseCases != nil {
for i, stmt := range n.ElseCases {
node, ok := stmt.Accept(v)
if !ok {
return n, false
}
n.ElseCases[i] = node.(StmtNode)
}
}
return v.Leave(n)
}
// SearchWhenThenStmt stores SearchCaseStmt whencase `case expr then ...` statement.
type SearchWhenThenStmt struct {
stmtNode
Expr ExprNode
ProcedureStmts []StmtNode
}
// Restore implements SearchWhenThenStmt interface.
func (n *SearchWhenThenStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("WHEN ")
err := n.Expr.Restore(ctx)
if err != nil {
return err
}
ctx.WriteKeyWord(" THEN ")
for _, stmt := range n.ProcedureStmts {
err := stmt.Restore(ctx)
if err != nil {
return err
}
ctx.WriteKeyWord(";")
}
return nil
}
// Accept implements SearchWhenThenStmt Accept interface.
func (n *SearchWhenThenStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*SearchWhenThenStmt)
if n.Expr != nil {
node, ok := n.Expr.Accept(v)
if !ok {
return n, false
}
n.Expr = node.(ExprNode)
}
// Store Procedure do not check sql justifiability, so don't traverse ProcedureStmts.
return v.Leave(n)
}
// SearchCaseStmt store `case SimpleWhenThenStmt else ...` statement.
type SearchCaseStmt struct {
stmtNode
WhenCases []*SearchWhenThenStmt
ElseCases []StmtNode
}
// Restore implements SearchCaseStmt interface.
func (n *SearchCaseStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("CASE ")
for _, stmt := range n.WhenCases {
err := stmt.Restore(ctx)
if err != nil {
return err
}
}
if n.ElseCases != nil {
ctx.WriteKeyWord(" ELSE ")
for _, stmt := range n.ElseCases {
err := stmt.Restore(ctx)
if err != nil {
return err
}
ctx.WriteKeyWord(";")
}
}
ctx.WriteKeyWord(" END CASE")
return nil
}
// Accept implements SimpleCaseStmt Accept interface.
func (n *SearchCaseStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*SearchCaseStmt)
for i, stmt := range n.WhenCases {
node, ok := stmt.Accept(v)
if !ok {
return n, false
}
n.WhenCases[i] = node.(*SearchWhenThenStmt)
}
// Store Procedure do not check sql justifiability, so don't traverse ElseCases.
return v.Leave(n)
}
// ProcedureRepeatStmt store `repeat ... until expr end repeat` statement.
type ProcedureRepeatStmt struct {
stmtNode
Body []StmtNode
Condition ExprNode
}
// Restore implements ProcedureRepeatStmt interface.
func (n *ProcedureRepeatStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("REPEAT ")
for _, stmt := range n.Body {
err := stmt.Restore(ctx)
if err != nil {
return err
}
ctx.WriteKeyWord(";")
}
ctx.WriteKeyWord("UNTIL ")
err := n.Condition.Restore(ctx)
if err != nil {
return err
}
ctx.WriteKeyWord(" END REPEAT")
return nil
}
// Accept implements ProcedureRepeatStmt Accept interface.
func (n *ProcedureRepeatStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ProcedureRepeatStmt)
for i, stmt := range n.Body {
node, ok := stmt.Accept(v)
if !ok {
return n, false
}
n.Body[i] = node.(StmtNode)
}
node, ok := n.Condition.Accept(v)
if !ok {
return n, false
}
n.Condition = node.(ExprNode)
return v.Leave(n)
}
// ProcedureWhileStmt stores `while expr do ... end while` statement.
type ProcedureWhileStmt struct {
stmtNode
Condition ExprNode
Body []StmtNode
}
// Restore implements ProcedureWhileStmt interface.
func (n *ProcedureWhileStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("WHILE ")
err := n.Condition.Restore(ctx)
if err != nil {
return err
}
ctx.WriteKeyWord(" DO ")
for _, stmt := range n.Body {
err := stmt.Restore(ctx)
if err != nil {
return err
}
ctx.WriteKeyWord(";")
}
ctx.WriteKeyWord("END WHILE")
return nil
}
// Accept implements ProcedureWhileStmt Accept interface.
func (n *ProcedureWhileStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ProcedureWhileStmt)
node, ok := n.Condition.Accept(v)
if !ok {
return n, false
}
n.Condition = node.(ExprNode)
for i, stmt := range n.Body {
node, ok := stmt.Accept(v)
if !ok {
return n, false
}
n.Body[i] = node.(StmtNode)
}
return v.Leave(n)
}
// ProcedureCursor stores procedure cursor statement.
type ProcedureCursor struct {
ProcedureDeclInfo
CurName string
Selectstring StmtNode
}
// Restore implements ProcedureCursor interface.
func (n *ProcedureCursor) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("DECLARE ")
ctx.WriteKeyWord(n.CurName)
ctx.WriteKeyWord(" CURSOR FOR ")
err := n.Selectstring.Restore(ctx)
if err != nil {
return err
}
return nil
}
// Accept implements ProcedureCursor Accept interface.
func (n *ProcedureCursor) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ProcedureCursor)
return v.Leave(n)
}
// ProcedureErrorControl stored procedure handler statement.
type ProcedureErrorControl struct {
ProcedureDeclInfo
ControlHandle int // handler operation (exit\continue).
ErrorCon []ErrNode //handler condition value.
Operate StmtNode // handler block.
}
// Restore implements ProcedureErrorControl interface.
func (n *ProcedureErrorControl) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("DECLARE ")
switch n.ControlHandle {
case PROCEDUR_CONTINUE:
ctx.WriteKeyWord("CONTINUE ")
case PROCEDUR_EXIT:
ctx.WriteKeyWord("EXIT ")
}
ctx.WriteKeyWord("HANDLER FOR ")
for i, errorInfo := range n.ErrorCon {
err := errorInfo.Restore(ctx)
if err != nil {
return err
}
if i+1 != len(n.ErrorCon) {
ctx.WritePlain(", ")
}
}
ctx.WritePlain(" ")
err := n.Operate.Restore(ctx)
if err != nil {
return err
}
return nil
}
// Accept implements ProcedureErrorControl Accept interface.
func (n *ProcedureErrorControl) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ProcedureErrorControl)
for i, errorInfo := range n.ErrorCon {
node, ok := errorInfo.Accept(v)
if !ok {
return n, false
}
n.ErrorCon[i] = node.(ErrNode)
}
return v.Leave(n)
}
// ProcedureOpenCur store open cursor statement.
type ProcedureOpenCur struct {
stmtNode
CurName string
}
// Restore implements ProcedureOpenCur interface.
func (n *ProcedureOpenCur) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("OPEN ")
ctx.WriteKeyWord(n.CurName)
return nil
}
// Accept implements ProcedureOpenCur Accept interface.
func (n *ProcedureOpenCur) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ProcedureOpenCur)
return v.Leave(n)
}
// ProcedureCloseCur store close cursor statement.
type ProcedureCloseCur struct {
stmtNode
CurName string
}
// Restore implements ProcedureCloseCur interface.
func (n *ProcedureCloseCur) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("CLOSE ")
ctx.WriteKeyWord(n.CurName)
return nil
}
// Accept implements ProcedureCloseCur Accept interface.
func (n *ProcedureCloseCur) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ProcedureCloseCur)
return v.Leave(n)
}
// ProcedureFetchInto store cursor read data command.
type ProcedureFetchInto struct {
stmtNode
CurName string
Variables []string
}
// Restore implements ProcedureFetchInto interface.
func (n *ProcedureFetchInto) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("FETCH ")
ctx.WriteKeyWord(n.CurName)
ctx.WriteKeyWord(" INTO ")
for i, varName := range n.Variables {
ctx.WriteKeyWord(varName)
if i+1 < len(n.Variables) {
ctx.WriteKeyWord(", ")
}
}
return nil
}
// Accept implements ProcedureFetchInto Accept interface.
func (n *ProcedureFetchInto) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ProcedureFetchInto)
return v.Leave(n)
}
// ProcedureErrorVal store procedure handler error code.
type ProcedureErrorVal struct {
ProcedureErrorCondition
ErrorNum uint64
}
// Restore implements ProcedureErrorVal interface.
func (n *ProcedureErrorVal) Restore(ctx *format.RestoreCtx) error {
ctx.WritePlain(strconv.FormatUint(n.ErrorNum, 10))
return nil
}
// Accept implements ProcedureErrorVal Accept interface.
func (n *ProcedureErrorVal) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ProcedureErrorVal)
return v.Leave(n)
}
// ProcedureErrorState store procedure handler SQLSTATE string.
type ProcedureErrorState struct {
ProcedureErrorCondition
CodeStatus string
}
// Restore implements ProcedureErrorState interface.
func (n *ProcedureErrorState) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("SQLSTATE ")
ctx.WriteString(n.CodeStatus)
return nil
}
// Accept implements ProcedureErrorState Accept interface.
func (n *ProcedureErrorState) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ProcedureErrorState)
return v.Leave(n)
}
// ProcedureErrorCon stores procedure handler status info.
type ProcedureErrorCon struct {
ProcedureErrorCondition
ErrorCon int
}
// Restore implements ProcedureErrorCon interface.
func (n *ProcedureErrorCon) Restore(ctx *format.RestoreCtx) error {
switch n.ErrorCon {
case PROCEDUR_SQLWARNING:
ctx.WriteKeyWord("SQLWARNING")
case PROCEDUR_NOT_FOUND:
ctx.WriteKeyWord("NOT FOUND")
case PROCEDUR_SQLEXCEPTION:
ctx.WriteKeyWord("SQLEXCEPTION")
}
return nil
}
// Accept implements ProcedureErrorCon Accept interface.
func (n *ProcedureErrorCon) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ProcedureErrorCon)
return v.Leave(n)
}
// ProcedureLabelBlock stored procedure block label statement.
type ProcedureLabelBlock struct {
stmtNode
LabelName string
Block *ProcedureBlock
LabelError bool
LabelEnd string
}
// Restore implements ProcedureLabelBlock interface.
func (n *ProcedureLabelBlock) Restore(ctx *format.RestoreCtx) error {
ctx.WriteName(n.LabelName)
ctx.WriteKeyWord(": ")
err := n.Block.Restore(ctx)
if err != nil {
return err
}
if n.LabelError {
return errors.Errorf("the same label has different names,begin: %s,end: %s", n.LabelName, n.LabelEnd)
}
ctx.WriteKeyWord(" ")
ctx.WriteName(n.LabelName)
return nil
}
// Accept implements ProcedureLabelBlock Accept interface.
func (n *ProcedureLabelBlock) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ProcedureLabelBlock)
node, ok := n.Block.Accept(v)
if !ok {
return n, false
}
n.Block = node.(*ProcedureBlock)
// Store Procedure do not check sql justifiability, so don't traverse ProcedureProcStmts.
return v.Leave(n)
}
// GetErrorStatus gets label error info.
func (n *ProcedureLabelBlock) GetErrorStatus() (string, bool) {
return n.LabelEnd, n.LabelError
}
// GetLabelName gets label name.
func (n *ProcedureLabelBlock) GetLabelName() string {
return n.LabelName
}
// IsBlock gets block flag.
func (n *ProcedureLabelBlock) IsBlock() bool {
return true
}
// GetBlock gets the block stmtnode
func (n *ProcedureLabelBlock) GetBlock() StmtNode {
return n.Block
}
// ProcedureLabelLoop stores the labeled loop block info in procedure.
type ProcedureLabelLoop struct {
stmtNode
LabelName string
Block StmtNode
LabelError bool
LabelEnd string
}
// Restore implements ProcedureLabelLoop interface.
func (n *ProcedureLabelLoop) Restore(ctx *format.RestoreCtx) error {
ctx.WriteName(n.LabelName)
ctx.WriteKeyWord(": ")
err := n.Block.Restore(ctx)
if err != nil {
return err
}
if n.LabelError {
return errors.Errorf("the same label has different names,begin: %s,end: %s", n.LabelName, n.LabelEnd)
}
ctx.WriteKeyWord(" ")
ctx.WriteName(n.LabelName)
return nil
}
// Accept implements ProcedureLabelBlock Accept interface.
func (n *ProcedureLabelLoop) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ProcedureLabelLoop)
node, ok := n.Block.Accept(v)
if !ok {
return n, false
}
n.Block = node.(StmtNode)
// Store Procedure do not check sql justifiability, so don't traverse ProcedureProcStmts.
return v.Leave(n)
}
// GetErrorStatus get label error info.
func (n *ProcedureLabelLoop) GetErrorStatus() (string, bool) {
return n.LabelEnd, n.LabelError
}
// GetLabelName get label name.
func (n *ProcedureLabelLoop) GetLabelName() string {
return n.LabelName
}
// IsBlock get block flag.
func (n *ProcedureLabelLoop) IsBlock() bool {
return false
}
// GetBlock get label stmtnode
func (n *ProcedureLabelLoop) GetBlock() StmtNode {
return n.Block
}
// ProcedureJump stores the Jump statements(leave and iterate) in procedure.
type ProcedureJump struct {
stmtNode
Name string
IsLeave bool
}
// Restore implements ProcedureJump interface.
func (n *ProcedureJump) Restore(ctx *format.RestoreCtx) error {
if n.IsLeave {
ctx.WriteKeyWord("LEAVE ")
} else {
ctx.WriteKeyWord("ITERATE ")
}
ctx.WriteString(n.Name)
return nil
}
// Accept implements ProcedureJump Accept interface.
func (n *ProcedureJump) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*ProcedureJump)
return v.Leave(n)
}
// Copyright 2025 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package ast
// DDL Statements
const (
// AlterDatabaseCommand represents ALTER DATABASE statement
AlterDatabaseCommand = "ALTER DATABASE"
// AlterInstanceCommand represents ALTER INSTANCE statement
AlterInstanceCommand = "ALTER INSTANCE"
// AlterPlacementPolicyCommand represents ALTER PLACEMENT POLICY statement
AlterPlacementPolicyCommand = "ALTER PLACEMENT POLICY"
// AlterRangeCommand represents ALTER RANGE statement
AlterRangeCommand = "ALTER RANGE"
// AlterResourceGroupCommand represents ALTER RESOURCE GROUP statement
AlterResourceGroupCommand = "ALTER RESOURCE GROUP"
// AlterSequenceCommand represents ALTER SEQUENCE statement
AlterSequenceCommand = "ALTER SEQUENCE"
// AlterTableCommand represents ALTER TABLE statement
AlterTableCommand = "ALTER TABLE"
// AlterUserCommand represents ALTER USER statement
AlterUserCommand = "ALTER USER"
// AdminCleanupTableLockCommand represents ADMIN CLEANUP TABLE LOCK statement
AdminCleanupTableLockCommand = "ADMIN CLEANUP TABLE LOCK"
// CreateDatabaseCommand represents CREATE DATABASE statement
CreateDatabaseCommand = "CREATE DATABASE"
// CreateIndexCommand represents CREATE INDEX statement
CreateIndexCommand = "CREATE INDEX"
// CreatePlacementPolicyCommand represents CREATE PLACEMENT POLICY statement
CreatePlacementPolicyCommand = "CREATE PLACEMENT POLICY"
// CreateMaskingPolicyCommand represents CREATE MASKING POLICY statement
CreateMaskingPolicyCommand = "CREATE MASKING POLICY"
// CreateResourceGroupCommand represents CREATE RESOURCE GROUP statement
CreateResourceGroupCommand = "CREATE RESOURCE GROUP"
// CreateSequenceCommand represents CREATE SEQUENCE statement
CreateSequenceCommand = "CREATE SEQUENCE"
// CreateTableCommand represents CREATE TABLE statement
CreateTableCommand = "CREATE TABLE"
// CreateUserCommand represents CREATE USER statement
CreateUserCommand = "CREATE USER"
// CreateViewCommand represents CREATE VIEW statement
CreateViewCommand = "CREATE VIEW"
// DropDatabaseCommand represents DROP DATABASE statement
DropDatabaseCommand = "DROP DATABASE"
// DropIndexCommand represents DROP INDEX statement
DropIndexCommand = "DROP INDEX"
// DropPlacementPolicyCommand represents DROP PLACEMENT POLICY statement
DropPlacementPolicyCommand = "DROP PLACEMENT POLICY"
// DropResourceGroupCommand represents DROP RESOURCE GROUP statement
DropResourceGroupCommand = "DROP RESOURCE GROUP"
// DropSequenceCommand represents DROP SEQUENCE statement
DropSequenceCommand = "DROP SEQUENCE"
// DropTableCommand represents DROP TABLE statement
DropTableCommand = "DROP TABLE"
// DropViewCommand represents DROP VIEW statement
DropViewCommand = "DROP VIEW"
// DropUserCommand represents DROP USER statement
DropUserCommand = "DROP USER"
// FlashBackDatabaseCommand represents FLASHBACK DATABASE statement
FlashBackDatabaseCommand = "FLASHBACK DATABASE"
// FlashBackTableCommand represents FLASHBACK TABLE statement
FlashBackTableCommand = "FLASHBACK TABLE"
// FlashBackClusterCommand represents FLASHBACK CLUSTER statement
FlashBackClusterCommand = "FLASHBACK CLUSTER"
// LockTablesCommand represents LOCK TABLES statement
LockTablesCommand = "LOCK TABLES"
// OptimizeTableCommand represents OPTIMIZE TABLE statement
OptimizeTableCommand = "OPTIMIZE TABLE"
// RecoverTableCommand represents RECOVER TABLE statement
RecoverTableCommand = "RECOVER TABLE"
// RenameTableCommand represents RENAME TABLE statement
RenameTableCommand = "RENAME TABLE"
// RenameUserCommand represents RENAME USER statement
RenameUserCommand = "RENAME USER"
// AdminRepairTableCommand represents ADMIN REPAIR TABLE statement
AdminRepairTableCommand = "ADMIN REPAIR TABLE"
// TruncateTableCommand represents TRUNCATE TABLE statement
TruncateTableCommand = "TRUNCATE TABLE"
// UnlockTablesCommand represents UNLOCK TABLES statement
UnlockTablesCommand = "UNLOCK TABLES"
)
// DML Statements
const (
// CallCommand represents CALL statement
CallCommand = "CALL"
// DeleteCommand represents DELETE statement
DeleteCommand = "DELETE"
// DistributeTableCommand represents DISTRIBUTE TABLE statement
DistributeTableCommand = "DISTRIBUTE TABLE"
// ImportIntoCommand represents IMPORT INTO statement
ImportIntoCommand = "IMPORT INTO"
// ReplaceCommand represents REPLACE statement
ReplaceCommand = "REPLACE"
// InsertCommand represents INSERT statement
InsertCommand = "INSERT"
// LoadDataCommand represents LOAD DATA statement
LoadDataCommand = "LOAD DATA"
// BatchCommand represents BATCH statement
BatchCommand = "BATCH"
// SelectCommand represents SELECT statement
SelectCommand = "SELECT"
// SplitRegionCommand represents SPLIT REGION statement
SplitRegionCommand = "SPLIT REGION"
// UpdateCommand represents UPDATE statement
UpdateCommand = "UPDATE"
)
// Show Statements
const (
// ShowCommand represents SHOW statement
ShowCommand = "SHOW"
// ShowCreateTableCommand represents SHOW CREATE TABLE statement
ShowCreateTableCommand = "SHOW CREATE TABLE"
// ShowCreateViewCommand represents SHOW CREATE VIEW statement
ShowCreateViewCommand = "SHOW CREATE VIEW"
// ShowCreateDatabaseCommand represents SHOW CREATE DATABASE statement
ShowCreateDatabaseCommand = "SHOW CREATE DATABASE"
// ShowCreateUserCommand represents SHOW CREATE USER statement
ShowCreateUserCommand = "SHOW CREATE USER"
// ShowCreateSequenceCommand represents SHOW CREATE SEQUENCE statement
ShowCreateSequenceCommand = "SHOW CREATE SEQUENCE"
// ShowCreatePlacementPolicyCommand represents SHOW CREATE PLACEMENT POLICY statement
ShowCreatePlacementPolicyCommand = "SHOW CREATE PLACEMENT POLICY"
// ShowMaskingPoliciesCommand represents SHOW MASKING POLICIES statement
ShowMaskingPoliciesCommand = "SHOW MASKING POLICIES"
// ShowCreateResourceGroupCommand represents SHOW CREATE RESOURCE GROUP statement
ShowCreateResourceGroupCommand = "SHOW CREATE RESOURCE GROUP"
// ShowCreateProcedureCommand represents SHOW CREATE PROCEDURE statement
ShowCreateProcedureCommand = "SHOW CREATE PROCEDURE"
// ShowDatabasesCommand represents SHOW DATABASES statement
ShowDatabasesCommand = "SHOW DATABASES"
// ShowTableCommand represents SHOW TABLES statement
ShowTableCommand = "SHOW TABLE"
// ShowTableStatusCommand represents SHOW TABLE STATUS statement
ShowTableStatusCommand = "SHOW TABLE STATUS"
// ShowColumnsCommand represents SHOW COLUMNS statement
ShowColumnsCommand = "SHOW COLUMNS"
// ShowIndexCommand represents SHOW INDEX statement
ShowIndexCommand = "SHOW INDEX"
// ShowVariablesCommand represents SHOW VARIABLES statement
ShowVariablesCommand = "SHOW VARIABLES"
// ShowStatusCommand represents SHOW STATUS statement
ShowStatusCommand = "SHOW STATUS"
// ShowProcessListCommand represents SHOW PROCESSLIST statement
ShowProcessListCommand = "SHOW PROCESSLIST"
// ShowEnginesCommand represents SHOW ENGINES statement
ShowEnginesCommand = "SHOW ENGINES"
// ShowCharsetCommand represents SHOW CHARSET statement
ShowCharsetCommand = "SHOW CHARSET"
// ShowCollationCommand represents SHOW COLLATION statement
ShowCollationCommand = "SHOW COLLATION"
// ShowWarningsCommand represents SHOW WARNINGS statement
ShowWarningsCommand = "SHOW WARNINGS"
// ShowErrorsCommand represents SHOW ERRORS statement
ShowErrorsCommand = "SHOW ERRORS"
// ShowGrantsCommand represents SHOW GRANTS statement
ShowGrantsCommand = "SHOW GRANTS"
// ShowPrivilegesCommand represents SHOW PRIVILEGES statement
ShowPrivilegesCommand = "SHOW PRIVILEGES"
// ShowTriggersCommand represents SHOW TRIGGERS statement
ShowTriggersCommand = "SHOW TRIGGERS"
// ShowProcedureStatusCommand represents SHOW PROCEDURE STATUS statement
ShowProcedureStatusCommand = "SHOW PROCEDURE STATUS"
// ShowFunctionStatusCommand represents SHOW FUNCTION STATUS statement
ShowFunctionStatusCommand = "SHOW FUNCTION STATUS"
// ShowEventsCommand represents SHOW EVENTS statement
ShowEventsCommand = "SHOW EVENTS"
// ShowPluginsCommand represents SHOW PLUGINS statement
ShowPluginsCommand = "SHOW PLUGINS"
// ShowProfileCommand represents SHOW PROFILE statement
ShowProfileCommand = "SHOW PROFILE"
// ShowProfilesCommand represents SHOW PROFILES statement
ShowProfilesCommand = "SHOW PROFILES"
// ShowMasterStatusCommand represents SHOW MASTER STATUS statement
ShowMasterStatusCommand = "SHOW MASTER STATUS"
// ShowBinaryLogStatusCommand represents SHOW BINARY LOG STATUS statement
ShowBinaryLogStatusCommand = "SHOW BINARY LOG STATUS"
// ShowOpenTablesCommand represents SHOW OPEN TABLES statement
ShowOpenTablesCommand = "SHOW OPEN TABLES"
// ShowConfigCommand represents SHOW CONFIG statement
ShowConfigCommand = "SHOW CONFIG"
// ShowStatsExtendedCommand represents SHOW STATS_EXTENDED statement
ShowStatsExtendedCommand = "SHOW STATS_EXTENDED"
// ShowStatsMetaCommand represents SHOW STATS_META statement
ShowStatsMetaCommand = "SHOW STATS_META"
// ShowStatsHistogramsCommand represents SHOW STATS_HISTOGRAMS statement
ShowStatsHistogramsCommand = "SHOW STATS_HISTOGRAMS"
// ShowStatsTopNCommand represents SHOW STATS_TOPN statement
ShowStatsTopNCommand = "SHOW STATS_TOPN"
// ShowStatsBucketsCommand represents SHOW STATS_BUCKETS statement
ShowStatsBucketsCommand = "SHOW STATS_BUCKETS"
// ShowStatsHealthyCommand represents SHOW STATS_HEALTHY statement
ShowStatsHealthyCommand = "SHOW STATS_HEALTHY"
// ShowStatsLockedCommand represents SHOW STATS_LOCKED statement
ShowStatsLockedCommand = "SHOW STATS_LOCKED"
// ShowHistogramsInFlightCommand represents SHOW HISTOGRAMS_IN_FLIGHT statement
ShowHistogramsInFlightCommand = "SHOW HISTOGRAMS_IN_FLIGHT"
// ShowColumnStatsUsageCommand represents SHOW COLUMN_STATS_USAGE statement
ShowColumnStatsUsageCommand = "SHOW COLUMN_STATS_USAGE"
// ShowBindingsCommand represents SHOW BINDINGS statement
ShowBindingsCommand = "SHOW BINDINGS"
// ShowBindingCacheStatusCommand represents SHOW BINDING_CACHE STATUS statement
ShowBindingCacheStatusCommand = "SHOW BINDING_CACHE STATUS"
// ShowAnalyzeStatusCommand represents SHOW ANALYZE STATUS statement
ShowAnalyzeStatusCommand = "SHOW ANALYZE STATUS"
// ShowRegionsCommand represents SHOW TABLE REGIONS statement
ShowRegionsCommand = "SHOW TABLE REGIONS"
// ShowBuiltinsCommand represents SHOW BUILTINS statement
ShowBuiltinsCommand = "SHOW BUILTINS"
// ShowTableNextRowIdCommand represents SHOW TABLE NEXT_ROW_ID statement
ShowTableNextRowIdCommand = "SHOW TABLE NEXT_ROW_ID"
// ShowBackupsCommand represents SHOW BACKUPS statement
ShowBackupsCommand = "SHOW BACKUPS"
// ShowRestoresCommand represents SHOW RESTORES statement
ShowRestoresCommand = "SHOW RESTORES"
// ShowImportsCommand represents SHOW IMPORTS statement
ShowImportsCommand = "SHOW IMPORTS"
// ShowCreateImportCommand represents SHOW CREATE IMPORT statement
ShowCreateImportCommand = "SHOW CREATE IMPORT"
// ShowImportJobsCommand represents SHOW IMPORT JOBS statement
ShowImportJobsCommand = "SHOW IMPORT JOBS"
// ShowImportGroupsCommand represents SHOW IMPORT GROUPS statement
ShowImportGroupsCommand = "SHOW IMPORT GROUPS"
// ShowPlacementCommand represents SHOW PLACEMENT statement
ShowPlacementCommand = "SHOW PLACEMENT"
// ShowPlacementForDatabaseCommand represents SHOW PLACEMENT FOR DATABASE statement
ShowPlacementForDatabaseCommand = "SHOW PLACEMENT FOR DATABASE"
// ShowPlacementForTableCommand represents SHOW PLACEMENT FOR TABLE statement
ShowPlacementForTableCommand = "SHOW PLACEMENT FOR TABLE"
// ShowPlacementForPartitionCommand represents SHOW PLACEMENT FOR PARTITION statement
ShowPlacementForPartitionCommand = "SHOW PLACEMENT FOR PARTITION"
// ShowPlacementLabelsCommand represents SHOW PLACEMENT LABELS statement
ShowPlacementLabelsCommand = "SHOW PLACEMENT LABELS"
// ShowSessionStatesCommand represents SHOW SESSION_STATES statement
ShowSessionStatesCommand = "SHOW SESSION_STATES"
// ShowDistributionsCommand represents SHOW DISTRIBUTIONS statement
ShowDistributionsCommand = "SHOW DISTRIBUTIONS"
// ShowPlanCommand represents SHOW PLAN statement
ShowPlanCommand = "SHOW PLAN"
// ShowDistributionJobsCommand represents SHOW DISTRIBUTION JOBS statement
ShowDistributionJobsCommand = "SHOW DISTRIBUTION JOB"
// ShowAffinityCommand represents SHOW AFFINITY statement
ShowAffinityCommand = "SHOW AFFINITY"
)
// Admin Commands
const (
// AdminShowDDLCommand represents ADMIN SHOW DDL statement
AdminShowDDLCommand = "ADMIN SHOW DDL"
// AdminCheckTableCommand represents ADMIN CHECK TABLE statement
AdminCheckTableCommand = "ADMIN CHECK TABLE"
// AdminShowDDLJobsCommand represents ADMIN SHOW DDL JOBS statement
AdminShowDDLJobsCommand = "ADMIN SHOW DDL JOBS"
// AdminCancelDDLJobsCommand represents ADMIN CANCEL DDL JOBS statement
AdminCancelDDLJobsCommand = "ADMIN CANCEL DDL JOBS"
// AdminPauseDDLJobsCommand represents ADMIN PAUSE DDL JOBS statement
AdminPauseDDLJobsCommand = "ADMIN PAUSE DDL JOBS"
// AdminResumeDDLJobsCommand represents ADMIN RESUME DDL JOBS statement
AdminResumeDDLJobsCommand = "ADMIN RESUME DDL JOBS"
// AdminCheckIndexCommand represents ADMIN CHECK INDEX statement
AdminCheckIndexCommand = "ADMIN CHECK INDEX"
// AdminRecoverIndexCommand represents ADMIN RECOVER INDEX statement
AdminRecoverIndexCommand = "ADMIN RECOVER INDEX"
// AdminCleanupIndexCommand represents ADMIN CLEANUP INDEX statement
AdminCleanupIndexCommand = "ADMIN CLEANUP INDEX"
// AdminCheckIndexRangeCommand represents ADMIN CHECK INDEX RANGE statement
AdminCheckIndexRangeCommand = "ADMIN CHECK INDEX RANGE"
// AdminShowDDLJobQueriesCommand represents ADMIN SHOW DDL JOB QUERIES statement
AdminShowDDLJobQueriesCommand = "ADMIN SHOW DDL JOB QUERIES"
// AdminChecksumTableCommand represents ADMIN CHECKSUM TABLE statement
AdminChecksumTableCommand = "ADMIN CHECKSUM TABLE"
// AdminShowSlowCommand represents ADMIN SHOW SLOW statement
AdminShowSlowCommand = "ADMIN SHOW SLOW"
// AdminShowNextRowIDCommand represents ADMIN SHOW NEXT_ROW_ID statement
AdminShowNextRowIDCommand = "ADMIN SHOW NEXT_ROW_ID"
// AdminReloadExprPushdownBlacklistCommand represents ADMIN RELOAD EXPR_PUSHDOWN_BLACKLIST statement
AdminReloadExprPushdownBlacklistCommand = "ADMIN RELOAD EXPR_PUSHDOWN_BLACKLIST"
// AdminReloadOptRuleBlacklistCommand represents ADMIN RELOAD OPT_RULE_BLACKLIST statement
AdminReloadOptRuleBlacklistCommand = "ADMIN RELOAD OPT_RULE_BLACKLIST"
// AdminPluginsDisableCommand represents ADMIN PLUGINS DISABLE statement
AdminPluginsDisableCommand = "ADMIN PLUGINS DISABLE"
// AdminPluginsEnableCommand represents ADMIN PLUGINS ENABLE statement
AdminPluginsEnableCommand = "ADMIN PLUGINS ENABLE"
// AdminFlushBindingsCommand represents ADMIN FLUSH BINDINGS statement
AdminFlushBindingsCommand = "ADMIN FLUSH BINDINGS"
// AdminCaptureBindingsCommand represents ADMIN CAPTURE BINDINGS statement
AdminCaptureBindingsCommand = "ADMIN CAPTURE BINDINGS"
// AdminEvolveBindingsCommand represents ADMIN EVOLVE BINDINGS statement
AdminEvolveBindingsCommand = "ADMIN EVOLVE BINDINGS"
// AdminReloadBindingsCommand represents ADMIN RELOAD BINDINGS statement
AdminReloadBindingsCommand = "ADMIN RELOAD BINDINGS"
// AdminReloadStatsExtendedCommand represents ADMIN RELOAD STATS_EXTENDED statement
AdminReloadStatsExtendedCommand = "ADMIN RELOAD STATS_EXTENDED"
// AdminFlushPlanCacheCommand represents ADMIN FLUSH PLAN_CACHE statement
AdminFlushPlanCacheCommand = "ADMIN FLUSH PLAN_CACHE"
// AdminSetBDRRoleCommand represents ADMIN SET BDR ROLE statement
AdminSetBDRRoleCommand = "ADMIN SET BDR ROLE"
// AdminShowBDRRoleCommand represents ADMIN SHOW BDR ROLE statement
AdminShowBDRRoleCommand = "ADMIN SHOW BDR ROLE"
// AdminUnsetBDRRoleCommand represents ADMIN UNSET BDR ROLE statement
AdminUnsetBDRRoleCommand = "ADMIN UNSET BDR ROLE"
// AdminAlterDDLJobsCommand represents ADMIN ALTER DDL JOBS statement
AdminAlterDDLJobsCommand = "ADMIN ALTER DDL JOBS"
// AdminCreateWorkloadSnapshotCommand represents ADMIN CREATE WORKLOAD SNAPSHOT statement
AdminCreateWorkloadSnapshotCommand = "ADMIN CREATE WORKLOAD SNAPSHOT"
// AdminReloadClusterBindingsCommand represents ADMIN RELOAD CLUSTER BINDINGS statement
AdminReloadClusterBindingsCommand = "ADMIN RELOAD CLUSTER BINDINGS"
)
// BRIE Commands
const (
// BackupCommand represents BACKUP statement
BackupCommand = "BACKUP"
// RestoreCommand represents RESTORE statement
RestoreCommand = "RESTORE"
// RestorePITCommand represents RESTORE POINT IN TIME statement
RestorePITCommand = "RESTORE POINT"
// StreamStartCommand represents STREAM START statement
StreamStartCommand = "BACKUP LOGS"
// StreamStopCommand represents STREAM STOP statement
StreamStopCommand = "STOP BACKUP LOGS"
// StreamPauseCommand represents STREAM PAUSE statement
StreamPauseCommand = "PAUSE BACKUP LOGS"
// StreamResumeCommand represents STREAM RESUME statement
StreamResumeCommand = "RESUME BACKUP LOGS"
// StreamStatusCommand represents STREAM STATUS statement
StreamStatusCommand = "SHOW BACKUP LOGS STATUS"
// StreamMetaDataCommand represents STREAM METADATA statement
StreamMetaDataCommand = "SHOW BACKUP LOGS METADATA"
// StreamPurgeCommand represents STREAM PURGE statement
StreamPurgeCommand = "PURGE BACKUP LOGS"
// ShowBRJobCommand represents SHOW BR JOB statement
ShowBRJobCommand = "SHOW BR JOB"
// ShowBRJobQueryCommand represents SHOW BR JOB QUERY statement
ShowBRJobQueryCommand = "SHOW BR JOB QUERY"
// CancelBRJobCommand represents CANCEL BR JOB statement
CancelBRJobCommand = "CANCEL BR JOB"
// ShowBackupMetaCommand represents SHOW BACKUP META statement
ShowBackupMetaCommand = "SHOW BACKUP META"
)
// Miscellaneous Commands
const (
// AddQueryWatchCommand represents ADD QUERY WATCH statement
AddQueryWatchCommand = "ADD QUERY WATCH"
// AnalyzeTableCommand represents ANALYZE TABLE statement
AnalyzeTableCommand = "ANALYZE TABLE"
// BeginCommand represents BEGIN statement
BeginCommand = "BEGIN"
// BinlogCommand represents BINLOG statement
BinlogCommand = "BINLOG"
// CalibrateResourceCommand represents CALIBRATE RESOURCE statement
CalibrateResourceCommand = "CALIBRATE RESOURCE"
// CancelDistributionJobCommand represents CANCEL DISTRIBUTION JOB statement
CancelDistributionJobCommand = "CANCEL DISTRIBUTION JOB"
// CommitCommand represents COMMIT statement
CommitCommand = "COMMIT"
// AlterTableCompactCommand represents ALTER TABLE COMPACT statement
AlterTableCompactCommand = "ALTER TABLE COMPACT"
// CreateBindingCommand represents CREATE BINDING statement
CreateBindingCommand = "CREATE BINDING"
// CreateStatisticsCommand represents CREATE STATISTICS statement
CreateStatisticsCommand = "CREATE STATISTICS"
// DeallocateCommand represents DEALLOCATE statement
DeallocateCommand = "DEALLOCATE"
// DoCommand represents DO statement
DoCommand = "DO"
// DropBindingCommand represents DROP BINDING statement
DropBindingCommand = "DROP BINDING"
// DropQueryWatchCommand represents DROP QUERY WATCH statement
DropQueryWatchCommand = "DROP QUERY WATCH"
// DropStatisticsCommand represents DROP STATISTICS statement
DropStatisticsCommand = "DROP STATISTICS"
// ExecuteCommand represents EXECUTE statement
ExecuteCommand = "EXECUTE"
// ExplainForConnectionCommand represents EXPLAIN FOR CONNECTION statement
ExplainForConnectionCommand = "EXPLAIN FOR CONNECTION"
// ExplainAnalyzeCommand represents EXPLAIN ANALYZE statement
ExplainAnalyzeCommand = "EXPLAIN ANALYZE"
// ExplainCommand represents EXPLAIN statement
ExplainCommand = "EXPLAIN"
// FlushCommand represents FLUSH statement
FlushCommand = "FLUSH"
// GrantCommand represents GRANT statement
GrantCommand = "GRANT"
// GrantProxyCommand represents GRANT PROXY statement
GrantProxyCommand = "GRANT PROXY"
// GrantRoleCommand represents GRANT ROLE statement
GrantRoleCommand = "GRANT ROLE"
// HelpCommand represents HELP statement
HelpCommand = "HELP"
// CancelImportIntoJobCommand represents CANCEL IMPORT INTO JOB statement
CancelImportIntoJobCommand = "CANCEL IMPORT INTO JOB"
// KillCommand represents KILL statement
KillCommand = "KILL"
// PlanReplayerCommand represents PLAN REPLAYER statement
PlanReplayerCommand = "PLAN REPLAYER"
// PrepareCommand represents PREPARE statement
PrepareCommand = "PREPARE"
// ReleaseSavepointCommand represents RELEASE SAVEPOINT statement
ReleaseSavepointCommand = "RELEASE SAVEPOINT"
// RestartCommand represents RESTART statement
RestartCommand = "RESTART"
// RevokeCommand represents REVOKE statement
RevokeCommand = "REVOKE"
// RevokeRoleCommand represents REVOKE ROLE statement
RevokeRoleCommand = "REVOKE ROLE"
// RollbackCommand represents ROLLBACK statement
RollbackCommand = "ROLLBACK"
// SavepointCommand represents SAVEPOINT statement
SavepointCommand = "SAVEPOINT"
// SetBindingCommand represents SET BINDING statement
SetBindingCommand = "SET BINDING"
// SetConfigCommand represents SET CONFIG statement
SetConfigCommand = "SET CONFIG"
// SetDefaultRoleCommand represents SET DEFAULT ROLE statement
SetDefaultRoleCommand = "SET DEFAULT ROLE"
// SetPasswordCommand represents SET PASSWORD statement
SetPasswordCommand = "SET PASSWORD"
// SetResourceGroupCommand represents SET RESOURCE GROUP statement
SetResourceGroupCommand = "SET RESOURCE GROUP"
// SetRoleCommand represents SET ROLE statement
SetRoleCommand = "SET ROLE"
// SetSessionStatesCommand represents SET SESSION_STATES statement
SetSessionStatesCommand = "SET SESSION_STATES"
// SetCommand represents SET statement
SetCommand = "SET"
// ShutdownCommand represents SHUTDOWN statement
ShutdownCommand = "SHUTDOWN"
// TraceCommand represents TRACE statement
TraceCommand = "TRACE"
// TrafficCommand represents TRAFFIC statement
TrafficCommand = "TRAFFIC"
// UseCommand represents USE statement
UseCommand = "USE"
// LoadStatsCommand represents LOAD STATS statement
LoadStatsCommand = "LOAD STATS"
// DropStatsCommand represents DROP STATS statement
DropStatsCommand = "DROP STATS"
// LockStatsCommand represents LOCK STATS statement
LockStatsCommand = "LOCK STATS"
// UnlockStatsCommand represents UNLOCK STATS statement
UnlockStatsCommand = "UNLOCK STATS"
// RefreshStatsCommand represents REFRESH STATS statement
RefreshStatsCommand = "REFRESH STATS"
// RecommendIndexCommand represents RECOMMEND INDEX statement
RecommendIndexCommand = "RECOMMEND INDEX"
// ProcedureCommand represents all statements in procedure. It's too rough
// but still fine for now.
ProcedureCommand = "PROCEDURE"
// UnknownCommand represents unknown statements
UnknownCommand = "UNKNOWN"
// SetOprCommand represents UNION/INTERSECT/EXCEPT statement
SetOprCommand = "SET OPERATION"
)
// SEMCommand returns the command string for the statement.
func (n *AlterDatabaseStmt) SEMCommand() string {
return AlterDatabaseCommand
}
// SEMCommand returns the command string for the statement.
func (n *AlterInstanceStmt) SEMCommand() string {
return AlterInstanceCommand
}
// SEMCommand returns the command string for the statement.
func (n *AlterPlacementPolicyStmt) SEMCommand() string {
return AlterPlacementPolicyCommand
}
// SEMCommand returns the command string for the statement.
func (n *AlterRangeStmt) SEMCommand() string {
return AlterRangeCommand
}
// SEMCommand returns the command string for the statement.
func (n *AlterResourceGroupStmt) SEMCommand() string {
return AlterResourceGroupCommand
}
// SEMCommand returns the command string for the statement.
func (n *AlterSequenceStmt) SEMCommand() string {
return AlterSequenceCommand
}
// SEMCommand returns the command string for the statement.
func (n *AlterTableStmt) SEMCommand() string {
return AlterTableCommand
}
// SEMCommand returns the command string for the statement.
func (n *AlterUserStmt) SEMCommand() string {
return AlterUserCommand
}
// SEMCommand returns the command string for the statement.
func (n *CleanupTableLockStmt) SEMCommand() string {
return AdminCleanupTableLockCommand
}
// SEMCommand returns the command string for the statement.
func (n *CreateDatabaseStmt) SEMCommand() string {
return CreateDatabaseCommand
}
// SEMCommand returns the command string for the statement.
func (n *CreateIndexStmt) SEMCommand() string {
return CreateIndexCommand
}
// SEMCommand returns the command string for the statement.
func (n *CreatePlacementPolicyStmt) SEMCommand() string {
return CreatePlacementPolicyCommand
}
// SEMCommand returns the command string for the statement.
func (n *CreateMaskingPolicyStmt) SEMCommand() string {
return CreateMaskingPolicyCommand
}
// SEMCommand returns the command string for the statement.
func (n *CreateResourceGroupStmt) SEMCommand() string {
return CreateResourceGroupCommand
}
// SEMCommand returns the command string for the statement.
func (n *CreateSequenceStmt) SEMCommand() string {
return CreateSequenceCommand
}
// SEMCommand returns the command string for the statement.
func (n *CreateTableStmt) SEMCommand() string {
return CreateTableCommand
}
// SEMCommand returns the command string for the statement.
func (n *CreateUserStmt) SEMCommand() string {
return CreateUserCommand
}
// SEMCommand returns the command string for the statement.
func (n *CreateViewStmt) SEMCommand() string {
return CreateViewCommand
}
// SEMCommand returns the command string for the statement.
func (n *DropDatabaseStmt) SEMCommand() string {
return DropDatabaseCommand
}
// SEMCommand returns the command string for the statement.
func (n *DropIndexStmt) SEMCommand() string {
return DropIndexCommand
}
// SEMCommand returns the command string for the statement.
func (n *DropPlacementPolicyStmt) SEMCommand() string {
return DropPlacementPolicyCommand
}
// SEMCommand returns the command string for the statement.
func (n *DropResourceGroupStmt) SEMCommand() string {
return DropResourceGroupCommand
}
// SEMCommand returns the command string for the statement.
func (n *DropSequenceStmt) SEMCommand() string {
return DropSequenceCommand
}
// SEMCommand returns the command string for the statement.
func (n *DropTableStmt) SEMCommand() string {
if n.IsView {
return DropViewCommand
}
return DropTableCommand
}
// SEMCommand returns the command string for the statement.
func (n *DropUserStmt) SEMCommand() string {
return DropUserCommand
}
// SEMCommand returns the command string for the statement.
func (n *FlashBackDatabaseStmt) SEMCommand() string {
return FlashBackDatabaseCommand
}
// SEMCommand returns the command string for the statement.
func (n *FlashBackTableStmt) SEMCommand() string {
return FlashBackTableCommand
}
// SEMCommand returns the command string for the statement.
func (n *FlashBackToTimestampStmt) SEMCommand() string {
return FlashBackClusterCommand
}
// SEMCommand returns the command string for the statement.
func (n *LockTablesStmt) SEMCommand() string {
return LockTablesCommand
}
// SEMCommand returns the command string for the statement.
func (n *OptimizeTableStmt) SEMCommand() string {
return OptimizeTableCommand
}
// SEMCommand returns the command string for the statement.
func (n *RecoverTableStmt) SEMCommand() string {
return RecoverTableCommand
}
// SEMCommand returns the command string for the statement.
func (n *RenameTableStmt) SEMCommand() string {
return RenameTableCommand
}
// SEMCommand returns the command string for the statement.
func (n *RenameUserStmt) SEMCommand() string {
return RenameUserCommand
}
// SEMCommand returns the command string for the statement.
func (n *RepairTableStmt) SEMCommand() string {
return AdminRepairTableCommand
}
// SEMCommand returns the command string for the statement.
func (n *TruncateTableStmt) SEMCommand() string {
return TruncateTableCommand
}
// SEMCommand returns the command string for the statement.
func (n *UnlockTablesStmt) SEMCommand() string {
return UnlockTablesCommand
}
// DML Statements
// SEMCommand returns the command string for the statement.
func (n *CallStmt) SEMCommand() string {
return CallCommand
}
// SEMCommand returns the command string for the statement.
func (n *DeleteStmt) SEMCommand() string {
return DeleteCommand
}
// SEMCommand returns the command string for the statement.
func (n *DistributeTableStmt) SEMCommand() string {
return DistributeTableCommand
}
// SEMCommand returns the command string for the statement.
func (n *ImportIntoStmt) SEMCommand() string {
return ImportIntoCommand
}
// SEMCommand returns the command string for the statement.
func (n *InsertStmt) SEMCommand() string {
if n.IsReplace {
return ReplaceCommand
}
return InsertCommand
}
// SEMCommand returns the command string for the statement.
func (n *LoadDataStmt) SEMCommand() string {
return LoadDataCommand
}
// SEMCommand returns the command string for the statement.
func (n *NonTransactionalDMLStmt) SEMCommand() string {
return BatchCommand
}
// SEMCommand returns the command string for the statement.
func (n *SelectStmt) SEMCommand() string {
return SelectCommand
}
// SEMCommand returns the command string for the statement.
func (n *SetOprStmt) SEMCommand() string {
return SetOprCommand
}
// SEMCommand returns the command string for the statement.
func (n *ShowStmt) SEMCommand() string {
switch n.Tp {
case ShowCreateTable:
return ShowCreateTableCommand
case ShowCreateView:
return ShowCreateViewCommand
case ShowCreateDatabase:
return ShowCreateDatabaseCommand
case ShowCreateUser:
return ShowCreateUserCommand
case ShowCreateSequence:
return ShowCreateSequenceCommand
case ShowCreatePlacementPolicy:
return ShowCreatePlacementPolicyCommand
case ShowMaskingPolicies:
return ShowMaskingPoliciesCommand
case ShowCreateResourceGroup:
return ShowCreateResourceGroupCommand
case ShowCreateProcedure:
return ShowCreateProcedureCommand
case ShowDatabases:
return ShowDatabasesCommand
case ShowTables:
return ShowTableCommand
case ShowTableStatus:
return ShowTableStatusCommand
case ShowColumns:
return ShowColumnsCommand
case ShowIndex:
return ShowIndexCommand
case ShowVariables:
return ShowVariablesCommand
case ShowStatus:
return ShowStatusCommand
case ShowProcessList:
return ShowProcessListCommand
case ShowEngines:
return ShowEnginesCommand
case ShowCharset:
return ShowCharsetCommand
case ShowCollation:
return ShowCollationCommand
case ShowWarnings:
return ShowWarningsCommand
case ShowErrors:
return ShowErrorsCommand
case ShowGrants:
return ShowGrantsCommand
case ShowPrivileges:
return ShowPrivilegesCommand
case ShowTriggers:
return ShowTriggersCommand
case ShowProcedureStatus:
return ShowProcedureStatusCommand
case ShowFunctionStatus:
return ShowFunctionStatusCommand
case ShowEvents:
return ShowEventsCommand
case ShowPlugins:
return ShowPluginsCommand
case ShowProfile:
return ShowProfileCommand
case ShowProfiles:
return ShowProfilesCommand
case ShowMasterStatus:
return ShowMasterStatusCommand
case ShowBinlogStatus:
return ShowBinaryLogStatusCommand
case ShowReplicaStatus:
return ShowCommand
case ShowOpenTables:
return ShowOpenTablesCommand
case ShowConfig:
return ShowConfigCommand
case ShowStatsExtended:
return ShowStatsExtendedCommand
case ShowStatsMeta:
return ShowStatsMetaCommand
case ShowStatsHistograms:
return ShowStatsHistogramsCommand
case ShowStatsTopN:
return ShowStatsTopNCommand
case ShowStatsBuckets:
return ShowStatsBucketsCommand
case ShowStatsHealthy:
return ShowStatsHealthyCommand
case ShowStatsLocked:
return ShowStatsLockedCommand
case ShowHistogramsInFlight:
return ShowHistogramsInFlightCommand
case ShowColumnStatsUsage:
return ShowColumnStatsUsageCommand
case ShowBindings:
return ShowBindingsCommand
case ShowBindingCacheStatus:
return ShowBindingCacheStatusCommand
case ShowAnalyzeStatus:
return ShowAnalyzeStatusCommand
case ShowRegions:
return ShowRegionsCommand
case ShowBuiltins:
return ShowBuiltinsCommand
case ShowTableNextRowId:
return ShowTableNextRowIdCommand
case ShowBackups:
return ShowBackupsCommand
case ShowRestores:
return ShowRestoresCommand
case ShowImports:
return ShowImportsCommand
case ShowCreateImport:
return ShowCreateImportCommand
case ShowImportJobs:
return ShowImportJobsCommand
case ShowImportGroups:
return ShowImportGroupsCommand
case ShowPlacement:
return ShowPlacementCommand
case ShowPlacementForDatabase:
return ShowPlacementForDatabaseCommand
case ShowPlacementForTable:
return ShowPlacementForTableCommand
case ShowPlacementForPartition:
return ShowPlacementForPartitionCommand
case ShowPlacementLabels:
return ShowPlacementLabelsCommand
case ShowSessionStates:
return ShowSessionStatesCommand
case ShowDistributions:
return ShowDistributionsCommand
case ShowDistributionJobs:
return ShowDistributionJobsCommand
case ShowAffinity:
return ShowAffinityCommand
default:
return UnknownCommand
}
}
// SEMCommand returns the command string for the statement.
func (n *SplitRegionStmt) SEMCommand() string {
return SplitRegionCommand
}
// SEMCommand returns the command string for the statement.
func (n *UpdateStmt) SEMCommand() string {
return UpdateCommand
}
// Miscellaneous Statements
// SEMCommand returns the command string for the statement.
func (n *AddQueryWatchStmt) SEMCommand() string {
return AddQueryWatchCommand
}
// SEMCommand returns the command string for the statement.
func (n *AdminStmt) SEMCommand() string {
switch n.Tp {
case AdminShowDDL:
return AdminShowDDLCommand
case AdminCheckTable:
return AdminCheckTableCommand
case AdminShowDDLJobs:
return AdminShowDDLJobsCommand
case AdminCancelDDLJobs:
return AdminCancelDDLJobsCommand
case AdminPauseDDLJobs:
return AdminPauseDDLJobsCommand
case AdminResumeDDLJobs:
return AdminResumeDDLJobsCommand
case AdminCheckIndex:
return AdminCheckIndexCommand
case AdminRecoverIndex:
return AdminRecoverIndexCommand
case AdminCleanupIndex:
return AdminCleanupIndexCommand
case AdminCheckIndexRange:
return AdminCheckIndexRangeCommand
case AdminShowDDLJobQueries:
return AdminShowDDLJobQueriesCommand
case AdminShowDDLJobQueriesWithRange:
return AdminShowDDLJobQueriesCommand
case AdminChecksumTable:
return AdminChecksumTableCommand
case AdminShowSlow:
return AdminShowSlowCommand
case AdminShowNextRowID:
return AdminShowNextRowIDCommand
case AdminReloadExprPushdownBlacklist:
return AdminReloadExprPushdownBlacklistCommand
case AdminReloadOptRuleBlacklist:
return AdminReloadOptRuleBlacklistCommand
case AdminPluginDisable:
return AdminPluginsDisableCommand
case AdminPluginEnable:
return AdminPluginsEnableCommand
case AdminFlushBindings:
return AdminFlushBindingsCommand
case AdminCaptureBindings:
return AdminCaptureBindingsCommand
case AdminEvolveBindings:
return AdminEvolveBindingsCommand
case AdminReloadBindings:
return AdminReloadBindingsCommand
case AdminReloadStatistics:
return AdminReloadStatsExtendedCommand
case AdminFlushPlanCache:
return AdminFlushPlanCacheCommand
case AdminSetBDRRole:
return AdminSetBDRRoleCommand
case AdminShowBDRRole:
return AdminShowBDRRoleCommand
case AdminUnsetBDRRole:
return AdminUnsetBDRRoleCommand
case AdminAlterDDLJob:
return AdminAlterDDLJobsCommand
case AdminWorkloadRepoCreate:
return AdminCreateWorkloadSnapshotCommand
case AdminReloadClusterBindings:
return AdminReloadClusterBindingsCommand
default:
return UnknownCommand
}
}
// SEMCommand returns the command string for the statement.
func (n *AnalyzeTableStmt) SEMCommand() string {
return AnalyzeTableCommand
}
// SEMCommand returns the command string for the statement.
func (n *BeginStmt) SEMCommand() string {
return BeginCommand
}
// SEMCommand returns the command string for the statement.
func (n *BinlogStmt) SEMCommand() string {
return BinlogCommand
}
// SEMCommand returns the command string for the statement.
func (n *BRIEStmt) SEMCommand() string {
switch n.Kind {
case BRIEKindBackup:
return BackupCommand
case BRIEKindRestore:
return RestoreCommand
case BRIEKindRestorePIT:
return RestorePITCommand
case BRIEKindStreamStart:
return StreamStartCommand
case BRIEKindStreamStop:
return StreamStopCommand
case BRIEKindStreamPause:
return StreamPauseCommand
case BRIEKindStreamResume:
return StreamResumeCommand
case BRIEKindStreamStatus:
return StreamStatusCommand
case BRIEKindStreamMetaData:
return StreamMetaDataCommand
case BRIEKindStreamPurge:
return StreamPurgeCommand
case BRIEKindShowJob:
return ShowBRJobCommand
case BRIEKindShowQuery:
return ShowBRJobQueryCommand
case BRIEKindCancelJob:
return CancelBRJobCommand
case BRIEKindShowBackupMeta:
return ShowBackupMetaCommand
default:
return UnknownCommand
}
}
// SEMCommand returns the command string for the statement.
func (n *CalibrateResourceStmt) SEMCommand() string {
return CalibrateResourceCommand
}
// SEMCommand returns the command string for the statement.
func (n *CancelDistributionJobStmt) SEMCommand() string {
return CancelDistributionJobCommand
}
// SEMCommand returns the command string for the statement.
func (n *CommitStmt) SEMCommand() string {
return CommitCommand
}
// SEMCommand returns the command string for the statement.
func (n *CompactTableStmt) SEMCommand() string {
return AlterTableCompactCommand
}
// SEMCommand returns the command string for the statement.
func (n *CreateBindingStmt) SEMCommand() string {
return CreateBindingCommand
}
// SEMCommand returns the command string for the statement.
func (n *CreateStatisticsStmt) SEMCommand() string {
return CreateStatisticsCommand
}
// SEMCommand returns the command string for the statement.
func (n *DeallocateStmt) SEMCommand() string {
return DeallocateCommand
}
// SEMCommand returns the command string for the statement.
func (n *DoStmt) SEMCommand() string {
return DoCommand
}
// SEMCommand returns the command string for the statement.
func (n *DropBindingStmt) SEMCommand() string {
return DropBindingCommand
}
// SEMCommand returns the command string for the statement.
func (n *DropQueryWatchStmt) SEMCommand() string {
return DropQueryWatchCommand
}
// SEMCommand returns the command string for the statement.
func (n *DropStatisticsStmt) SEMCommand() string {
return DropStatisticsCommand
}
// SEMCommand returns the command string for the statement.
func (n *ExecuteStmt) SEMCommand() string {
return ExecuteCommand
}
// SEMCommand returns the command string for the statement.
func (n *ExplainForStmt) SEMCommand() string {
return ExplainForConnectionCommand
}
// SEMCommand returns the command string for the statement.
func (n *ExplainStmt) SEMCommand() string {
if n.Analyze {
return ExplainAnalyzeCommand
}
return ExplainCommand
}
// SEMCommand returns the command string for the statement.
func (n *FlushStmt) SEMCommand() string {
return FlushCommand
}
// SEMCommand returns the command string for the statement.
func (n *GrantStmt) SEMCommand() string {
return GrantCommand
}
// SEMCommand returns the command string for the statement.
func (n *GrantProxyStmt) SEMCommand() string {
return GrantProxyCommand
}
// SEMCommand returns the command string for the statement.
func (n *GrantRoleStmt) SEMCommand() string {
return GrantRoleCommand
}
// SEMCommand returns the command string for the statement.
func (n *HelpStmt) SEMCommand() string {
return HelpCommand
}
// SEMCommand returns the command string for the statement.
func (n *ImportIntoActionStmt) SEMCommand() string {
return CancelImportIntoJobCommand
}
// SEMCommand returns the command string for the statement.
func (n *KillStmt) SEMCommand() string {
return KillCommand
}
// SEMCommand returns the command string for the statement.
func (n *PlanReplayerStmt) SEMCommand() string {
return PlanReplayerCommand
}
// SEMCommand returns the command string for the statement.
func (n *PrepareStmt) SEMCommand() string {
return PrepareCommand
}
// SEMCommand returns the command string for the statement.
func (n *ReleaseSavepointStmt) SEMCommand() string {
return ReleaseSavepointCommand
}
// SEMCommand returns the command string for the statement.
func (n *RestartStmt) SEMCommand() string {
return RestartCommand
}
// SEMCommand returns the command string for the statement.
func (n *RevokeStmt) SEMCommand() string {
return RevokeCommand
}
// SEMCommand returns the command string for the statement.
func (n *RevokeRoleStmt) SEMCommand() string {
return RevokeRoleCommand
}
// SEMCommand returns the command string for the statement.
func (n *RollbackStmt) SEMCommand() string {
return RollbackCommand
}
// SEMCommand returns the command string for the statement.
func (n *SavepointStmt) SEMCommand() string {
return SavepointCommand
}
// SEMCommand returns the command string for the statement.
func (n *SetBindingStmt) SEMCommand() string {
return SetBindingCommand
}
// SEMCommand returns the command string for the statement.
func (n *SetConfigStmt) SEMCommand() string {
return SetConfigCommand
}
// SEMCommand returns the command string for the statement.
func (n *SetDefaultRoleStmt) SEMCommand() string {
return SetDefaultRoleCommand
}
// SEMCommand returns the command string for the statement.
func (n *SetPwdStmt) SEMCommand() string {
return SetPasswordCommand
}
// SEMCommand returns the command string for the statement.
func (n *SetResourceGroupStmt) SEMCommand() string {
return SetResourceGroupCommand
}
// SEMCommand returns the command string for the statement.
func (n *SetRoleStmt) SEMCommand() string {
return SetRoleCommand
}
// SEMCommand returns the command string for the statement.
func (n *SetSessionStatesStmt) SEMCommand() string {
return SetSessionStatesCommand
}
// SEMCommand returns the command string for the statement.
func (n *SetStmt) SEMCommand() string {
return SetCommand
}
// SEMCommand returns the command string for the statement.
func (n *ShutdownStmt) SEMCommand() string {
return ShutdownCommand
}
// SEMCommand returns the command string for the statement.
func (n *TraceStmt) SEMCommand() string {
return TraceCommand
}
// SEMCommand returns the command string for the statement.
func (n *TrafficStmt) SEMCommand() string {
return TrafficCommand
}
// SEMCommand returns the command string for the statement.
func (n *UseStmt) SEMCommand() string {
return UseCommand
}
// SEMCommand returns the command string for the statement.
func (n *RecommendIndexStmt) SEMCommand() string {
return RecommendIndexCommand
}
// Stats
// SEMCommand returns the command string for the statement.
func (n *LoadStatsStmt) SEMCommand() string {
return LoadStatsCommand
}
// SEMCommand returns the command string for the statement.
func (n *DropStatsStmt) SEMCommand() string {
return DropStatsCommand
}
// SEMCommand returns the command string for the statement.
func (n *LockStatsStmt) SEMCommand() string {
return LockStatsCommand
}
// SEMCommand returns the command string for the statement.
func (n *UnlockStatsStmt) SEMCommand() string {
return UnlockStatsCommand
}
// SEMCommand returns the command string for the statement.
func (n *RefreshStatsStmt) SEMCommand() string {
return RefreshStatsCommand
}
// Procedure Statements
// SEMCommand returns the command string for the statement.
func (n *ProcedureBlock) SEMCommand() string {
return ProcedureCommand
}
// SEMCommand returns the command string for the statement.
func (n *ProcedureInfo) SEMCommand() string {
return ProcedureCommand
}
// SEMCommand returns the command string for the statement.
func (n *DropProcedureStmt) SEMCommand() string {
return ProcedureCommand
}
// SEMCommand returns the command string for the statement.
func (n *ProcedureIfInfo) SEMCommand() string {
return ProcedureCommand
}
// SEMCommand returns the command string for the statement.
func (n *ProcedureElseIfBlock) SEMCommand() string {
return ProcedureCommand
}
// SEMCommand returns the command string for the statement.
func (n *ProcedureElseBlock) SEMCommand() string {
return ProcedureCommand
}
// SEMCommand returns the command string for the statement.
func (n *ProcedureIfBlock) SEMCommand() string {
return ProcedureCommand
}
// SEMCommand returns the command string for the statement.
func (n *SimpleWhenThenStmt) SEMCommand() string {
return ProcedureCommand
}
// SEMCommand returns the command string for the statement.
func (n *SimpleCaseStmt) SEMCommand() string {
return ProcedureCommand
}
// SEMCommand returns the command string for the statement.
func (n *SearchWhenThenStmt) SEMCommand() string {
return ProcedureCommand
}
// SEMCommand returns the command string for the statement.
func (n *SearchCaseStmt) SEMCommand() string {
return ProcedureCommand
}
// SEMCommand returns the command string for the statement.
func (n *ProcedureRepeatStmt) SEMCommand() string {
return ProcedureCommand
}
// SEMCommand returns the command string for the statement.
func (n *ProcedureWhileStmt) SEMCommand() string {
return ProcedureCommand
}
// SEMCommand returns the command string for the statement.
func (n *ProcedureOpenCur) SEMCommand() string {
return ProcedureCommand
}
// SEMCommand returns the command string for the statement.
func (n *ProcedureCloseCur) SEMCommand() string {
return ProcedureCommand
}
// SEMCommand returns the command string for the statement.
func (n *ProcedureFetchInto) SEMCommand() string {
return ProcedureCommand
}
// SEMCommand returns the command string for the statement.
func (n *ProcedureLabelBlock) SEMCommand() string {
return ProcedureCommand
}
// SEMCommand returns the command string for the statement.
func (n *ProcedureLabelLoop) SEMCommand() string {
return ProcedureCommand
}
// SEMCommand returns the command string for the statement.
func (n *ProcedureJump) SEMCommand() string {
return ProcedureCommand
}
// SEMCommand returns the command string for the statement.
func (n *ProcedureErrorCon) SEMCommand() string {
return ProcedureCommand
}
// SEMCommand returns the command string for the statement.
func (n *ProcedureErrorVal) SEMCommand() string {
return ProcedureCommand
}
// SEMCommand returns the command string for the statement.
func (n *ProcedureErrorState) SEMCommand() string {
return ProcedureCommand
}
// Copyright 2017 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package ast
import (
"github.com/pingcap/errors"
"github.com/pingcap/tidb/pkg/parser/format"
)
var (
_ StmtNode = &AnalyzeTableStmt{}
_ StmtNode = &DropStatsStmt{}
_ StmtNode = &LoadStatsStmt{}
_ StmtNode = &RefreshStatsStmt{}
_ StmtNode = &LockStatsStmt{}
_ StmtNode = &UnlockStatsStmt{}
)
// AnalyzeTableStmt is used to create table statistics.
type AnalyzeTableStmt struct {
stmtNode
TableNames []*TableName
PartitionNames []CIStr
IndexNames []CIStr
AnalyzeOpts []AnalyzeOpt
// IndexFlag is true when we only analyze indices for a table.
IndexFlag bool
Incremental bool
NoWriteToBinLog bool
// HistogramOperation is set in "ANALYZE TABLE ... UPDATE/DROP HISTOGRAM ..." statement.
HistogramOperation HistogramOperationType
// ColumnNames indicate the columns whose statistics need to be collected.
ColumnNames []CIStr
ColumnChoice ColumnChoice
}
// AnalyzeOptType is the type for analyze options.
type AnalyzeOptionType int
// Analyze option types.
const (
AnalyzeOptNumBuckets = iota
AnalyzeOptNumTopN
AnalyzeOptCMSketchDepth
AnalyzeOptCMSketchWidth
AnalyzeOptNumSamples
AnalyzeOptSampleRate
AnalyzeOptNDVRate
)
// AnalyzeOptionString stores the string form of analyze options.
var AnalyzeOptionString = map[AnalyzeOptionType]string{
AnalyzeOptNumBuckets: "BUCKETS",
AnalyzeOptNumTopN: "TOPN",
AnalyzeOptCMSketchWidth: "CMSKETCH WIDTH",
AnalyzeOptCMSketchDepth: "CMSKETCH DEPTH",
AnalyzeOptNumSamples: "SAMPLES",
AnalyzeOptSampleRate: "SAMPLERATE",
AnalyzeOptNDVRate: "NDVRATE",
}
// HistogramOperationType is the type for histogram operation.
type HistogramOperationType int
// Histogram operation types.
const (
// HistogramOperationNop shows no operation in histogram. Default value.
HistogramOperationNop HistogramOperationType = iota
HistogramOperationUpdate
HistogramOperationDrop
)
// String implements fmt.Stringer for HistogramOperationType.
func (hot HistogramOperationType) String() string {
switch hot {
case HistogramOperationUpdate:
return "UPDATE HISTOGRAM"
case HistogramOperationDrop:
return "DROP HISTOGRAM"
}
return ""
}
// AnalyzeOpt stores the analyze option type and value.
type AnalyzeOpt struct {
Type AnalyzeOptionType
Value ValueExpr
}
// Restore implements Node interface.
func (n *AnalyzeTableStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("ANALYZE ")
if n.NoWriteToBinLog {
ctx.WriteKeyWord("NO_WRITE_TO_BINLOG ")
}
if n.Incremental {
ctx.WriteKeyWord("INCREMENTAL TABLE ")
} else {
ctx.WriteKeyWord("TABLE ")
}
for i, table := range n.TableNames {
if i != 0 {
ctx.WritePlain(",")
}
if err := table.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore AnalyzeTableStmt.TableNames[%d]", i)
}
}
if len(n.PartitionNames) != 0 {
ctx.WriteKeyWord(" PARTITION ")
}
for i, partition := range n.PartitionNames {
if i != 0 {
ctx.WritePlain(",")
}
ctx.WriteName(partition.O)
}
if n.HistogramOperation != HistogramOperationNop {
ctx.WritePlain(" ")
ctx.WriteKeyWord(n.HistogramOperation.String())
ctx.WritePlain(" ")
if len(n.ColumnNames) > 0 {
ctx.WriteKeyWord("ON ")
for i, columnName := range n.ColumnNames {
if i != 0 {
ctx.WritePlain(",")
}
ctx.WriteName(columnName.O)
}
}
}
switch n.ColumnChoice {
case AllColumns:
ctx.WriteKeyWord(" ALL COLUMNS")
case PredicateColumns:
ctx.WriteKeyWord(" PREDICATE COLUMNS")
case ColumnList:
ctx.WriteKeyWord(" COLUMNS ")
for i, columnName := range n.ColumnNames {
if i != 0 {
ctx.WritePlain(",")
}
ctx.WriteName(columnName.O)
}
}
if n.IndexFlag {
ctx.WriteKeyWord(" INDEX")
}
for i, index := range n.IndexNames {
if i != 0 {
ctx.WritePlain(",")
} else {
ctx.WritePlain(" ")
}
ctx.WriteName(index.O)
}
if len(n.AnalyzeOpts) != 0 {
ctx.WriteKeyWord(" WITH")
for i, opt := range n.AnalyzeOpts {
if i != 0 {
ctx.WritePlain(",")
}
ctx.WritePlainf(" %v ", opt.Value.GetValue())
ctx.WritePlain(AnalyzeOptionString[opt.Type])
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *AnalyzeTableStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*AnalyzeTableStmt)
for i, val := range n.TableNames {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.TableNames[i] = node.(*TableName)
}
return v.Leave(n)
}
// DropStatsStmt is used to drop table statistics.
// if the PartitionNames is not empty, or IsGlobalStats is true, it will contain exactly one table
type DropStatsStmt struct {
stmtNode
Tables []*TableName
PartitionNames []CIStr
IsGlobalStats bool
}
// Restore implements Node interface.
func (n *DropStatsStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("DROP STATS ")
for index, table := range n.Tables {
if index != 0 {
ctx.WritePlain(", ")
}
if err := table.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore DropStatsStmt.Tables[%d]", index)
}
}
if n.IsGlobalStats {
ctx.WriteKeyWord(" GLOBAL")
return nil
}
if len(n.PartitionNames) != 0 {
ctx.WriteKeyWord(" PARTITION ")
}
for i, partition := range n.PartitionNames {
if i != 0 {
ctx.WritePlain(",")
}
ctx.WriteName(partition.O)
}
return nil
}
// Accept implements Node Accept interface.
func (n *DropStatsStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*DropStatsStmt)
for i, val := range n.Tables {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.Tables[i] = node.(*TableName)
}
return v.Leave(n)
}
// LoadStatsStmt is the statement node for loading statistic.
type LoadStatsStmt struct {
stmtNode
Path string
}
// Restore implements Node interface.
func (n *LoadStatsStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("LOAD STATS ")
ctx.WriteString(n.Path)
return nil
}
// Accept implements Node Accept interface.
func (n *LoadStatsStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*LoadStatsStmt)
return v.Leave(n)
}
// LockStatsStmt is the statement node for lock table statistic
type LockStatsStmt struct {
stmtNode
Tables []*TableName
}
// Restore implements Node interface.
func (n *LockStatsStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("LOCK STATS ")
for index, table := range n.Tables {
if index != 0 {
ctx.WritePlain(", ")
}
if err := table.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore LockStatsStmt.Tables[%d]", index)
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *LockStatsStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*LockStatsStmt)
for i, val := range n.Tables {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.Tables[i] = node.(*TableName)
}
return v.Leave(n)
}
// UnlockStatsStmt is the statement node for unlock table statistic
type UnlockStatsStmt struct {
stmtNode
Tables []*TableName
}
// Restore implements Node interface.
func (n *UnlockStatsStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("UNLOCK STATS ")
for index, table := range n.Tables {
if index != 0 {
ctx.WritePlain(", ")
}
if err := table.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore UnlockStatsStmt.Tables[%d]", index)
}
}
return nil
}
// Accept implements Node Accept interface.
func (n *UnlockStatsStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*UnlockStatsStmt)
for i, val := range n.Tables {
node, ok := val.Accept(v)
if !ok {
return n, false
}
n.Tables[i] = node.(*TableName)
}
return v.Leave(n)
}
// RefreshStatsStmt is the statement node for refreshing statistics.
// It is used to refresh the statistics of a table, database, or all databases.
// For example:
// REFRESH STATS table1, db1.*
// REFRESH STATS *.*
type RefreshStatsStmt struct {
stmtNode
RefreshObjects []*StatsObject
// RefreshMode is non-nil when a refresh strategy is explicitly specified.
RefreshMode *RefreshStatsMode
// IsClusterWide indicates whether the refresh operation is for the entire cluster.
IsClusterWide bool
}
// RefreshStatsMode represents the refresh strategy requested by the user.
type RefreshStatsMode int
const (
// RefreshStatsModeLite forces a lite statistics refresh.
// Same as lite-init-stats=true in the configuration file.
RefreshStatsModeLite RefreshStatsMode = iota
// RefreshStatsModeFull forces a full statistics refresh.
// Same as lite-init-stats=false in the configuration file.
RefreshStatsModeFull
)
func (n *RefreshStatsStmt) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord("REFRESH STATS ")
for index, refreshObject := range n.RefreshObjects {
if index != 0 {
ctx.WritePlain(", ")
}
if err := refreshObject.Restore(ctx); err != nil {
return errors.Annotatef(err, "An error occurred while restore RefreshStatsStmt.RefreshObjects[%d]", index)
}
}
if n.RefreshMode != nil {
switch *n.RefreshMode {
case RefreshStatsModeLite:
ctx.WritePlain(" ")
ctx.WriteKeyWord("LITE")
case RefreshStatsModeFull:
ctx.WritePlain(" ")
ctx.WriteKeyWord("FULL")
default:
return errors.Errorf("invalid refresh stats mode: %d", *n.RefreshMode)
}
}
if n.IsClusterWide {
ctx.WritePlain(" ")
ctx.WriteKeyWord("CLUSTER")
}
return nil
}
func (n *RefreshStatsStmt) Accept(v Visitor) (Node, bool) {
newNode, skipChildren := v.Enter(n)
if skipChildren {
return v.Leave(newNode)
}
n = newNode.(*RefreshStatsStmt)
return v.Leave(n)
}
func (n *RefreshStatsStmt) Dedup() {
n.RefreshObjects = dedupStatsObjects(n.RefreshObjects)
}
// DedupFlushObjects removes duplicate or shadowed scoped objects for FLUSH STATS_DELTA.
func (n *FlushStmt) DedupFlushObjects() {
n.FlushObjects = dedupStatsObjects(n.FlushObjects)
}
func dedupStatsObjects(objects []*StatsObject) []*StatsObject {
if len(objects) == 0 {
return objects
}
type tableKey struct {
dbName string
tableName string
}
dbSeen := make(map[string]struct{})
tableSeen := make(map[tableKey]struct{})
result := make([]*StatsObject, 0, len(objects))
for _, obj := range objects {
switch obj.StatsObjectScope {
// Global scope supersedes everything else. Keep the first global target only.
case StatsObjectScopeGlobal:
return []*StatsObject{obj}
case StatsObjectScopeDatabase:
dbKey := obj.DBName.L
if _, exists := dbSeen[dbKey]; exists {
continue
}
dbSeen[dbKey] = struct{}{}
// Remove tables from the same database that might have been added earlier.
filtered := result[:0]
for _, existing := range result {
if existing.StatsObjectScope == StatsObjectScopeTable {
existingDBKey := existing.DBName.L
if existingDBKey != "" && existingDBKey == dbKey {
tblKey := tableKey{dbName: existingDBKey, tableName: existing.TableName.L}
delete(tableSeen, tblKey)
continue
}
}
filtered = append(filtered, existing)
}
result = append(filtered, obj)
case StatsObjectScopeTable:
dbKey := obj.DBName.L
if dbKey != "" {
if _, exists := dbSeen[dbKey]; exists {
continue
}
}
tblKey := tableKey{dbName: dbKey, tableName: obj.TableName.L}
if _, exists := tableSeen[tblKey]; exists {
continue
}
tableSeen[tblKey] = struct{}{}
result = append(result, obj)
}
}
return result
}
type StatsObjectScopeType int
const (
// StatsObjectScopeTable is the scope of a table.
StatsObjectScopeTable StatsObjectScopeType = iota + 1
// StatsObjectScopeDatabase is the scope of a database.
StatsObjectScopeDatabase
// StatsObjectScopeGlobal is the scope of all databases.
StatsObjectScopeGlobal
)
type StatsObject struct {
StatsObjectScope StatsObjectScopeType
DBName CIStr
TableName CIStr
}
func (o *StatsObject) Restore(ctx *format.RestoreCtx) error {
switch o.StatsObjectScope {
case StatsObjectScopeTable:
if o.DBName.O != "" {
ctx.WriteName(o.DBName.O)
ctx.WritePlain(".")
}
ctx.WriteName(o.TableName.O)
case StatsObjectScopeDatabase:
ctx.WriteName(o.DBName.O)
ctx.WritePlain(".*")
case StatsObjectScopeGlobal:
ctx.WritePlain("*.*")
default:
// This should never happen.
return errors.Errorf("invalid stats object scope: %d", o.StatsObjectScope)
}
return nil
}
// Copyright 2018 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package ast
import "math"
// UnspecifiedSize is unspecified size.
const (
UnspecifiedSize = math.MaxUint64
)
// IsReadOnly checks that the ast is readonly. If checkGlobalVars is set to
// true, then updates to global variables are counted as writes. Otherwise, if
// this flag is false, they are ignored.
func IsReadOnly(node Node, checkGlobalVars bool) bool {
switch st := node.(type) {
case *SelectStmt:
if st.LockInfo != nil {
switch st.LockInfo.LockType {
case SelectLockForUpdate, SelectLockForUpdateNoWait, SelectLockForUpdateWaitN,
SelectLockForShare, SelectLockForShareNoWait:
return false
}
}
if !checkGlobalVars {
return true
}
checker := readOnlyChecker{
readOnly: true,
}
node.Accept(&checker)
return checker.readOnly
case *ExplainStmt:
return !st.Analyze || IsReadOnly(st.Stmt, checkGlobalVars)
case *DoStmt, *ShowStmt:
return true
case *SetOprStmt:
for _, sel := range node.(*SetOprStmt).SelectList.Selects {
if !IsReadOnly(sel, checkGlobalVars) {
return false
}
}
return true
case *SetOprSelectList:
for _, sel := range node.(*SetOprSelectList).Selects {
if !IsReadOnly(sel, checkGlobalVars) {
return false
}
}
return true
case *AdminStmt:
switch node.(*AdminStmt).Tp {
case AdminShowDDL, AdminShowDDLJobs, AdminShowSlow,
AdminCaptureBindings, AdminShowNextRowID, AdminShowDDLJobQueries,
AdminShowDDLJobQueriesWithRange:
return true
default:
return false
}
case *TraceStmt:
return IsReadOnly(st.Stmt, checkGlobalVars)
default:
return false
}
}
// readOnlyChecker checks whether a query's ast is readonly, if it satisfied
// 1. selectstmt;
// 2. need not to set var;
// it is readonly statement.
type readOnlyChecker struct {
readOnly bool
}
// Enter implements Visitor interface.
func (checker *readOnlyChecker) Enter(in Node) (out Node, skipChildren bool) {
if node, ok := in.(*VariableExpr); ok {
// like func rewriteVariable(), this stands for SetVar.
if node.IsSystem && node.Value != nil {
checker.readOnly = false
return in, true
}
}
return in, false
}
// Leave implements Visitor interface.
func (checker *readOnlyChecker) Leave(in Node) (out Node, ok bool) {
return in, checker.readOnly
}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package auth
import (
"fmt"
"github.com/pingcap/tidb/pkg/parser/format"
)
const (
// UserNameMaxLength is the max length of username.
UserNameMaxLength = 32
// HostNameMaxLength is the max length of host name.
HostNameMaxLength = 255
)
// UserIdentity represents username and hostname.
type UserIdentity struct {
Username string
Hostname string
CurrentUser bool
AuthUsername string // Username matched in privileges system
AuthHostname string // Match in privs system (i.e. could be a wildcard)
AuthPlugin string // The plugin specified in handshake, only used during authentication.
}
// Restore implements Node interface.
func (user *UserIdentity) Restore(ctx *format.RestoreCtx) error {
if user.CurrentUser {
ctx.WriteKeyWord("CURRENT_USER")
} else {
ctx.WriteName(user.Username)
ctx.WritePlain("@")
ctx.WriteName(user.Hostname)
}
return nil
}
// String converts UserIdentity to the format user@host.
// It defaults to providing the AuthIdentity (the matching entry in priv tables)
// To use the actual identity use LoginString()
func (user *UserIdentity) String() string {
// TODO: Escape username and hostname.
if user == nil {
return ""
}
if user.AuthUsername != "" {
return fmt.Sprintf("%s@%s", user.AuthUsername, user.AuthHostname)
}
return fmt.Sprintf("%s@%s", user.Username, user.Hostname)
}
// LoginString returns matched identity in user@host format
// It matches the login user.
func (user *UserIdentity) LoginString() string {
// TODO: Escape username and hostname.
if user == nil {
return ""
}
return fmt.Sprintf("%s@%s", user.Username, user.Hostname)
}
// RoleIdentity represents a role name.
type RoleIdentity struct {
Username string
Hostname string
}
// Restore implements Node interface.
func (role *RoleIdentity) Restore(ctx *format.RestoreCtx) error {
ctx.WriteName(role.Username)
if role.Hostname != "" {
ctx.WritePlain("@")
ctx.WriteName(role.Hostname)
}
return nil
}
// String converts UserIdentity to the format user@host.
func (role *RoleIdentity) String() string {
// TODO: Escape username and hostname.
return fmt.Sprintf("`%s`@`%s`", role.Username, role.Hostname)
}
// Copyright 2021 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package auth
// Resources:
// - https://dev.mysql.com/doc/refman/8.0/en/caching-sha2-pluggable-authentication.html
// - https://dev.mysql.com/doc/dev/mysql-server/latest/page_caching_sha2_authentication_exchanges.html
// - https://dev.mysql.com/doc/dev/mysql-server/latest/namespacesha2__password.html
// - https://www.akkadia.org/drepper/SHA-crypt.txt
// - https://dev.mysql.com/worklog/task/?id=9591
//
// CREATE USER 'foo'@'%' IDENTIFIED BY 'foobar';
// SELECT HEX(authentication_string) FROM mysql.user WHERE user='foo';
// 24412430303524031A69251C34295C4B35167C7F1E5A7B63091349503974624D34504B5A424679354856336868686F52485A736E4A733368786E427575516C73446469496537
//
// Format:
// Split on '$':
// - digest type ("A")
// - iterations (divided by ITERATION_MULTIPLIER)
// - salt+hash
//
import (
"bytes"
"crypto/rand"
"crypto/sha256"
"errors"
"fmt"
"strconv"
"github.com/pingcap/tidb/pkg/parser/mysql"
)
const (
// MIXCHARS is the number of characters to use in the mix
MIXCHARS = 32
// SALT_LENGTH is the length of the salt
SALT_LENGTH = 20 //nolint: revive
// ITERATION_MULTIPLIER is the number of iterations to use
ITERATION_MULTIPLIER = 1000 //nolint: revive
)
func b64From24bit(b []byte, n int, buf *bytes.Buffer) {
b64t := []byte("./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")
w := (int64(b[0]) << 16) | (int64(b[1]) << 8) | int64(b[2])
for n > 0 {
n--
buf.WriteByte(b64t[w&0x3f])
w >>= 6
}
}
// Sha256Hash is an util function to calculate sha256 hash.
func Sha256Hash(input []byte) []byte {
res := sha256.Sum256(input)
return res[:]
}
// 'hash' function should return an array with 32 bytes, the same as SHA-256
func hashCrypt(plaintext string, salt []byte, iterations int, hash func([]byte) []byte) string {
// Numbers in the comments refer to the description of the algorithm on https://www.akkadia.org/drepper/SHA-crypt.txt
// 1, 2, 3
bufA := bytes.NewBuffer(make([]byte, 0, 4096))
bufA.WriteString(plaintext)
bufA.Write(salt)
// 4, 5, 6, 7, 8
bufB := bytes.NewBuffer(make([]byte, 0, 4096))
bufB.WriteString(plaintext)
bufB.Write(salt)
bufB.WriteString(plaintext)
sumB := hash(bufB.Bytes())
bufB.Reset()
// 9, 10
var i int
for i = len(plaintext); i > MIXCHARS; i -= MIXCHARS {
bufA.Write(sumB[:MIXCHARS])
}
bufA.Write(sumB[:i])
// 11
for i = len(plaintext); i > 0; i >>= 1 {
if i%2 == 0 {
bufA.WriteString(plaintext)
} else {
bufA.Write(sumB[:])
}
}
// 12
sumA := hash(bufA.Bytes())
bufA.Reset()
// 13, 14, 15
bufDP := bufA
for range []byte(plaintext) {
bufDP.WriteString(plaintext)
}
sumDP := hash(bufDP.Bytes())
bufDP.Reset()
// 16
p := make([]byte, 0, sha256.Size)
for i = len(plaintext); i > 0; i -= MIXCHARS {
if i > MIXCHARS {
p = append(p, sumDP[:]...)
} else {
p = append(p, sumDP[0:i]...)
}
}
// 17, 18, 19
bufDS := bufA
for range 16 + int(sumA[0]) {
bufDS.Write(salt)
}
sumDS := hash(bufDS.Bytes())
bufDS.Reset()
// 20
s := make([]byte, 0, 32)
for i = len(salt); i > 0; i -= MIXCHARS {
if i > MIXCHARS {
s = append(s, sumDS[:]...)
} else {
s = append(s, sumDS[0:i]...)
}
}
// 21
bufC := bufA
var sumC []byte
for i = range iterations {
bufC.Reset()
if i&1 != 0 {
bufC.Write(p)
} else {
bufC.Write(sumA[:])
}
if i%3 != 0 {
bufC.Write(s)
}
if i%7 != 0 {
bufC.Write(p)
}
if i&1 != 0 {
bufC.Write(sumA[:])
} else {
bufC.Write(p)
}
sumC = hash(bufC.Bytes())
sumA = sumC
}
// 22
buf := bytes.NewBuffer(make([]byte, 0, 100))
buf.Write([]byte{'$', 'A', '$'})
rounds := fmt.Sprintf("%03X", iterations/ITERATION_MULTIPLIER)
buf.WriteString(rounds)
buf.Write([]byte{'$'})
buf.Write(salt)
b64From24bit([]byte{sumC[0], sumC[10], sumC[20]}, 4, buf)
b64From24bit([]byte{sumC[21], sumC[1], sumC[11]}, 4, buf)
b64From24bit([]byte{sumC[12], sumC[22], sumC[2]}, 4, buf)
b64From24bit([]byte{sumC[3], sumC[13], sumC[23]}, 4, buf)
b64From24bit([]byte{sumC[24], sumC[4], sumC[14]}, 4, buf)
b64From24bit([]byte{sumC[15], sumC[25], sumC[5]}, 4, buf)
b64From24bit([]byte{sumC[6], sumC[16], sumC[26]}, 4, buf)
b64From24bit([]byte{sumC[27], sumC[7], sumC[17]}, 4, buf)
b64From24bit([]byte{sumC[18], sumC[28], sumC[8]}, 4, buf)
b64From24bit([]byte{sumC[9], sumC[19], sumC[29]}, 4, buf)
b64From24bit([]byte{0, sumC[31], sumC[30]}, 3, buf)
return buf.String()
}
// CheckHashingPassword checks if a caching_sha2_password or tidb_sm3_password authentication string matches a password
func CheckHashingPassword(pwhash []byte, password string, hash string) (bool, error) {
pwhashParts := bytes.Split(pwhash, []byte("$"))
if len(pwhashParts) != 4 {
return false, errors.New("failed to decode hash parts")
}
hashType := string(pwhashParts[1])
if hashType != "A" {
return false, errors.New("digest type is incompatible")
}
iterations, err := strconv.ParseInt(string(pwhashParts[2]), 16, 64)
if err != nil {
return false, errors.New("failed to decode iterations")
}
iterations = iterations * ITERATION_MULTIPLIER
salt := pwhashParts[3][:SALT_LENGTH]
var newHash string
switch hash {
case mysql.AuthCachingSha2Password:
newHash = hashCrypt(password, salt, int(iterations), Sha256Hash)
case mysql.AuthTiDBSM3Password:
newHash = hashCrypt(password, salt, int(iterations), Sm3Hash)
}
return bytes.Equal(pwhash, []byte(newHash)), nil
}
// NewHashPassword creates a new password for caching_sha2_password or tidb_sm3_password
func NewHashPassword(pwd string, hash string) string {
salt := make([]byte, SALT_LENGTH)
rand.Read(salt)
// Restrict to 7-bit to avoid multi-byte UTF-8
for i := range salt {
salt[i] = salt[i] &^ 128
for salt[i] == 36 || salt[i] == 0 { // '$' or NUL
newval := make([]byte, 1)
rand.Read(newval)
salt[i] = newval[0] &^ 128
}
}
switch hash {
case mysql.AuthCachingSha2Password:
return hashCrypt(pwd, salt, 5*ITERATION_MULTIPLIER, Sha256Hash)
case mysql.AuthTiDBSM3Password:
return hashCrypt(pwd, salt, 5*ITERATION_MULTIPLIER, Sm3Hash)
default:
return ""
}
}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package auth
import (
"bytes"
"crypto/sha1" //nolint: gosec
"encoding/hex"
"fmt"
"github.com/pingcap/errors"
"github.com/pingcap/tidb/pkg/parser/terror"
)
// CheckScrambledPassword check scrambled password received from client.
// The new authentication is performed in following manner:
//
// SERVER: public_seed=create_random_string()
// send(public_seed)
// CLIENT: recv(public_seed)
// hash_stage1=sha1("password")
// hash_stage2=sha1(hash_stage1)
// reply=xor(hash_stage1, sha1(public_seed,hash_stage2)
// // this three steps are done in scramble()
// send(reply)
// SERVER: recv(reply)
// hash_stage1=xor(reply, sha1(public_seed,hash_stage2))
// candidate_hash2=sha1(hash_stage1)
// check(candidate_hash2==hash_stage2)
// // this three steps are done in check_scramble()
func CheckScrambledPassword(salt, hpwd, auth []byte) bool {
//nolint: gosec
crypt := sha1.New()
_, err := crypt.Write(salt)
terror.Log(errors.Trace(err))
_, err = crypt.Write(hpwd)
terror.Log(errors.Trace(err))
hash := crypt.Sum(nil)
// token = scrambleHash XOR stage1Hash
if len(auth) != len(hash) {
return false
}
for i := range hash {
hash[i] ^= auth[i]
}
return bytes.Equal(hpwd, Sha1Hash(hash))
}
// Sha1Hash is an util function to calculate sha1 hash.
func Sha1Hash(bs []byte) []byte {
//nolint: gosec
crypt := sha1.New()
_, err := crypt.Write(bs)
terror.Log(errors.Trace(err))
return crypt.Sum(nil)
}
// EncodePassword converts plaintext password(type is string) to hashed hex string.
func EncodePassword(pwd string) string {
if len(pwd) == 0 {
return ""
}
hash1 := Sha1Hash([]byte(pwd))
hash2 := Sha1Hash(hash1)
return fmt.Sprintf("*%X", hash2)
}
// EncodePasswordBytes converts plaintext password(type is []byte) to hashed hex string.
func EncodePasswordBytes(pwd []byte) string {
if len(pwd) == 0 {
return ""
}
hash1 := Sha1Hash(pwd)
hash2 := Sha1Hash(hash1)
return fmt.Sprintf("*%X", hash2)
}
// DecodePassword converts hex string password without prefix '*' to byte array.
func DecodePassword(pwd string) ([]byte, error) {
x, err := hex.DecodeString(pwd[1:])
if err != nil {
return nil, errors.Trace(err)
}
return x, nil
}
// Copyright 2022 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package auth
import (
"encoding/binary"
"hash"
)
// The concrete Sm3Hash Cryptographic Hash Algorithm can be accessed in http://www.sca.gov.cn/sca/xwdt/2010-12/17/content_1002389.shtml
// This implementation of 'type sm3 struct' is modified from https://github.com/tjfoc/gmsm/tree/601ddb090dcf53d7951cc4dcc66276e2b817837c/sm3
// Some other references:
// https://datatracker.ietf.org/doc/draft-sca-cfrg-sm3/
/*
Copyright Suzhou Tongji Fintech Research Institute 2017 All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
type sm3 struct {
digest [8]uint32 // digest represents the partial evaluation of V
length uint64 // length of the message
unhandleMsg []byte
blockSize int
size int
}
func ff0(x, y, z uint32) uint32 { return x ^ y ^ z }
func ff1(x, y, z uint32) uint32 { return (x & y) | (x & z) | (y & z) }
func gg0(x, y, z uint32) uint32 { return x ^ y ^ z }
func gg1(x, y, z uint32) uint32 { return (x & y) | (^x & z) }
func p0(x uint32) uint32 { return x ^ leftRotate(x, 9) ^ leftRotate(x, 17) }
func p1(x uint32) uint32 { return x ^ leftRotate(x, 15) ^ leftRotate(x, 23) }
func leftRotate(x uint32, i uint32) uint32 { return x<<(i%32) | x>>(32-i%32) }
func (sm3 *sm3) pad() []byte {
msg := sm3.unhandleMsg
// Append '1'
msg = append(msg, 0x80)
// Append until the resulting message length (in bits) is congruent to 448 (mod 512)
blockSize := 64
for i := len(msg); i%blockSize != 56; i++ {
msg = append(msg, 0x00)
}
// append message length
msg = append(msg, uint8(sm3.length>>56&0xff))
msg = append(msg, uint8(sm3.length>>48&0xff))
msg = append(msg, uint8(sm3.length>>40&0xff))
msg = append(msg, uint8(sm3.length>>32&0xff))
msg = append(msg, uint8(sm3.length>>24&0xff))
msg = append(msg, uint8(sm3.length>>16&0xff))
msg = append(msg, uint8(sm3.length>>8&0xff))
msg = append(msg, uint8(sm3.length>>0&0xff))
return msg
}
func (sm3 *sm3) update(msg []byte) [8]uint32 {
var w [68]uint32
var w1 [64]uint32
a, b, c, d, e, f, g, h := sm3.digest[0], sm3.digest[1], sm3.digest[2], sm3.digest[3], sm3.digest[4], sm3.digest[5], sm3.digest[6], sm3.digest[7]
for len(msg) >= 64 {
for i := range 16 {
w[i] = binary.BigEndian.Uint32(msg[4*i : 4*(i+1)])
}
for i := 16; i < 68; i++ {
w[i] = p1(w[i-16]^w[i-9]^leftRotate(w[i-3], 15)) ^ leftRotate(w[i-13], 7) ^ w[i-6]
}
for i := range 64 {
w1[i] = w[i] ^ w[i+4]
}
a1, b1, c1, d1, e1, f1, g1, h1 := a, b, c, d, e, f, g, h
for i := range 16 {
ss1 := leftRotate(leftRotate(a1, 12)+e1+leftRotate(0x79cc4519, uint32(i)), 7)
ss2 := ss1 ^ leftRotate(a1, 12)
tt1 := ff0(a1, b1, c1) + d1 + ss2 + w1[i]
tt2 := gg0(e1, f1, g1) + h1 + ss1 + w[i]
d1 = c1
c1 = leftRotate(b1, 9)
b1 = a1
a1 = tt1
h1 = g1
g1 = leftRotate(f1, 19)
f1 = e1
e1 = p0(tt2)
}
for i := 16; i < 64; i++ {
ss1 := leftRotate(leftRotate(a1, 12)+e1+leftRotate(0x7a879d8a, uint32(i)), 7)
ss2 := ss1 ^ leftRotate(a1, 12)
tt1 := ff1(a1, b1, c1) + d1 + ss2 + w1[i]
tt2 := gg1(e1, f1, g1) + h1 + ss1 + w[i]
d1 = c1
c1 = leftRotate(b1, 9)
b1 = a1
a1 = tt1
h1 = g1
g1 = leftRotate(f1, 19)
f1 = e1
e1 = p0(tt2)
}
a ^= a1
b ^= b1
c ^= c1
d ^= d1
e ^= e1
f ^= f1
g ^= g1
h ^= h1
msg = msg[64:]
}
var digest [8]uint32
digest[0], digest[1], digest[2], digest[3], digest[4], digest[5], digest[6], digest[7] = a, b, c, d, e, f, g, h
return digest
}
// BlockSize returns the hash's underlying block size.
// The Write method must be able to accept any amount of data,
// but it may operate more efficiently if all writes are a multiple of the block size.
func (sm3 *sm3) BlockSize() int { return sm3.blockSize }
// Size returns the number of bytes Sum will return.
func (sm3 *sm3) Size() int { return sm3.size }
// Reset clears the internal state by zeroing bytes in the state buffer.
// This can be skipped for a newly-created hash state; the default zero-allocated state is correct.
func (sm3 *sm3) Reset() {
// Reset digest
sm3.digest[0] = 0x7380166f
sm3.digest[1] = 0x4914b2b9
sm3.digest[2] = 0x172442d7
sm3.digest[3] = 0xda8a0600
sm3.digest[4] = 0xa96f30bc
sm3.digest[5] = 0x163138aa
sm3.digest[6] = 0xe38dee4d
sm3.digest[7] = 0xb0fb0e4e
sm3.length = 0
sm3.unhandleMsg = []byte{}
sm3.blockSize = 64
sm3.size = 32
}
// Write (via the embedded io.Writer interface) adds more data to the running hash.
// It never returns an error.
func (sm3 *sm3) Write(p []byte) (int, error) {
toWrite := len(p)
sm3.length += uint64(len(p) * 8)
msg := append(sm3.unhandleMsg, p...)
nblocks := len(msg) / sm3.BlockSize()
sm3.digest = sm3.update(msg)
sm3.unhandleMsg = msg[nblocks*sm3.BlockSize():]
return toWrite, nil
}
// Sum appends the current hash to b and returns the resulting slice.
// It does not change the underlying hash state.
func (sm3 *sm3) Sum(in []byte) []byte {
_, _ = sm3.Write(in)
msg := sm3.pad()
// Finalize
digest := sm3.update(msg)
// save hash to in
needed := sm3.Size()
if cap(in)-len(in) < needed {
newIn := make([]byte, len(in), len(in)+needed)
copy(newIn, in)
in = newIn
}
out := in[len(in) : len(in)+needed]
for i := range 8 {
binary.BigEndian.PutUint32(out[i*4:], digest[i])
}
return out
}
// NewSM3 returns a new hash.Hash computing the Sm3Hash checksum.
func NewSM3() hash.Hash {
var h sm3
h.Reset()
return &h
}
// Sm3Hash returns the sm3 checksum of the data.
func Sm3Hash(data []byte) []byte {
h := NewSM3()
h.Write(data)
return h.Sum(nil)
}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package charset
import (
"slices"
"strings"
"github.com/pingcap/errors"
"github.com/pingcap/log"
"github.com/pingcap/tidb/pkg/parser/mysql"
"github.com/pingcap/tidb/pkg/parser/terror"
"go.uber.org/zap"
)
var (
// ErrUnknownCollation is unknown collation.
ErrUnknownCollation = terror.ClassDDL.NewStd(mysql.ErrUnknownCollation)
// ErrCollationCharsetMismatch is collation charset mismatch.
ErrCollationCharsetMismatch = terror.ClassDDL.NewStd(mysql.ErrCollationCharsetMismatch)
)
var (
// PadSpace is to mark that trailing spaces are insignificant in comparisons
PadSpace = "PAD SPACE"
// PadNone is to mark that trailing spaces are significant in comparisons
PadNone = "NO PAD"
)
// Charset is a charset.
// Now we only support MySQL.
type Charset struct {
Name string
DefaultCollation string
Collations map[string]*Collation
Desc string
Maxlen int
}
// Collation is a collation.
// Now we only support MySQL.
type Collation struct {
ID int
CharsetName string
Name string
IsDefault bool
Sortlen int
PadAttribute string
}
var collationsIDMap = make(map[int]*Collation)
var collationsNameMap = make(map[string]*Collation)
var supportedCollations = make([]*Collation, 0, len(supportedCollationNames))
// CharacterSetInfos contains all the supported charsets.
var CharacterSetInfos = map[string]*Charset{
CharsetUTF8: {CharsetUTF8, CollationUTF8, make(map[string]*Collation), "UTF-8 Unicode", 3},
CharsetUTF8MB4: {CharsetUTF8MB4, CollationUTF8MB4, make(map[string]*Collation), "UTF-8 Unicode", 4},
CharsetASCII: {CharsetASCII, CollationASCII, make(map[string]*Collation), "US ASCII", 1},
CharsetLatin1: {CharsetLatin1, CollationLatin1, make(map[string]*Collation), "Latin1", 1},
CharsetBin: {CharsetBin, CollationBin, make(map[string]*Collation), "binary", 1},
CharsetGBK: {CharsetGBK, CollationGBKBin, make(map[string]*Collation), "Chinese Internal Code Specification", 2},
CharsetGB18030: {CharsetGB18030, CollationGB18030Bin, make(map[string]*Collation), "China National Standard GB18030", 4},
}
// All the names supported collations should be in the following table.
var supportedCollationNames = map[string]struct{}{
CollationUTF8: {},
CollationUTF8MB4: {},
CollationASCII: {},
CollationLatin1: {},
CollationBin: {},
CollationGBKBin: {},
CollationGB18030Bin: {},
}
// TiFlashSupportedCharsets is a map which contains TiFlash supports charsets.
var TiFlashSupportedCharsets = map[string]struct{}{
CharsetUTF8: {},
CharsetUTF8MB4: {},
CharsetASCII: {},
CharsetLatin1: {},
CharsetBin: {},
}
// GetSupportedCharsets gets descriptions for all charsets supported so far.
func GetSupportedCharsets() []*Charset {
charsets := make([]*Charset, 0, len(CharacterSetInfos))
for _, ch := range CharacterSetInfos {
charsets = append(charsets, ch)
}
// sort charset by name.
slices.SortFunc(charsets, func(i, j *Charset) int {
return strings.Compare(i.Name, j.Name)
})
return charsets
}
// GetSupportedCollations gets information for all collations supported so far.
func GetSupportedCollations() []*Collation {
return supportedCollations
}
// ValidCharsetAndCollation checks the charset and the collation validity
// and returns a boolean.
func ValidCharsetAndCollation(cs string, co string) bool {
// We will use utf8 as a default charset.
if cs == "" || cs == CharsetUTF8MB3 {
cs = CharsetUTF8
}
chs, err := GetCharsetInfo(cs)
if err != nil {
return false
}
if co == "" {
return true
}
co = utf8Alias(strings.ToLower(co))
_, ok := chs.Collations[co]
return ok
}
// GetDefaultCollationLegacy is compatible with the charset support in old version parser.
func GetDefaultCollationLegacy(charset string) (string, error) {
switch strings.ToLower(charset) {
case CharsetUTF8MB3:
return GetDefaultCollation(CharsetUTF8)
case CharsetUTF8, CharsetUTF8MB4, CharsetASCII, CharsetLatin1, CharsetBin:
return GetDefaultCollation(charset)
default:
return "", errors.Errorf("Unknown charset %s", charset)
}
}
// GetDefaultCollation returns the default collation for charset.
func GetDefaultCollation(charset string) (string, error) {
cs, err := GetCharsetInfo(charset)
if err != nil {
return "", err
}
return cs.DefaultCollation, nil
}
// GetDefaultCharsetAndCollate returns the default charset and collation.
func GetDefaultCharsetAndCollate() (defaultCharset string, defaultCollationName string) {
return mysql.DefaultCharset, mysql.DefaultCollationName
}
// GetCharsetInfo returns charset and collation for cs as name.
func GetCharsetInfo(cs string) (*Charset, error) {
if strings.ToLower(cs) == CharsetUTF8MB3 {
cs = CharsetUTF8
}
if c, ok := CharacterSetInfos[strings.ToLower(cs)]; ok {
return c, nil
}
if c, ok := charsets[strings.ToLower(cs)]; ok {
return c, errors.Errorf("Unsupported charset %s", cs)
}
return nil, errors.Errorf("Unknown charset %s", cs)
}
// GetCharsetInfoByID returns charset and collation for id as cs_number.
func GetCharsetInfoByID(coID int) (charsetStr string, collateStr string, err error) {
if coID == mysql.DefaultCollationID {
return mysql.DefaultCharset, mysql.DefaultCollationName, nil
}
if collation, ok := collationsIDMap[coID]; ok {
return collation.CharsetName, collation.Name, nil
}
log.Warn(
"unable to get collation name from collation ID, return default charset and collation instead",
zap.Int("ID", coID),
zap.Stack("stack"))
return mysql.DefaultCharset, mysql.DefaultCollationName, errors.Errorf("Unknown collation id %d", coID)
}
func utf8Alias(csname string) string {
switch csname {
case "utf8mb3_bin":
csname = "utf8_bin"
case "utf8mb3_unicode_ci":
csname = "utf8_unicode_ci"
case "utf8mb3_general_ci":
csname = "utf8_general_ci"
default:
}
return csname
}
// GetCollationByName returns the collation by name.
func GetCollationByName(name string) (*Collation, error) {
csname := utf8Alias(strings.ToLower(name))
collation, ok := collationsNameMap[csname]
if !ok {
return nil, ErrUnknownCollation.GenWithStackByArgs(name)
}
return collation, nil
}
// GetCollationByID returns collations by given id.
func GetCollationByID(id int) (*Collation, error) {
collation, ok := collationsIDMap[id]
if !ok {
return nil, errors.Errorf("Unknown collation id %d", id)
}
return collation, nil
}
const (
// CollationBin is the default collation for CharsetBin.
CollationBin = "binary"
// CollationUTF8 is the default collation for CharsetUTF8.
CollationUTF8 = "utf8_bin"
// CollationUTF8MB4 is the default collation for CharsetUTF8MB4.
CollationUTF8MB4 = "utf8mb4_bin"
// CollationASCII is the default collation for CharsetACSII.
CollationASCII = "ascii_bin"
// CollationLatin1 is the default collation for CharsetLatin1.
CollationLatin1 = "latin1_bin"
// CollationGBKBin is the default collation for CharsetGBK when new collation is disabled.
CollationGBKBin = "gbk_bin"
// CollationGBKChineseCI is the default collation for CharsetGBK when new collation is enabled.
CollationGBKChineseCI = "gbk_chinese_ci"
// CollationGB18030Bin is the default collation for CharsetGB18030 when new collation is disabled.
CollationGB18030Bin = "gb18030_bin"
// CollationGB18030ChineseCI is the default collation for CharsetGB18030 when new collation is enabled.
CollationGB18030ChineseCI = "gb18030_chinese_ci"
)
const (
// CharsetASCII is a subset of UTF8.
CharsetASCII = "ascii"
// CharsetBin is used for marking binary charset.
CharsetBin = "binary"
// CharsetLatin1 is a single byte charset.
CharsetLatin1 = "latin1"
// CharsetUTF8 is the default charset for string types.
CharsetUTF8 = "utf8"
// CharsetUTF8MB3 is 3 bytes utf8, a MySQL legacy encoding. "utf8" and "utf8mb3" are aliases.
CharsetUTF8MB3 = "utf8mb3"
// CharsetUTF8MB4 represents 4 bytes utf8, which works the same way as utf8 in Go.
CharsetUTF8MB4 = "utf8mb4"
// CharsetGB18030 represents 4 bytes gb18030.
CharsetGB18030 = "gb18030"
//revive:disable:exported
CharsetARMSCII8 = "armscii8"
CharsetBig5 = "big5"
CharsetCP1250 = "cp1250"
CharsetCP1251 = "cp1251"
CharsetCP1256 = "cp1256"
CharsetCP1257 = "cp1257"
CharsetCP850 = "cp850"
CharsetCP852 = "cp852"
CharsetCP866 = "cp866"
CharsetCP932 = "cp932"
CharsetDEC8 = "dec8"
CharsetEUCJPMS = "eucjpms"
CharsetEUCKR = "euckr"
CharsetGB2312 = "gb2312"
CharsetGBK = "gbk"
CharsetGEOSTD8 = "geostd8"
CharsetGreek = "greek"
CharsetHebrew = "hebrew"
CharsetHP8 = "hp8"
CharsetKEYBCS2 = "keybcs2"
CharsetKOI8R = "koi8r"
CharsetKOI8U = "koi8u"
CharsetLatin2 = "latin2"
CharsetLatin5 = "latin5"
CharsetLatin7 = "latin7"
CharsetMacCE = "macce"
CharsetMacRoman = "macroman"
CharsetSJIS = "sjis"
CharsetSWE7 = "swe7"
CharsetTIS620 = "tis620"
CharsetUCS2 = "ucs2"
CharsetUJIS = "ujis"
CharsetUTF16 = "utf16"
CharsetUTF16LE = "utf16le"
CharsetUTF32 = "utf32"
//revive:enable:exported
)
var charsets = map[string]*Charset{
CharsetARMSCII8: {Name: CharsetARMSCII8, Maxlen: 1, DefaultCollation: "armscii8_general_ci", Desc: "ARMSCII-8 Armenian", Collations: make(map[string]*Collation)},
CharsetASCII: {Name: CharsetASCII, Maxlen: 1, DefaultCollation: "ascii_general_ci", Desc: "US ASCII", Collations: make(map[string]*Collation)},
CharsetBig5: {Name: CharsetBig5, Maxlen: 2, DefaultCollation: "big5_chinese_ci", Desc: "Big5 Traditional Chinese", Collations: make(map[string]*Collation)},
CharsetBin: {Name: CharsetBin, Maxlen: 1, DefaultCollation: "binary", Desc: "Binary pseudo charset", Collations: make(map[string]*Collation)},
CharsetCP1250: {Name: CharsetCP1250, Maxlen: 1, DefaultCollation: "cp1250_general_ci", Desc: "Windows Central European", Collations: make(map[string]*Collation)},
CharsetCP1251: {Name: CharsetCP1251, Maxlen: 1, DefaultCollation: "cp1251_general_ci", Desc: "Windows Cyrillic", Collations: make(map[string]*Collation)},
CharsetCP1256: {Name: CharsetCP1256, Maxlen: 1, DefaultCollation: "cp1256_general_ci", Desc: "Windows Arabic", Collations: make(map[string]*Collation)},
CharsetCP1257: {Name: CharsetCP1257, Maxlen: 1, DefaultCollation: "cp1257_general_ci", Desc: "Windows Baltic", Collations: make(map[string]*Collation)},
CharsetCP850: {Name: CharsetCP850, Maxlen: 1, DefaultCollation: "cp850_general_ci", Desc: "DOS West European", Collations: make(map[string]*Collation)},
CharsetCP852: {Name: CharsetCP852, Maxlen: 1, DefaultCollation: "cp852_general_ci", Desc: "DOS Central European", Collations: make(map[string]*Collation)},
CharsetCP866: {Name: CharsetCP866, Maxlen: 1, DefaultCollation: "cp866_general_ci", Desc: "DOS Russian", Collations: make(map[string]*Collation)},
CharsetCP932: {Name: CharsetCP932, Maxlen: 2, DefaultCollation: "cp932_japanese_ci", Desc: "SJIS for Windows Japanese", Collations: make(map[string]*Collation)},
CharsetDEC8: {Name: CharsetDEC8, Maxlen: 1, DefaultCollation: "dec8_swedish_ci", Desc: "DEC West European", Collations: make(map[string]*Collation)},
CharsetEUCJPMS: {Name: CharsetEUCJPMS, Maxlen: 3, DefaultCollation: "eucjpms_japanese_ci", Desc: "UJIS for Windows Japanese", Collations: make(map[string]*Collation)},
CharsetEUCKR: {Name: CharsetEUCKR, Maxlen: 2, DefaultCollation: "euckr_korean_ci", Desc: "EUC-KR Korean", Collations: make(map[string]*Collation)},
CharsetGB18030: {Name: CharsetGB18030, Maxlen: 4, DefaultCollation: "gb18030_chinese_ci", Desc: "China National Standard GB18030", Collations: make(map[string]*Collation)},
CharsetGB2312: {Name: CharsetGB2312, Maxlen: 2, DefaultCollation: "gb2312_chinese_ci", Desc: "GB2312 Simplified Chinese", Collations: make(map[string]*Collation)},
CharsetGBK: {Name: CharsetGBK, Maxlen: 2, DefaultCollation: "gbk_chinese_ci", Desc: "GBK Simplified Chinese", Collations: make(map[string]*Collation)},
CharsetGEOSTD8: {Name: CharsetGEOSTD8, Maxlen: 1, DefaultCollation: "geostd8_general_ci", Desc: "GEOSTD8 Georgian", Collations: make(map[string]*Collation)},
CharsetGreek: {Name: CharsetGreek, Maxlen: 1, DefaultCollation: "greek_general_ci", Desc: "ISO 8859-7 Greek", Collations: make(map[string]*Collation)},
CharsetHebrew: {Name: CharsetHebrew, Maxlen: 1, DefaultCollation: "hebrew_general_ci", Desc: "ISO 8859-8 Hebrew", Collations: make(map[string]*Collation)},
CharsetHP8: {Name: CharsetHP8, Maxlen: 1, DefaultCollation: "hp8_english_ci", Desc: "HP West European", Collations: make(map[string]*Collation)},
CharsetKEYBCS2: {Name: CharsetKEYBCS2, Maxlen: 1, DefaultCollation: "keybcs2_general_ci", Desc: "DOS Kamenicky Czech-Slovak", Collations: make(map[string]*Collation)},
CharsetKOI8R: {Name: CharsetKOI8R, Maxlen: 1, DefaultCollation: "koi8u_general_ci", Desc: "KOI8-U Ukrainian", Collations: make(map[string]*Collation)},
CharsetKOI8U: {Name: CharsetKOI8U, Maxlen: 1, DefaultCollation: "koi8r_general_ci", Desc: "KOI8-R Relcom Russian", Collations: make(map[string]*Collation)},
CharsetLatin1: {Name: CharsetLatin1, Maxlen: 1, DefaultCollation: "latin1_swedish_ci", Desc: "cp1252 West European", Collations: make(map[string]*Collation)},
CharsetLatin2: {Name: CharsetLatin2, Maxlen: 1, DefaultCollation: "latin2_general_ci", Desc: "ISO 8859-2 Central European", Collations: make(map[string]*Collation)},
CharsetLatin5: {Name: CharsetLatin5, Maxlen: 1, DefaultCollation: "latin5_turkish_ci", Desc: "ISO 8859-9 Turkish", Collations: make(map[string]*Collation)},
CharsetLatin7: {Name: CharsetLatin7, Maxlen: 1, DefaultCollation: "latin7_general_ci", Desc: "ISO 8859-13 Baltic", Collations: make(map[string]*Collation)},
CharsetMacCE: {Name: CharsetMacCE, Maxlen: 1, DefaultCollation: "macce_general_ci", Desc: "Mac Central European", Collations: make(map[string]*Collation)},
CharsetMacRoman: {Name: CharsetMacRoman, Maxlen: 1, DefaultCollation: "macroman_general_ci", Desc: "Mac West European", Collations: make(map[string]*Collation)},
CharsetSJIS: {Name: CharsetSJIS, Maxlen: 2, DefaultCollation: "sjis_japanese_ci", Desc: "Shift-JIS Japanese", Collations: make(map[string]*Collation)},
CharsetSWE7: {Name: CharsetSWE7, Maxlen: 1, DefaultCollation: "swe7_swedish_ci", Desc: "7bit Swedish", Collations: make(map[string]*Collation)},
CharsetTIS620: {Name: CharsetTIS620, Maxlen: 1, DefaultCollation: "tis620_thai_ci", Desc: "TIS620 Thai", Collations: make(map[string]*Collation)},
CharsetUCS2: {Name: CharsetUCS2, Maxlen: 2, DefaultCollation: "ucs2_general_ci", Desc: "UCS-2 Unicode", Collations: make(map[string]*Collation)},
CharsetUJIS: {Name: CharsetUJIS, Maxlen: 3, DefaultCollation: "ujis_japanese_ci", Desc: "EUC-JP Japanese", Collations: make(map[string]*Collation)},
CharsetUTF16: {Name: CharsetUTF16, Maxlen: 4, DefaultCollation: "utf16_general_ci", Desc: "UTF-16 Unicode", Collations: make(map[string]*Collation)},
CharsetUTF16LE: {Name: CharsetUTF16LE, Maxlen: 4, DefaultCollation: "utf16le_general_ci", Desc: "UTF-16LE Unicode", Collations: make(map[string]*Collation)},
CharsetUTF32: {Name: CharsetUTF32, Maxlen: 4, DefaultCollation: "utf32_general_ci", Desc: "UTF-32 Unicode", Collations: make(map[string]*Collation)},
CharsetUTF8: {Name: CharsetUTF8, Maxlen: 3, DefaultCollation: "utf8_general_ci", Desc: "UTF-8 Unicode", Collations: make(map[string]*Collation)},
CharsetUTF8MB4: {Name: CharsetUTF8MB4, Maxlen: 4, DefaultCollation: "utf8mb4_0900_ai_ci", Desc: "UTF-8 Unicode", Collations: make(map[string]*Collation)},
}
var collations = []*Collation{
{1, "big5", "big5_chinese_ci", true, 1, PadSpace},
{2, "latin2", "latin2_czech_cs", false, 1, PadSpace},
{3, "dec8", "dec8_swedish_ci", true, 1, PadSpace},
{4, "cp850", "cp850_general_ci", true, 1, PadSpace},
{5, "latin1", "latin1_german1_ci", false, 1, PadSpace},
{6, "hp8", "hp8_english_ci", true, 1, PadSpace},
{7, "koi8r", "koi8r_general_ci", true, 1, PadSpace},
{8, "latin1", "latin1_swedish_ci", false, 1, PadSpace},
{9, "latin2", "latin2_general_ci", true, 1, PadSpace},
{10, "swe7", "swe7_swedish_ci", true, 1, PadSpace},
{11, "ascii", "ascii_general_ci", false, 1, PadSpace},
{12, "ujis", "ujis_japanese_ci", true, 1, PadSpace},
{13, "sjis", "sjis_japanese_ci", true, 1, PadSpace},
{14, "cp1251", "cp1251_bulgarian_ci", false, 1, PadSpace},
{15, "latin1", "latin1_danish_ci", false, 1, PadSpace},
{16, "hebrew", "hebrew_general_ci", true, 1, PadSpace},
{18, "tis620", "tis620_thai_ci", true, 1, PadSpace},
{19, "euckr", "euckr_korean_ci", true, 1, PadSpace},
{20, "latin7", "latin7_estonian_cs", false, 1, PadSpace},
{21, "latin2", "latin2_hungarian_ci", false, 1, PadSpace},
{22, "koi8u", "koi8u_general_ci", true, 1, PadSpace},
{23, "cp1251", "cp1251_ukrainian_ci", false, 1, PadSpace},
{24, "gb2312", "gb2312_chinese_ci", true, 1, PadSpace},
{25, "greek", "greek_general_ci", true, 1, PadSpace},
{26, "cp1250", "cp1250_general_ci", true, 1, PadSpace},
{27, "latin2", "latin2_croatian_ci", false, 1, PadSpace},
{28, "gbk", "gbk_chinese_ci", false, 1, PadSpace},
{29, "cp1257", "cp1257_lithuanian_ci", false, 1, PadSpace},
{30, "latin5", "latin5_turkish_ci", true, 1, PadSpace},
{31, "latin1", "latin1_german2_ci", false, 1, PadSpace},
{32, "armscii8", "armscii8_general_ci", true, 1, PadSpace},
{33, "utf8", "utf8_general_ci", false, 1, PadSpace},
{34, "cp1250", "cp1250_czech_cs", false, 1, PadSpace},
{35, "ucs2", "ucs2_general_ci", true, 1, PadSpace},
{36, "cp866", "cp866_general_ci", true, 1, PadSpace},
{37, "keybcs2", "keybcs2_general_ci", true, 1, PadSpace},
{38, "macce", "macce_general_ci", true, 1, PadSpace},
{39, "macroman", "macroman_general_ci", true, 1, PadSpace},
{40, "cp852", "cp852_general_ci", true, 1, PadSpace},
{41, "latin7", "latin7_general_ci", true, 1, PadSpace},
{42, "latin7", "latin7_general_cs", false, 1, PadSpace},
{43, "macce", "macce_bin", false, 1, PadSpace},
{44, "cp1250", "cp1250_croatian_ci", false, 1, PadSpace},
{45, "utf8mb4", "utf8mb4_general_ci", false, 1, PadSpace},
{46, "utf8mb4", "utf8mb4_bin", true, 1, PadSpace},
{47, "latin1", "latin1_bin", true, 1, PadSpace},
{48, "latin1", "latin1_general_ci", false, 1, PadSpace},
{49, "latin1", "latin1_general_cs", false, 1, PadSpace},
{50, "cp1251", "cp1251_bin", false, 1, PadSpace},
{51, "cp1251", "cp1251_general_ci", true, 1, PadSpace},
{52, "cp1251", "cp1251_general_cs", false, 1, PadSpace},
{53, "macroman", "macroman_bin", false, 1, PadSpace},
{54, "utf16", "utf16_general_ci", true, 1, PadSpace},
{55, "utf16", "utf16_bin", false, 1, PadSpace},
{56, "utf16le", "utf16le_general_ci", true, 1, PadSpace},
{57, "cp1256", "cp1256_general_ci", true, 1, PadSpace},
{58, "cp1257", "cp1257_bin", false, 1, PadSpace},
{59, "cp1257", "cp1257_general_ci", true, 1, PadSpace},
{60, "utf32", "utf32_general_ci", true, 1, PadSpace},
{61, "utf32", "utf32_bin", false, 1, PadSpace},
{62, "utf16le", "utf16le_bin", false, 1, PadSpace},
{63, "binary", "binary", true, 1, PadNone},
{64, "armscii8", "armscii8_bin", false, 1, PadSpace},
{65, "ascii", "ascii_bin", true, 1, PadSpace},
{66, "cp1250", "cp1250_bin", false, 1, PadSpace},
{67, "cp1256", "cp1256_bin", false, 1, PadSpace},
{68, "cp866", "cp866_bin", false, 1, PadSpace},
{69, "dec8", "dec8_bin", false, 1, PadSpace},
{70, "greek", "greek_bin", false, 1, PadSpace},
{71, "hebrew", "hebrew_bin", false, 1, PadSpace},
{72, "hp8", "hp8_bin", false, 1, PadSpace},
{73, "keybcs2", "keybcs2_bin", false, 1, PadSpace},
{74, "koi8r", "koi8r_bin", false, 1, PadSpace},
{75, "koi8u", "koi8u_bin", false, 1, PadSpace},
{76, "utf8", "utf8_tolower_ci", false, 1, PadNone},
{77, "latin2", "latin2_bin", false, 1, PadSpace},
{78, "latin5", "latin5_bin", false, 1, PadSpace},
{79, "latin7", "latin7_bin", false, 1, PadSpace},
{80, "cp850", "cp850_bin", false, 1, PadSpace},
{81, "cp852", "cp852_bin", false, 1, PadSpace},
{82, "swe7", "swe7_bin", false, 1, PadSpace},
{83, "utf8", "utf8_bin", true, 1, PadSpace},
{84, "big5", "big5_bin", false, 1, PadSpace},
{85, "euckr", "euckr_bin", false, 1, PadSpace},
{86, "gb2312", "gb2312_bin", false, 1, PadSpace},
{87, "gbk", "gbk_bin", true, 1, PadSpace},
{88, "sjis", "sjis_bin", false, 1, PadSpace},
{89, "tis620", "tis620_bin", false, 1, PadSpace},
{90, "ucs2", "ucs2_bin", false, 1, PadSpace},
{91, "ujis", "ujis_bin", false, 1, PadSpace},
{92, "geostd8", "geostd8_general_ci", true, 1, PadSpace},
{93, "geostd8", "geostd8_bin", false, 1, PadSpace},
{94, "latin1", "latin1_spanish_ci", false, 1, PadSpace},
{95, "cp932", "cp932_japanese_ci", true, 1, PadSpace},
{96, "cp932", "cp932_bin", false, 1, PadSpace},
{97, "eucjpms", "eucjpms_japanese_ci", true, 1, PadSpace},
{98, "eucjpms", "eucjpms_bin", false, 1, PadSpace},
{99, "cp1250", "cp1250_polish_ci", false, 1, PadSpace},
{101, "utf16", "utf16_unicode_ci", false, 1, PadSpace},
{102, "utf16", "utf16_icelandic_ci", false, 1, PadSpace},
{103, "utf16", "utf16_latvian_ci", false, 1, PadSpace},
{104, "utf16", "utf16_romanian_ci", false, 1, PadSpace},
{105, "utf16", "utf16_slovenian_ci", false, 1, PadSpace},
{106, "utf16", "utf16_polish_ci", false, 1, PadSpace},
{107, "utf16", "utf16_estonian_ci", false, 1, PadSpace},
{108, "utf16", "utf16_spanish_ci", false, 1, PadSpace},
{109, "utf16", "utf16_swedish_ci", false, 1, PadSpace},
{110, "utf16", "utf16_turkish_ci", false, 1, PadSpace},
{111, "utf16", "utf16_czech_ci", false, 1, PadSpace},
{112, "utf16", "utf16_danish_ci", false, 1, PadSpace},
{113, "utf16", "utf16_lithuanian_ci", false, 1, PadSpace},
{114, "utf16", "utf16_slovak_ci", false, 1, PadSpace},
{115, "utf16", "utf16_spanish2_ci", false, 1, PadSpace},
{116, "utf16", "utf16_roman_ci", false, 1, PadSpace},
{117, "utf16", "utf16_persian_ci", false, 1, PadSpace},
{118, "utf16", "utf16_esperanto_ci", false, 1, PadSpace},
{119, "utf16", "utf16_hungarian_ci", false, 1, PadSpace},
{120, "utf16", "utf16_sinhala_ci", false, 1, PadSpace},
{121, "utf16", "utf16_german2_ci", false, 1, PadSpace},
{122, "utf16", "utf16_croatian_ci", false, 1, PadSpace},
{123, "utf16", "utf16_unicode_520_ci", false, 1, PadSpace},
{124, "utf16", "utf16_vietnamese_ci", false, 1, PadSpace},
{128, "ucs2", "ucs2_unicode_ci", false, 1, PadSpace},
{129, "ucs2", "ucs2_icelandic_ci", false, 1, PadSpace},
{130, "ucs2", "ucs2_latvian_ci", false, 1, PadSpace},
{131, "ucs2", "ucs2_romanian_ci", false, 1, PadSpace},
{132, "ucs2", "ucs2_slovenian_ci", false, 1, PadSpace},
{133, "ucs2", "ucs2_polish_ci", false, 1, PadSpace},
{134, "ucs2", "ucs2_estonian_ci", false, 1, PadSpace},
{135, "ucs2", "ucs2_spanish_ci", false, 1, PadSpace},
{136, "ucs2", "ucs2_swedish_ci", false, 1, PadSpace},
{137, "ucs2", "ucs2_turkish_ci", false, 1, PadSpace},
{138, "ucs2", "ucs2_czech_ci", false, 1, PadSpace},
{139, "ucs2", "ucs2_danish_ci", false, 1, PadSpace},
{140, "ucs2", "ucs2_lithuanian_ci", false, 1, PadSpace},
{141, "ucs2", "ucs2_slovak_ci", false, 1, PadSpace},
{142, "ucs2", "ucs2_spanish2_ci", false, 1, PadSpace},
{143, "ucs2", "ucs2_roman_ci", false, 1, PadSpace},
{144, "ucs2", "ucs2_persian_ci", false, 1, PadSpace},
{145, "ucs2", "ucs2_esperanto_ci", false, 1, PadSpace},
{146, "ucs2", "ucs2_hungarian_ci", false, 1, PadSpace},
{147, "ucs2", "ucs2_sinhala_ci", false, 1, PadSpace},
{148, "ucs2", "ucs2_german2_ci", false, 1, PadSpace},
{149, "ucs2", "ucs2_croatian_ci", false, 1, PadSpace},
{150, "ucs2", "ucs2_unicode_520_ci", false, 1, PadSpace},
{151, "ucs2", "ucs2_vietnamese_ci", false, 1, PadSpace},
{159, "ucs2", "ucs2_general_mysql500_ci", false, 1, PadSpace},
{160, "utf32", "utf32_unicode_ci", false, 1, PadSpace},
{161, "utf32", "utf32_icelandic_ci", false, 1, PadSpace},
{162, "utf32", "utf32_latvian_ci", false, 1, PadSpace},
{163, "utf32", "utf32_romanian_ci", false, 1, PadSpace},
{164, "utf32", "utf32_slovenian_ci", false, 1, PadSpace},
{165, "utf32", "utf32_polish_ci", false, 1, PadSpace},
{166, "utf32", "utf32_estonian_ci", false, 1, PadSpace},
{167, "utf32", "utf32_spanish_ci", false, 1, PadSpace},
{168, "utf32", "utf32_swedish_ci", false, 1, PadSpace},
{169, "utf32", "utf32_turkish_ci", false, 1, PadSpace},
{170, "utf32", "utf32_czech_ci", false, 1, PadSpace},
{171, "utf32", "utf32_danish_ci", false, 1, PadSpace},
{172, "utf32", "utf32_lithuanian_ci", false, 1, PadSpace},
{173, "utf32", "utf32_slovak_ci", false, 1, PadSpace},
{174, "utf32", "utf32_spanish2_ci", false, 1, PadSpace},
{175, "utf32", "utf32_roman_ci", false, 1, PadSpace},
{176, "utf32", "utf32_persian_ci", false, 1, PadSpace},
{177, "utf32", "utf32_esperanto_ci", false, 1, PadSpace},
{178, "utf32", "utf32_hungarian_ci", false, 1, PadSpace},
{179, "utf32", "utf32_sinhala_ci", false, 1, PadSpace},
{180, "utf32", "utf32_german2_ci", false, 1, PadSpace},
{181, "utf32", "utf32_croatian_ci", false, 1, PadSpace},
{182, "utf32", "utf32_unicode_520_ci", false, 1, PadSpace},
{183, "utf32", "utf32_vietnamese_ci", false, 1, PadSpace},
{192, "utf8", "utf8_unicode_ci", false, 8, PadSpace},
{193, "utf8", "utf8_icelandic_ci", false, 1, PadNone},
{194, "utf8", "utf8_latvian_ci", false, 1, PadNone},
{195, "utf8", "utf8_romanian_ci", false, 1, PadNone},
{196, "utf8", "utf8_slovenian_ci", false, 1, PadNone},
{197, "utf8", "utf8_polish_ci", false, 1, PadNone},
{198, "utf8", "utf8_estonian_ci", false, 1, PadNone},
{199, "utf8", "utf8_spanish_ci", false, 1, PadNone},
{200, "utf8", "utf8_swedish_ci", false, 1, PadNone},
{201, "utf8", "utf8_turkish_ci", false, 1, PadNone},
{202, "utf8", "utf8_czech_ci", false, 1, PadNone},
{203, "utf8", "utf8_danish_ci", false, 1, PadNone},
{204, "utf8", "utf8_lithuanian_ci", false, 1, PadNone},
{205, "utf8", "utf8_slovak_ci", false, 1, PadNone},
{206, "utf8", "utf8_spanish2_ci", false, 1, PadNone},
{207, "utf8", "utf8_roman_ci", false, 1, PadNone},
{208, "utf8", "utf8_persian_ci", false, 1, PadNone},
{209, "utf8", "utf8_esperanto_ci", false, 1, PadNone},
{210, "utf8", "utf8_hungarian_ci", false, 1, PadNone},
{211, "utf8", "utf8_sinhala_ci", false, 1, PadNone},
{212, "utf8", "utf8_german2_ci", false, 1, PadNone},
{213, "utf8", "utf8_croatian_ci", false, 1, PadNone},
{214, "utf8", "utf8_unicode_520_ci", false, 1, PadNone},
{215, "utf8", "utf8_vietnamese_ci", false, 1, PadNone},
{223, "utf8", "utf8_general_mysql500_ci", false, 1, PadNone},
{224, "utf8mb4", "utf8mb4_unicode_ci", false, 8, PadSpace},
{225, "utf8mb4", "utf8mb4_icelandic_ci", false, 1, PadSpace},
{226, "utf8mb4", "utf8mb4_latvian_ci", false, 1, PadSpace},
{227, "utf8mb4", "utf8mb4_romanian_ci", false, 1, PadSpace},
{228, "utf8mb4", "utf8mb4_slovenian_ci", false, 1, PadSpace},
{229, "utf8mb4", "utf8mb4_polish_ci", false, 1, PadSpace},
{230, "utf8mb4", "utf8mb4_estonian_ci", false, 1, PadSpace},
{231, "utf8mb4", "utf8mb4_spanish_ci", false, 1, PadSpace},
{232, "utf8mb4", "utf8mb4_swedish_ci", false, 1, PadSpace},
{233, "utf8mb4", "utf8mb4_turkish_ci", false, 1, PadSpace},
{234, "utf8mb4", "utf8mb4_czech_ci", false, 1, PadSpace},
{235, "utf8mb4", "utf8mb4_danish_ci", false, 1, PadSpace},
{236, "utf8mb4", "utf8mb4_lithuanian_ci", false, 1, PadSpace},
{237, "utf8mb4", "utf8mb4_slovak_ci", false, 1, PadSpace},
{238, "utf8mb4", "utf8mb4_spanish2_ci", false, 1, PadSpace},
{239, "utf8mb4", "utf8mb4_roman_ci", false, 1, PadSpace},
{240, "utf8mb4", "utf8mb4_persian_ci", false, 1, PadSpace},
{241, "utf8mb4", "utf8mb4_esperanto_ci", false, 1, PadSpace},
{242, "utf8mb4", "utf8mb4_hungarian_ci", false, 1, PadSpace},
{243, "utf8mb4", "utf8mb4_sinhala_ci", false, 1, PadSpace},
{244, "utf8mb4", "utf8mb4_german2_ci", false, 1, PadSpace},
{245, "utf8mb4", "utf8mb4_croatian_ci", false, 1, PadSpace},
{246, "utf8mb4", "utf8mb4_unicode_520_ci", false, 1, PadSpace},
{247, "utf8mb4", "utf8mb4_vietnamese_ci", false, 1, PadSpace},
{248, "gb18030", "gb18030_chinese_ci", false, 1, PadSpace},
{249, "gb18030", "gb18030_bin", true, 1, PadSpace},
{250, "gb18030", "gb18030_unicode_520_ci", false, 1, PadSpace},
{255, "utf8mb4", "utf8mb4_0900_ai_ci", false, 0, PadNone},
{256, "utf8mb4", "utf8mb4_de_pb_0900_ai_ci", false, 1, PadNone},
{257, "utf8mb4", "utf8mb4_is_0900_ai_ci", false, 1, PadNone},
{258, "utf8mb4", "utf8mb4_lv_0900_ai_ci", false, 1, PadNone},
{259, "utf8mb4", "utf8mb4_ro_0900_ai_ci", false, 1, PadNone},
{260, "utf8mb4", "utf8mb4_sl_0900_ai_ci", false, 1, PadNone},
{261, "utf8mb4", "utf8mb4_pl_0900_ai_ci", false, 1, PadNone},
{262, "utf8mb4", "utf8mb4_et_0900_ai_ci", false, 1, PadNone},
{263, "utf8mb4", "utf8mb4_es_0900_ai_ci", false, 1, PadNone},
{264, "utf8mb4", "utf8mb4_sv_0900_ai_ci", false, 1, PadNone},
{265, "utf8mb4", "utf8mb4_tr_0900_ai_ci", false, 1, PadNone},
{266, "utf8mb4", "utf8mb4_cs_0900_ai_ci", false, 1, PadNone},
{267, "utf8mb4", "utf8mb4_da_0900_ai_ci", false, 1, PadNone},
{268, "utf8mb4", "utf8mb4_lt_0900_ai_ci", false, 1, PadNone},
{269, "utf8mb4", "utf8mb4_sk_0900_ai_ci", false, 1, PadNone},
{270, "utf8mb4", "utf8mb4_es_trad_0900_ai_ci", false, 1, PadNone},
{271, "utf8mb4", "utf8mb4_la_0900_ai_ci", false, 1, PadNone},
{273, "utf8mb4", "utf8mb4_eo_0900_ai_ci", false, 1, PadNone},
{274, "utf8mb4", "utf8mb4_hu_0900_ai_ci", false, 1, PadNone},
{275, "utf8mb4", "utf8mb4_hr_0900_ai_ci", false, 1, PadNone},
{277, "utf8mb4", "utf8mb4_vi_0900_ai_ci", false, 1, PadNone},
{278, "utf8mb4", "utf8mb4_0900_as_cs", false, 1, PadNone},
{279, "utf8mb4", "utf8mb4_de_pb_0900_as_cs", false, 1, PadNone},
{280, "utf8mb4", "utf8mb4_is_0900_as_cs", false, 1, PadNone},
{281, "utf8mb4", "utf8mb4_lv_0900_as_cs", false, 1, PadNone},
{282, "utf8mb4", "utf8mb4_ro_0900_as_cs", false, 1, PadNone},
{283, "utf8mb4", "utf8mb4_sl_0900_as_cs", false, 1, PadNone},
{284, "utf8mb4", "utf8mb4_pl_0900_as_cs", false, 1, PadNone},
{285, "utf8mb4", "utf8mb4_et_0900_as_cs", false, 1, PadNone},
{286, "utf8mb4", "utf8mb4_es_0900_as_cs", false, 1, PadNone},
{287, "utf8mb4", "utf8mb4_sv_0900_as_cs", false, 1, PadNone},
{288, "utf8mb4", "utf8mb4_tr_0900_as_cs", false, 1, PadNone},
{289, "utf8mb4", "utf8mb4_cs_0900_as_cs", false, 1, PadNone},
{290, "utf8mb4", "utf8mb4_da_0900_as_cs", false, 1, PadNone},
{291, "utf8mb4", "utf8mb4_lt_0900_as_cs", false, 1, PadNone},
{292, "utf8mb4", "utf8mb4_sk_0900_as_cs", false, 1, PadNone},
{293, "utf8mb4", "utf8mb4_es_trad_0900_as_cs", false, 1, PadNone},
{294, "utf8mb4", "utf8mb4_la_0900_as_cs", false, 1, PadNone},
{296, "utf8mb4", "utf8mb4_eo_0900_as_cs", false, 1, PadNone},
{297, "utf8mb4", "utf8mb4_hu_0900_as_cs", false, 1, PadNone},
{298, "utf8mb4", "utf8mb4_hr_0900_as_cs", false, 1, PadNone},
{300, "utf8mb4", "utf8mb4_vi_0900_as_cs", false, 1, PadNone},
{303, "utf8mb4", "utf8mb4_ja_0900_as_cs", false, 1, PadNone},
{304, "utf8mb4", "utf8mb4_ja_0900_as_cs_ks", false, 1, PadNone},
{305, "utf8mb4", "utf8mb4_0900_as_ci", false, 1, PadNone},
{306, "utf8mb4", "utf8mb4_ru_0900_ai_ci", false, 1, PadNone},
{307, "utf8mb4", "utf8mb4_ru_0900_as_cs", false, 1, PadNone},
{308, "utf8mb4", "utf8mb4_zh_0900_as_cs", false, 1, PadNone},
{309, "utf8mb4", "utf8mb4_0900_bin", false, 1, PadNone},
{2048, "utf8mb4", "utf8mb4_zh_pinyin_tidb_as_cs", false, 1, PadNone},
}
// AddCharset adds a new charset.
// Use only when adding a custom charset to the parser.
func AddCharset(c *Charset) {
CharacterSetInfos[c.Name] = c
}
// RemoveCharset remove a charset.
// Use only when remove a custom charset to the parser.
func RemoveCharset(c string) {
delete(CharacterSetInfos, c)
for i := range supportedCollations {
if supportedCollations[i].Name == c {
supportedCollations = slices.Delete(supportedCollations, i, i+1)
}
}
}
// AddCollation adds a new collation.
// Use only when adding a custom collation to the parser.
func AddCollation(c *Collation) {
collationsIDMap[c.ID] = c
collationsNameMap[c.Name] = c
if _, ok := supportedCollationNames[c.Name]; ok {
AddSupportedCollation(c)
}
if charset, ok := CharacterSetInfos[c.CharsetName]; ok {
charset.Collations[c.Name] = c
}
if charset, ok := charsets[c.CharsetName]; ok {
charset.Collations[c.Name] = c
}
}
// AddSupportedCollation adds a new collation into supportedCollations.
// Use only when adding a custom collation to the parser.
func AddSupportedCollation(c *Collation) {
supportedCollations = append(supportedCollations, c)
}
// init method always puts to the end of file.
func init() {
for _, c := range collations {
AddCollation(c)
}
}
// Copyright 2021 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package charset
import "bytes"
// Make sure all of them implement Encoding interface.
var (
_ Encoding = &encodingUTF8{}
_ Encoding = &encodingUTF8MB3Strict{}
_ Encoding = &encodingASCII{}
_ Encoding = &encodingLatin1{}
_ Encoding = &encodingBin{}
_ Encoding = &encodingGBK{}
_ Encoding = &encodingGB18030{}
)
// IsSupportedEncoding checks if the charset is fully supported.
func IsSupportedEncoding(charset string) bool {
_, ok := encodingMap[charset]
return ok
}
// FindEncodingTakeUTF8AsNoop finds the encoding according to the charset
// except that utf-8 is treated as no-operation encoding. This is used to
// reduce the overhead of utf-8 validation in some cases.
func FindEncodingTakeUTF8AsNoop(charset string) Encoding {
enc := FindEncoding(charset)
if enc.Tp() == EncodingTpUTF8 {
return EncodingBinImpl
}
return enc
}
// FindEncoding finds the encoding according to charset.
func FindEncoding(charset string) Encoding {
if len(charset) == 0 {
return EncodingBinImpl
}
if e, exist := encodingMap[charset]; exist {
return e
}
return EncodingBinImpl
}
var encodingMap = map[string]Encoding{
CharsetUTF8MB4: EncodingUTF8Impl,
CharsetUTF8: EncodingUTF8Impl,
CharsetGBK: EncodingGBKImpl,
CharsetLatin1: EncodingLatin1Impl,
CharsetBin: EncodingBinImpl,
CharsetASCII: EncodingASCIIImpl,
CharsetGB18030: EncodingGB18030Impl,
}
// Encoding provide encode/decode functions for a string with a specific charset.
type Encoding interface {
// Name is the name of the encoding.
Name() string
// Tp is the type of the encoding.
Tp() EncodingTp
// Peek returns the next char.
Peek(src []byte) []byte
// MbLen returns multiple byte length, if the next character is single byte, return 0.
MbLen(string) int
// IsValid checks whether the utf-8 bytes can be convert to valid string in current encoding.
IsValid(src []byte) bool
// Foreach iterates the characters in current encoding.
Foreach(src []byte, op Op, fn func(from, to []byte, ok bool) bool)
// Transform map the bytes in src to dest according to Op.
// **the caller should initialize the dest if it wants to avoid memory alloc every time,
// or else it will always make a new one**
//
// **the returned array may be the alias of `src`, edit the returned array on your own risk**
Transform(dest *bytes.Buffer, src []byte, op Op) ([]byte, error)
// ToUpper change a string to uppercase.
ToUpper(src string) string
// ToLower change a string to lowercase.
ToLower(src string) string
}
// EncodingTp is the type of the encoding.
type EncodingTp int8
//revive:disable
const (
EncodingTpNone EncodingTp = iota
EncodingTpUTF8
EncodingTpUTF8MB3Strict
EncodingTpASCII
EncodingTpLatin1
EncodingTpBin
EncodingTpGBK
EncodingTpGB18030
)
//revive:enable
// Op is used by Encoding.Transform.
type Op int16
const (
opFromUTF8 Op = 1 << iota
opToUTF8
opTruncateTrim
opTruncateReplace
opCollectFrom
opCollectTo
opSkipError
)
//revive:disable
const (
// OpReplaceNoErr is used to replace invalid bytes with '?'.
OpReplaceNoErr = opFromUTF8 | opTruncateReplace | opCollectFrom | opSkipError
OpReplace = opFromUTF8 | opTruncateReplace | opCollectFrom
OpEncode = opFromUTF8 | opTruncateTrim | opCollectTo
OpEncodeNoErr = OpEncode | opSkipError
OpEncodeReplace = opFromUTF8 | opTruncateReplace | opCollectTo
OpDecode = opToUTF8 | opTruncateTrim | opCollectTo
OpDecodeNoErr = OpDecode | opSkipError
OpDecodeReplace = opToUTF8 | opTruncateReplace | opCollectTo
)
//revive:enable
// CountValidBytes counts the first valid bytes in src that
// can be encoded to the current encoding.
func CountValidBytes(e Encoding, src []byte) int {
nSrc := 0
e.Foreach(src, opFromUTF8, func(from, _ []byte, ok bool) bool {
if ok {
nSrc += len(from)
}
return ok
})
return nSrc
}
// CountValidBytesDecode counts the first valid bytes in src that
// can be decoded to utf-8.
func CountValidBytesDecode(e Encoding, src []byte) int {
nSrc := 0
e.Foreach(src, opToUTF8, func(from, _ []byte, ok bool) bool {
if ok {
nSrc += len(from)
}
return ok
})
return nSrc
}
// Copyright 2021 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package charset
import (
"bytes"
go_unicode "unicode"
"golang.org/x/text/encoding"
)
// EncodingASCIIImpl is the instance of encodingASCII
var EncodingASCIIImpl = &encodingASCII{encodingBase{enc: encoding.Nop}}
func init() {
EncodingASCIIImpl.self = EncodingASCIIImpl
}
// encodingASCII is the ASCII encoding.
type encodingASCII struct {
encodingBase
}
// Name implements Encoding interface.
func (*encodingASCII) Name() string {
return CharsetASCII
}
// Tp implements Encoding interface.
func (*encodingASCII) Tp() EncodingTp {
return EncodingTpASCII
}
// Peek implements Encoding interface.
func (*encodingASCII) Peek(src []byte) []byte {
if len(src) == 0 {
return src
}
return src[:1]
}
// IsValid implements Encoding interface.
func (*encodingASCII) IsValid(src []byte) bool {
srcLen := len(src)
for i := range srcLen {
if src[i] > go_unicode.MaxASCII {
return false
}
}
return true
}
// Transform implements Encoding interface.
func (e *encodingASCII) Transform(dest *bytes.Buffer, src []byte, op Op) ([]byte, error) {
if e.IsValid(src) {
return src, nil
}
return e.encodingBase.Transform(dest, src, op)
}
// Foreach implements Encoding interface.
func (*encodingASCII) Foreach(src []byte, _ Op, fn func(from, to []byte, ok bool) bool) {
for i, w := 0, 0; i < len(src); i += w {
w = 1
ok := true
if src[i] > go_unicode.MaxASCII {
w = len(EncodingUTF8Impl.Peek(src[i:]))
ok = false
}
if !fn(src[i:i+w], src[i:i+w], ok) {
return
}
}
}
// Copyright 2021 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package charset
import (
"bytes"
"fmt"
"strings"
"unsafe"
"github.com/pingcap/tidb/pkg/parser/mysql"
"github.com/pingcap/tidb/pkg/parser/terror"
"golang.org/x/text/encoding"
"golang.org/x/text/transform"
)
// ErrInvalidCharacterString returns when the string is invalid in the specific charset.
var ErrInvalidCharacterString = terror.ClassParser.NewStd(mysql.ErrInvalidCharacterString)
// encodingBase defines some generic functions.
type encodingBase struct {
enc encoding.Encoding
self Encoding
}
func (encodingBase) MbLen(_ string) int {
return 0
}
func (encodingBase) ToUpper(src string) string {
return strings.ToUpper(src)
}
func (encodingBase) ToLower(src string) string {
return strings.ToLower(src)
}
func (b encodingBase) IsValid(src []byte) bool {
isValid := true
b.self.Foreach(src, opFromUTF8, func(_, _ []byte, ok bool) bool {
isValid = ok
return ok
})
return isValid
}
func (b encodingBase) Transform(dest *bytes.Buffer, src []byte, op Op) (result []byte, err error) {
if dest == nil {
dest = &bytes.Buffer{}
dest.Grow(len(src))
}
dest.Reset()
b.self.Foreach(src, op, func(from, to []byte, ok bool) bool {
if !ok {
if err == nil && (op&opSkipError == 0) {
err = generateEncodingErr(b.self.Name(), from)
}
if op&opTruncateTrim != 0 {
return false
}
if op&opTruncateReplace != 0 {
dest.WriteByte('?')
return true
}
}
if op&opCollectFrom != 0 {
dest.Write(from)
} else if op&opCollectTo != 0 {
dest.Write(to)
}
return true
})
return dest.Bytes(), err
}
func (b encodingBase) Foreach(src []byte, op Op, fn func(from, to []byte, ok bool) bool) {
var (
tfm transform.Transformer
runeErrorChecker runeErrorMaybeInputTransformer
ok bool
)
var peek func([]byte) []byte
if op&opFromUTF8 != 0 {
tfm = b.enc.NewEncoder()
peek = EncodingUTF8Impl.Peek
} else {
dec := b.enc.NewDecoder()
tfm = dec
runeErrorChecker, ok = dec.Transformer.(runeErrorMaybeInputTransformer)
peek = b.self.Peek
}
var buf [4]byte
for i, w := 0, 0; i < len(src); i += w {
w = len(peek(src[i:]))
nDst, _, err := tfm.Transform(buf[:], src[i:i+w], false)
meetErr := err != nil || (op&opToUTF8 != 0 &&
beginWithReplacementChar(buf[:nDst]) &&
(!ok || !runeErrorChecker.runeErrorIsLastInput()))
if !fn(src[i:i+w], buf[:nDst], !meetErr) {
return
}
}
}
// replacementBytes are bytes for the replacement rune 0xfffd.
var replacementBytes = []byte{0xEF, 0xBF, 0xBD}
// beginWithReplacementChar check if dst has the prefix '0xEFBFBD'.
func beginWithReplacementChar(dst []byte) bool {
return bytes.HasPrefix(dst, replacementBytes)
}
// generateEncodingErr generates an invalid string in charset error.
func generateEncodingErr(name string, invalidBytes []byte) error {
arg := fmt.Sprintf("%X", invalidBytes)
return ErrInvalidCharacterString.FastGenByArgs(name, arg)
}
// HackSlice converts string to slice without copy.
// Use at your own risk.
func HackSlice(s string) (b []byte) {
if len(s) == 0 {
return []byte{}
}
return unsafe.Slice(unsafe.StringData(s), len(s))
}
// HackString converts slice to string without copy.
// Use it at your own risk.
func HackString(b []byte) (s string) {
if len(b) == 0 {
return ""
}
return unsafe.String(unsafe.SliceData(b), len(b))
}
// Copyright 2021 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package charset
import (
"bytes"
"golang.org/x/text/encoding"
)
// EncodingBinImpl is the instance of encodingBin.
var EncodingBinImpl = &encodingBin{encodingBase{enc: encoding.Nop}}
func init() {
EncodingBinImpl.self = EncodingBinImpl
}
// encodingBin is the binary encoding.
type encodingBin struct {
encodingBase
}
// Name implements Encoding interface.
func (*encodingBin) Name() string {
return CharsetBin
}
// Tp implements Encoding interface.
func (*encodingBin) Tp() EncodingTp {
return EncodingTpBin
}
// Peek implements Encoding interface.
func (*encodingBin) Peek(src []byte) []byte {
if len(src) == 0 {
return src
}
return src[:1]
}
// IsValid implements Encoding interface.
func (*encodingBin) IsValid(_ []byte) bool {
return true
}
// Foreach implements Encoding interface.
func (*encodingBin) Foreach(src []byte, _ Op, fn func(from, to []byte, ok bool) bool) {
for i := range src {
if !fn(src[i:i+1], src[i:i+1], true) {
return
}
}
}
func (*encodingBin) Transform(_ *bytes.Buffer, src []byte, _ Op) ([]byte, error) {
return src, nil
}
// Copyright 2023-2024 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package charset
import (
"encoding/binary"
"strings"
"unicode/utf8"
"golang.org/x/text/encoding"
"golang.org/x/text/encoding/simplifiedchinese"
"golang.org/x/text/transform"
)
// Current implementation meets the requirement of GB18030-2022
// EncodingGB18030Impl is the instance of encodingGB18030
var EncodingGB18030Impl = &encodingGB18030{encodingGBK{encodingBase{enc: customGB18030{}}}}
func init() {
EncodingGB18030Impl.self = EncodingGB18030Impl
}
// encodingGB18030 is GB18030 encoding.
type encodingGB18030 struct {
encodingGBK
}
// Name implements Encoding interface.
func (*encodingGB18030) Name() string {
return CharsetGB18030
}
// Tp implements Encoding interface.
func (*encodingGB18030) Tp() EncodingTp {
return EncodingTpGB18030
}
// Peek implements Encoding interface.
func (*encodingGB18030) Peek(src []byte) []byte {
return peek(src)
}
func peek(src []byte) []byte {
length := len(src)
if length == 0 {
return src
}
// skip the first byte when encountering invalid byte(s)
err := src[:1]
switch {
case src[0] == 0x80 || src[0] == 0xFF:
return err
case src[0] <= 0x7F:
return src[:1]
case 0x81 <= src[0] && src[0] <= 0xFE:
if length < 2 {
return err
}
if 0x40 <= src[1] && src[1] < 0x7F || 0x7F < src[1] && src[1] <= 0xFE {
return src[:2]
}
if length < 4 {
return err
}
if 0x30 <= src[1] && src[1] <= 0x39 && 0x81 <= src[2] && src[2] <= 0xfe && 0x30 <= src[3] && src[3] <= 0x39 {
return src[:4]
}
return err
}
return err
}
func (*encodingGB18030) MbLen(bs string) int {
if len(bs) < 2 {
return 0
}
if 0x81 <= bs[0] && bs[0] <= 0xfe {
if (0x40 <= bs[1] && bs[1] <= 0x7e) || (0x80 <= bs[1] && bs[1] <= 0xfe) {
return 2
}
if 0x30 <= bs[1] && bs[1] <= 0x39 && 0x81 <= bs[2] && bs[2] <= 0xfe && 0x30 <= bs[3] && bs[3] <= 0x39 {
return 4
}
}
return 0
}
// ToUpper implements Encoding interface.
func (*encodingGB18030) ToUpper(d string) string {
return strings.ToUpperSpecial(GB18030Case, d)
}
// ToLower implements Encoding interface.
func (*encodingGB18030) ToLower(d string) string {
return strings.ToLowerSpecial(GB18030Case, d)
}
// customGB18030 is a simplifiedchinese.GB18030 wrapper.
type customGB18030 struct{}
// NewCustomGB18030Encoder return a custom GB18030 encoder.
func NewCustomGB18030Encoder() *encoding.Encoder {
return customGB18030{}.NewEncoder()
}
// NewCustomGB18030Decoder return a custom GB18030 decoder.
func NewCustomGB18030Decoder() *encoding.Decoder {
return customGB18030{}.NewDecoder()
}
type runeErrorMaybeInputTransformer interface {
runeErrorIsLastInput() bool
}
// NewDecoder returns simplifiedchinese.GB18030.NewDecoder().
func (customGB18030) NewDecoder() *encoding.Decoder {
return &encoding.Decoder{
Transformer: &customGB18030Decoder{
gb18030Decoder: simplifiedchinese.GB18030.NewDecoder(),
},
}
}
// NewEncoder returns simplifiedchinese.gb18030.
func (customGB18030) NewEncoder() *encoding.Encoder {
return &encoding.Encoder{
Transformer: customGB18030Encoder{
gb18030Encoder: simplifiedchinese.GB18030.NewEncoder(),
},
}
}
type customGB18030Decoder struct {
gb18030Decoder *encoding.Decoder
runeErrorIsLastInputFlag bool
}
func (c *customGB18030Decoder) runeErrorIsLastInput() bool {
return c.runeErrorIsLastInputFlag
}
var runeErrorEncodedByGB18030 = convertBytesToUint32([]byte{0x84, 0x31, 0xA4, 0x37})
// Transform special treatment for 0x80,
func (c *customGB18030Decoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
c.runeErrorIsLastInputFlag = false
if len(src) == 0 {
return 0, 0, nil
}
for next := 0; nSrc < len(src); nSrc += next {
if nDst >= len(dst) {
return nDst, nSrc, transform.ErrShortDst
}
next = len(peek(src[nSrc:]))
if nSrc+next > len(src) {
return nDst, nSrc, transform.ErrShortSrc
}
if src[nSrc] == 0x80 {
nDst += utf8.EncodeRune(dst[nDst:], utf8.RuneError)
continue
}
u32 := convertBytesToUint32(src[nSrc : nSrc+next])
if r, ok := gb18030ToUnicode[u32]; ok {
nDst += utf8.EncodeRune(dst[nDst:], r)
continue
}
if u32 == runeErrorEncodedByGB18030 {
nDst += utf8.EncodeRune(dst[nDst:], utf8.RuneError)
c.runeErrorIsLastInputFlag = true
continue
}
d, _, e := c.gb18030Decoder.Transform(dst[nDst:], src[nSrc:nSrc+next], atEOF)
if e != nil {
return nDst, nSrc, e
}
nDst += d
}
return
}
// Reset is same as simplifiedchinese.GB18030.Reset().
func (c *customGB18030Decoder) Reset() {
c.gb18030Decoder.Reset()
c.runeErrorIsLastInputFlag = false
}
type customGB18030Encoder struct {
gb18030Encoder *encoding.Encoder
}
// Transform special treatment for `€`,
func (c customGB18030Encoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
if len(src) == 0 {
return 0, 0, nil
}
for nSrc < len(src) {
if nDst >= len(dst) {
return nDst, nSrc, transform.ErrShortDst
}
r, size := utf8.DecodeRune(src[nSrc:])
if v, ok := unicodeToGB18030[r]; ok {
bytes := convertUint32ToBytes(v)
if nDst+len(bytes) > len(dst) {
return nDst, nSrc, transform.ErrShortDst
}
copy(dst[nDst:], bytes)
nDst += len(bytes)
nSrc += size
} else {
d, s, e := c.gb18030Encoder.Transform(dst[nDst:], src[nSrc:nSrc+size], atEOF)
if e != nil {
return nDst, nSrc, e
}
nDst += d
nSrc += s
}
}
return
}
// Reset is same as simplifiedchinese.gb18030.
func (c customGB18030Encoder) Reset() {
c.gb18030Encoder.Reset()
}
func convertBytesToUint32(b []byte) uint32 {
switch len(b) {
case 4:
return (uint32(b[0]) << 24) | (uint32(b[1]) << 16) | (uint32(b[2]) << 8) | uint32(b[3])
case 3:
return (uint32(b[0]) << 16) | (uint32(b[1]) << 8) | uint32(b[2])
case 2:
return (uint32(b[0]) << 8) | uint32(b[1])
case 1:
return uint32(b[0])
}
return 0
}
func convertUint32ToBytes(v uint32) []byte {
var b []byte
switch {
case v&0xff000000 > 0:
b = make([]byte, 4)
binary.BigEndian.PutUint32(b, v)
case v&0xff0000 > 0:
b = make([]byte, 3)
b[0] = byte(v >> 16)
b[1] = byte(v >> 8)
b[2] = byte(v)
case v&0xff00 > 0:
b = make([]byte, 2)
binary.BigEndian.PutUint16(b, uint16(v))
default:
b = make([]byte, 1)
b[0] = byte(v)
}
return b
}
// Copyright 2023-2024 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package charset
import "unicode"
func init() {
gb18030EncodingList := []struct {
unicode rune
gb18030 uint32
}{
{'\u1e3f', 0xA8BC}, {'\u20ac', 0xA2E3}, {'\u9fb4', 0xFE59},
{'\u9fb5', 0xFE61}, {'\u9fb6', 0xFE66}, {'\u9fb7', 0xFE67},
{'\u9fb8', 0xFE6D}, {'\u9fb9', 0xFE7E}, {'\u9fba', 0xFE90},
{'\u9fbb', 0xFEA0}, {'\ue000', 0xAAA1}, {'\ue001', 0xAAA2},
{'\ue002', 0xAAA3}, {'\ue003', 0xAAA4}, {'\ue004', 0xAAA5},
{'\ue005', 0xAAA6}, {'\ue006', 0xAAA7}, {'\ue007', 0xAAA8},
{'\ue008', 0xAAA9}, {'\ue009', 0xAAAA}, {'\ue00a', 0xAAAB},
{'\ue00b', 0xAAAC}, {'\ue00c', 0xAAAD}, {'\ue00d', 0xAAAE},
{'\ue00e', 0xAAAF}, {'\ue00f', 0xAAB0}, {'\ue010', 0xAAB1},
{'\ue011', 0xAAB2}, {'\ue012', 0xAAB3}, {'\ue013', 0xAAB4},
{'\ue014', 0xAAB5}, {'\ue015', 0xAAB6}, {'\ue016', 0xAAB7},
{'\ue017', 0xAAB8}, {'\ue018', 0xAAB9}, {'\ue019', 0xAABA},
{'\ue01a', 0xAABB}, {'\ue01b', 0xAABC}, {'\ue01c', 0xAABD},
{'\ue01d', 0xAABE}, {'\ue01e', 0xAABF}, {'\ue01f', 0xAAC0},
{'\ue020', 0xAAC1}, {'\ue021', 0xAAC2}, {'\ue022', 0xAAC3},
{'\ue023', 0xAAC4}, {'\ue024', 0xAAC5}, {'\ue025', 0xAAC6},
{'\ue026', 0xAAC7}, {'\ue027', 0xAAC8}, {'\ue028', 0xAAC9},
{'\ue029', 0xAACA}, {'\ue02a', 0xAACB}, {'\ue02b', 0xAACC},
{'\ue02c', 0xAACD}, {'\ue02d', 0xAACE}, {'\ue02e', 0xAACF},
{'\ue02f', 0xAAD0}, {'\ue030', 0xAAD1}, {'\ue031', 0xAAD2},
{'\ue032', 0xAAD3}, {'\ue033', 0xAAD4}, {'\ue034', 0xAAD5},
{'\ue035', 0xAAD6}, {'\ue036', 0xAAD7}, {'\ue037', 0xAAD8},
{'\ue038', 0xAAD9}, {'\ue039', 0xAADA}, {'\ue03a', 0xAADB},
{'\ue03b', 0xAADC}, {'\ue03c', 0xAADD}, {'\ue03d', 0xAADE},
{'\ue03e', 0xAADF}, {'\ue03f', 0xAAE0}, {'\ue040', 0xAAE1},
{'\ue041', 0xAAE2}, {'\ue042', 0xAAE3}, {'\ue043', 0xAAE4},
{'\ue044', 0xAAE5}, {'\ue045', 0xAAE6}, {'\ue046', 0xAAE7},
{'\ue047', 0xAAE8}, {'\ue048', 0xAAE9}, {'\ue049', 0xAAEA},
{'\ue04a', 0xAAEB}, {'\ue04b', 0xAAEC}, {'\ue04c', 0xAAED},
{'\ue04d', 0xAAEE}, {'\ue04e', 0xAAEF}, {'\ue04f', 0xAAF0},
{'\ue050', 0xAAF1}, {'\ue051', 0xAAF2}, {'\ue052', 0xAAF3},
{'\ue053', 0xAAF4}, {'\ue054', 0xAAF5}, {'\ue055', 0xAAF6},
{'\ue056', 0xAAF7}, {'\ue057', 0xAAF8}, {'\ue058', 0xAAF9},
{'\ue059', 0xAAFA}, {'\ue05a', 0xAAFB}, {'\ue05b', 0xAAFC},
{'\ue05c', 0xAAFD}, {'\ue05d', 0xAAFE}, {'\ue05e', 0xABA1},
{'\ue05f', 0xABA2}, {'\ue060', 0xABA3}, {'\ue061', 0xABA4},
{'\ue062', 0xABA5}, {'\ue063', 0xABA6}, {'\ue064', 0xABA7},
{'\ue065', 0xABA8}, {'\ue066', 0xABA9}, {'\ue067', 0xABAA},
{'\ue068', 0xABAB}, {'\ue069', 0xABAC}, {'\ue06a', 0xABAD},
{'\ue06b', 0xABAE}, {'\ue06c', 0xABAF}, {'\ue06d', 0xABB0},
{'\ue06e', 0xABB1}, {'\ue06f', 0xABB2}, {'\ue070', 0xABB3},
{'\ue071', 0xABB4}, {'\ue072', 0xABB5}, {'\ue073', 0xABB6},
{'\ue074', 0xABB7}, {'\ue075', 0xABB8}, {'\ue076', 0xABB9},
{'\ue077', 0xABBA}, {'\ue078', 0xABBB}, {'\ue079', 0xABBC},
{'\ue07a', 0xABBD}, {'\ue07b', 0xABBE}, {'\ue07c', 0xABBF},
{'\ue07d', 0xABC0}, {'\ue07e', 0xABC1}, {'\ue07f', 0xABC2},
{'\ue080', 0xABC3}, {'\ue081', 0xABC4}, {'\ue082', 0xABC5},
{'\ue083', 0xABC6}, {'\ue084', 0xABC7}, {'\ue085', 0xABC8},
{'\ue086', 0xABC9}, {'\ue087', 0xABCA}, {'\ue088', 0xABCB},
{'\ue089', 0xABCC}, {'\ue08a', 0xABCD}, {'\ue08b', 0xABCE},
{'\ue08c', 0xABCF}, {'\ue08d', 0xABD0}, {'\ue08e', 0xABD1},
{'\ue08f', 0xABD2}, {'\ue090', 0xABD3}, {'\ue091', 0xABD4},
{'\ue092', 0xABD5}, {'\ue093', 0xABD6}, {'\ue094', 0xABD7},
{'\ue095', 0xABD8}, {'\ue096', 0xABD9}, {'\ue097', 0xABDA},
{'\ue098', 0xABDB}, {'\ue099', 0xABDC}, {'\ue09a', 0xABDD},
{'\ue09b', 0xABDE}, {'\ue09c', 0xABDF}, {'\ue09d', 0xABE0},
{'\ue09e', 0xABE1}, {'\ue09f', 0xABE2}, {'\ue0a0', 0xABE3},
{'\ue0a1', 0xABE4}, {'\ue0a2', 0xABE5}, {'\ue0a3', 0xABE6},
{'\ue0a4', 0xABE7}, {'\ue0a5', 0xABE8}, {'\ue0a6', 0xABE9},
{'\ue0a7', 0xABEA}, {'\ue0a8', 0xABEB}, {'\ue0a9', 0xABEC},
{'\ue0aa', 0xABED}, {'\ue0ab', 0xABEE}, {'\ue0ac', 0xABEF},
{'\ue0ad', 0xABF0}, {'\ue0ae', 0xABF1}, {'\ue0af', 0xABF2},
{'\ue0b0', 0xABF3}, {'\ue0b1', 0xABF4}, {'\ue0b2', 0xABF5},
{'\ue0b3', 0xABF6}, {'\ue0b4', 0xABF7}, {'\ue0b5', 0xABF8},
{'\ue0b6', 0xABF9}, {'\ue0b7', 0xABFA}, {'\ue0b8', 0xABFB},
{'\ue0b9', 0xABFC}, {'\ue0ba', 0xABFD}, {'\ue0bb', 0xABFE},
{'\ue0bc', 0xACA1}, {'\ue0bd', 0xACA2}, {'\ue0be', 0xACA3},
{'\ue0bf', 0xACA4}, {'\ue0c0', 0xACA5}, {'\ue0c1', 0xACA6},
{'\ue0c2', 0xACA7}, {'\ue0c3', 0xACA8}, {'\ue0c4', 0xACA9},
{'\ue0c5', 0xACAA}, {'\ue0c6', 0xACAB}, {'\ue0c7', 0xACAC},
{'\ue0c8', 0xACAD}, {'\ue0c9', 0xACAE}, {'\ue0ca', 0xACAF},
{'\ue0cb', 0xACB0}, {'\ue0cc', 0xACB1}, {'\ue0cd', 0xACB2},
{'\ue0ce', 0xACB3}, {'\ue0cf', 0xACB4}, {'\ue0d0', 0xACB5},
{'\ue0d1', 0xACB6}, {'\ue0d2', 0xACB7}, {'\ue0d3', 0xACB8},
{'\ue0d4', 0xACB9}, {'\ue0d5', 0xACBA}, {'\ue0d6', 0xACBB},
{'\ue0d7', 0xACBC}, {'\ue0d8', 0xACBD}, {'\ue0d9', 0xACBE},
{'\ue0da', 0xACBF}, {'\ue0db', 0xACC0}, {'\ue0dc', 0xACC1},
{'\ue0dd', 0xACC2}, {'\ue0de', 0xACC3}, {'\ue0df', 0xACC4},
{'\ue0e0', 0xACC5}, {'\ue0e1', 0xACC6}, {'\ue0e2', 0xACC7},
{'\ue0e3', 0xACC8}, {'\ue0e4', 0xACC9}, {'\ue0e5', 0xACCA},
{'\ue0e6', 0xACCB}, {'\ue0e7', 0xACCC}, {'\ue0e8', 0xACCD},
{'\ue0e9', 0xACCE}, {'\ue0ea', 0xACCF}, {'\ue0eb', 0xACD0},
{'\ue0ec', 0xACD1}, {'\ue0ed', 0xACD2}, {'\ue0ee', 0xACD3},
{'\ue0ef', 0xACD4}, {'\ue0f0', 0xACD5}, {'\ue0f1', 0xACD6},
{'\ue0f2', 0xACD7}, {'\ue0f3', 0xACD8}, {'\ue0f4', 0xACD9},
{'\ue0f5', 0xACDA}, {'\ue0f6', 0xACDB}, {'\ue0f7', 0xACDC},
{'\ue0f8', 0xACDD}, {'\ue0f9', 0xACDE}, {'\ue0fa', 0xACDF},
{'\ue0fb', 0xACE0}, {'\ue0fc', 0xACE1}, {'\ue0fd', 0xACE2},
{'\ue0fe', 0xACE3}, {'\ue0ff', 0xACE4}, {'\ue100', 0xACE5},
{'\ue101', 0xACE6}, {'\ue102', 0xACE7}, {'\ue103', 0xACE8},
{'\ue104', 0xACE9}, {'\ue105', 0xACEA}, {'\ue106', 0xACEB},
{'\ue107', 0xACEC}, {'\ue108', 0xACED}, {'\ue109', 0xACEE},
{'\ue10a', 0xACEF}, {'\ue10b', 0xACF0}, {'\ue10c', 0xACF1},
{'\ue10d', 0xACF2}, {'\ue10e', 0xACF3}, {'\ue10f', 0xACF4},
{'\ue110', 0xACF5}, {'\ue111', 0xACF6}, {'\ue112', 0xACF7},
{'\ue113', 0xACF8}, {'\ue114', 0xACF9}, {'\ue115', 0xACFA},
{'\ue116', 0xACFB}, {'\ue117', 0xACFC}, {'\ue118', 0xACFD},
{'\ue119', 0xACFE}, {'\ue11a', 0xADA1}, {'\ue11b', 0xADA2},
{'\ue11c', 0xADA3}, {'\ue11d', 0xADA4}, {'\ue11e', 0xADA5},
{'\ue11f', 0xADA6}, {'\ue120', 0xADA7}, {'\ue121', 0xADA8},
{'\ue122', 0xADA9}, {'\ue123', 0xADAA}, {'\ue124', 0xADAB},
{'\ue125', 0xADAC}, {'\ue126', 0xADAD}, {'\ue127', 0xADAE},
{'\ue128', 0xADAF}, {'\ue129', 0xADB0}, {'\ue12a', 0xADB1},
{'\ue12b', 0xADB2}, {'\ue12c', 0xADB3}, {'\ue12d', 0xADB4},
{'\ue12e', 0xADB5}, {'\ue12f', 0xADB6}, {'\ue130', 0xADB7},
{'\ue131', 0xADB8}, {'\ue132', 0xADB9}, {'\ue133', 0xADBA},
{'\ue134', 0xADBB}, {'\ue135', 0xADBC}, {'\ue136', 0xADBD},
{'\ue137', 0xADBE}, {'\ue138', 0xADBF}, {'\ue139', 0xADC0},
{'\ue13a', 0xADC1}, {'\ue13b', 0xADC2}, {'\ue13c', 0xADC3},
{'\ue13d', 0xADC4}, {'\ue13e', 0xADC5}, {'\ue13f', 0xADC6},
{'\ue140', 0xADC7}, {'\ue141', 0xADC8}, {'\ue142', 0xADC9},
{'\ue143', 0xADCA}, {'\ue144', 0xADCB}, {'\ue145', 0xADCC},
{'\ue146', 0xADCD}, {'\ue147', 0xADCE}, {'\ue148', 0xADCF},
{'\ue149', 0xADD0}, {'\ue14a', 0xADD1}, {'\ue14b', 0xADD2},
{'\ue14c', 0xADD3}, {'\ue14d', 0xADD4}, {'\ue14e', 0xADD5},
{'\ue14f', 0xADD6}, {'\ue150', 0xADD7}, {'\ue151', 0xADD8},
{'\ue152', 0xADD9}, {'\ue153', 0xADDA}, {'\ue154', 0xADDB},
{'\ue155', 0xADDC}, {'\ue156', 0xADDD}, {'\ue157', 0xADDE},
{'\ue158', 0xADDF}, {'\ue159', 0xADE0}, {'\ue15a', 0xADE1},
{'\ue15b', 0xADE2}, {'\ue15c', 0xADE3}, {'\ue15d', 0xADE4},
{'\ue15e', 0xADE5}, {'\ue15f', 0xADE6}, {'\ue160', 0xADE7},
{'\ue161', 0xADE8}, {'\ue162', 0xADE9}, {'\ue163', 0xADEA},
{'\ue164', 0xADEB}, {'\ue165', 0xADEC}, {'\ue166', 0xADED},
{'\ue167', 0xADEE}, {'\ue168', 0xADEF}, {'\ue169', 0xADF0},
{'\ue16a', 0xADF1}, {'\ue16b', 0xADF2}, {'\ue16c', 0xADF3},
{'\ue16d', 0xADF4}, {'\ue16e', 0xADF5}, {'\ue16f', 0xADF6},
{'\ue170', 0xADF7}, {'\ue171', 0xADF8}, {'\ue172', 0xADF9},
{'\ue173', 0xADFA}, {'\ue174', 0xADFB}, {'\ue175', 0xADFC},
{'\ue176', 0xADFD}, {'\ue177', 0xADFE}, {'\ue178', 0xAEA1},
{'\ue179', 0xAEA2}, {'\ue17a', 0xAEA3}, {'\ue17b', 0xAEA4},
{'\ue17c', 0xAEA5}, {'\ue17d', 0xAEA6}, {'\ue17e', 0xAEA7},
{'\ue17f', 0xAEA8}, {'\ue180', 0xAEA9}, {'\ue181', 0xAEAA},
{'\ue182', 0xAEAB}, {'\ue183', 0xAEAC}, {'\ue184', 0xAEAD},
{'\ue185', 0xAEAE}, {'\ue186', 0xAEAF}, {'\ue187', 0xAEB0},
{'\ue188', 0xAEB1}, {'\ue189', 0xAEB2}, {'\ue18a', 0xAEB3},
{'\ue18b', 0xAEB4}, {'\ue18c', 0xAEB5}, {'\ue18d', 0xAEB6},
{'\ue18e', 0xAEB7}, {'\ue18f', 0xAEB8}, {'\ue190', 0xAEB9},
{'\ue191', 0xAEBA}, {'\ue192', 0xAEBB}, {'\ue193', 0xAEBC},
{'\ue194', 0xAEBD}, {'\ue195', 0xAEBE}, {'\ue196', 0xAEBF},
{'\ue197', 0xAEC0}, {'\ue198', 0xAEC1}, {'\ue199', 0xAEC2},
{'\ue19a', 0xAEC3}, {'\ue19b', 0xAEC4}, {'\ue19c', 0xAEC5},
{'\ue19d', 0xAEC6}, {'\ue19e', 0xAEC7}, {'\ue19f', 0xAEC8},
{'\ue1a0', 0xAEC9}, {'\ue1a1', 0xAECA}, {'\ue1a2', 0xAECB},
{'\ue1a3', 0xAECC}, {'\ue1a4', 0xAECD}, {'\ue1a5', 0xAECE},
{'\ue1a6', 0xAECF}, {'\ue1a7', 0xAED0}, {'\ue1a8', 0xAED1},
{'\ue1a9', 0xAED2}, {'\ue1aa', 0xAED3}, {'\ue1ab', 0xAED4},
{'\ue1ac', 0xAED5}, {'\ue1ad', 0xAED6}, {'\ue1ae', 0xAED7},
{'\ue1af', 0xAED8}, {'\ue1b0', 0xAED9}, {'\ue1b1', 0xAEDA},
{'\ue1b2', 0xAEDB}, {'\ue1b3', 0xAEDC}, {'\ue1b4', 0xAEDD},
{'\ue1b5', 0xAEDE}, {'\ue1b6', 0xAEDF}, {'\ue1b7', 0xAEE0},
{'\ue1b8', 0xAEE1}, {'\ue1b9', 0xAEE2}, {'\ue1ba', 0xAEE3},
{'\ue1bb', 0xAEE4}, {'\ue1bc', 0xAEE5}, {'\ue1bd', 0xAEE6},
{'\ue1be', 0xAEE7}, {'\ue1bf', 0xAEE8}, {'\ue1c0', 0xAEE9},
{'\ue1c1', 0xAEEA}, {'\ue1c2', 0xAEEB}, {'\ue1c3', 0xAEEC},
{'\ue1c4', 0xAEED}, {'\ue1c5', 0xAEEE}, {'\ue1c6', 0xAEEF},
{'\ue1c7', 0xAEF0}, {'\ue1c8', 0xAEF1}, {'\ue1c9', 0xAEF2},
{'\ue1ca', 0xAEF3}, {'\ue1cb', 0xAEF4}, {'\ue1cc', 0xAEF5},
{'\ue1cd', 0xAEF6}, {'\ue1ce', 0xAEF7}, {'\ue1cf', 0xAEF8},
{'\ue1d0', 0xAEF9}, {'\ue1d1', 0xAEFA}, {'\ue1d2', 0xAEFB},
{'\ue1d3', 0xAEFC}, {'\ue1d4', 0xAEFD}, {'\ue1d5', 0xAEFE},
{'\ue1d6', 0xAFA1}, {'\ue1d7', 0xAFA2}, {'\ue1d8', 0xAFA3},
{'\ue1d9', 0xAFA4}, {'\ue1da', 0xAFA5}, {'\ue1db', 0xAFA6},
{'\ue1dc', 0xAFA7}, {'\ue1dd', 0xAFA8}, {'\ue1de', 0xAFA9},
{'\ue1df', 0xAFAA}, {'\ue1e0', 0xAFAB}, {'\ue1e1', 0xAFAC},
{'\ue1e2', 0xAFAD}, {'\ue1e3', 0xAFAE}, {'\ue1e4', 0xAFAF},
{'\ue1e5', 0xAFB0}, {'\ue1e6', 0xAFB1}, {'\ue1e7', 0xAFB2},
{'\ue1e8', 0xAFB3}, {'\ue1e9', 0xAFB4}, {'\ue1ea', 0xAFB5},
{'\ue1eb', 0xAFB6}, {'\ue1ec', 0xAFB7}, {'\ue1ed', 0xAFB8},
{'\ue1ee', 0xAFB9}, {'\ue1ef', 0xAFBA}, {'\ue1f0', 0xAFBB},
{'\ue1f1', 0xAFBC}, {'\ue1f2', 0xAFBD}, {'\ue1f3', 0xAFBE},
{'\ue1f4', 0xAFBF}, {'\ue1f5', 0xAFC0}, {'\ue1f6', 0xAFC1},
{'\ue1f7', 0xAFC2}, {'\ue1f8', 0xAFC3}, {'\ue1f9', 0xAFC4},
{'\ue1fa', 0xAFC5}, {'\ue1fb', 0xAFC6}, {'\ue1fc', 0xAFC7},
{'\ue1fd', 0xAFC8}, {'\ue1fe', 0xAFC9}, {'\ue1ff', 0xAFCA},
{'\ue200', 0xAFCB}, {'\ue201', 0xAFCC}, {'\ue202', 0xAFCD},
{'\ue203', 0xAFCE}, {'\ue204', 0xAFCF}, {'\ue205', 0xAFD0},
{'\ue206', 0xAFD1}, {'\ue207', 0xAFD2}, {'\ue208', 0xAFD3},
{'\ue209', 0xAFD4}, {'\ue20a', 0xAFD5}, {'\ue20b', 0xAFD6},
{'\ue20c', 0xAFD7}, {'\ue20d', 0xAFD8}, {'\ue20e', 0xAFD9},
{'\ue20f', 0xAFDA}, {'\ue210', 0xAFDB}, {'\ue211', 0xAFDC},
{'\ue212', 0xAFDD}, {'\ue213', 0xAFDE}, {'\ue214', 0xAFDF},
{'\ue215', 0xAFE0}, {'\ue216', 0xAFE1}, {'\ue217', 0xAFE2},
{'\ue218', 0xAFE3}, {'\ue219', 0xAFE4}, {'\ue21a', 0xAFE5},
{'\ue21b', 0xAFE6}, {'\ue21c', 0xAFE7}, {'\ue21d', 0xAFE8},
{'\ue21e', 0xAFE9}, {'\ue21f', 0xAFEA}, {'\ue220', 0xAFEB},
{'\ue221', 0xAFEC}, {'\ue222', 0xAFED}, {'\ue223', 0xAFEE},
{'\ue224', 0xAFEF}, {'\ue225', 0xAFF0}, {'\ue226', 0xAFF1},
{'\ue227', 0xAFF2}, {'\ue228', 0xAFF3}, {'\ue229', 0xAFF4},
{'\ue22a', 0xAFF5}, {'\ue22b', 0xAFF6}, {'\ue22c', 0xAFF7},
{'\ue22d', 0xAFF8}, {'\ue22e', 0xAFF9}, {'\ue22f', 0xAFFA},
{'\ue230', 0xAFFB}, {'\ue231', 0xAFFC}, {'\ue232', 0xAFFD},
{'\ue233', 0xAFFE}, {'\ue234', 0xF8A1}, {'\ue235', 0xF8A2},
{'\ue236', 0xF8A3}, {'\ue237', 0xF8A4}, {'\ue238', 0xF8A5},
{'\ue239', 0xF8A6}, {'\ue23a', 0xF8A7}, {'\ue23b', 0xF8A8},
{'\ue23c', 0xF8A9}, {'\ue23d', 0xF8AA}, {'\ue23e', 0xF8AB},
{'\ue23f', 0xF8AC}, {'\ue240', 0xF8AD}, {'\ue241', 0xF8AE},
{'\ue242', 0xF8AF}, {'\ue243', 0xF8B0}, {'\ue244', 0xF8B1},
{'\ue245', 0xF8B2}, {'\ue246', 0xF8B3}, {'\ue247', 0xF8B4},
{'\ue248', 0xF8B5}, {'\ue249', 0xF8B6}, {'\ue24a', 0xF8B7},
{'\ue24b', 0xF8B8}, {'\ue24c', 0xF8B9}, {'\ue24d', 0xF8BA},
{'\ue24e', 0xF8BB}, {'\ue24f', 0xF8BC}, {'\ue250', 0xF8BD},
{'\ue251', 0xF8BE}, {'\ue252', 0xF8BF}, {'\ue253', 0xF8C0},
{'\ue254', 0xF8C1}, {'\ue255', 0xF8C2}, {'\ue256', 0xF8C3},
{'\ue257', 0xF8C4}, {'\ue258', 0xF8C5}, {'\ue259', 0xF8C6},
{'\ue25a', 0xF8C7}, {'\ue25b', 0xF8C8}, {'\ue25c', 0xF8C9},
{'\ue25d', 0xF8CA}, {'\ue25e', 0xF8CB}, {'\ue25f', 0xF8CC},
{'\ue260', 0xF8CD}, {'\ue261', 0xF8CE}, {'\ue262', 0xF8CF},
{'\ue263', 0xF8D0}, {'\ue264', 0xF8D1}, {'\ue265', 0xF8D2},
{'\ue266', 0xF8D3}, {'\ue267', 0xF8D4}, {'\ue268', 0xF8D5},
{'\ue269', 0xF8D6}, {'\ue26a', 0xF8D7}, {'\ue26b', 0xF8D8},
{'\ue26c', 0xF8D9}, {'\ue26d', 0xF8DA}, {'\ue26e', 0xF8DB},
{'\ue26f', 0xF8DC}, {'\ue270', 0xF8DD}, {'\ue271', 0xF8DE},
{'\ue272', 0xF8DF}, {'\ue273', 0xF8E0}, {'\ue274', 0xF8E1},
{'\ue275', 0xF8E2}, {'\ue276', 0xF8E3}, {'\ue277', 0xF8E4},
{'\ue278', 0xF8E5}, {'\ue279', 0xF8E6}, {'\ue27a', 0xF8E7},
{'\ue27b', 0xF8E8}, {'\ue27c', 0xF8E9}, {'\ue27d', 0xF8EA},
{'\ue27e', 0xF8EB}, {'\ue27f', 0xF8EC}, {'\ue280', 0xF8ED},
{'\ue281', 0xF8EE}, {'\ue282', 0xF8EF}, {'\ue283', 0xF8F0},
{'\ue284', 0xF8F1}, {'\ue285', 0xF8F2}, {'\ue286', 0xF8F3},
{'\ue287', 0xF8F4}, {'\ue288', 0xF8F5}, {'\ue289', 0xF8F6},
{'\ue28a', 0xF8F7}, {'\ue28b', 0xF8F8}, {'\ue28c', 0xF8F9},
{'\ue28d', 0xF8FA}, {'\ue28e', 0xF8FB}, {'\ue28f', 0xF8FC},
{'\ue290', 0xF8FD}, {'\ue291', 0xF8FE}, {'\ue292', 0xF9A1},
{'\ue293', 0xF9A2}, {'\ue294', 0xF9A3}, {'\ue295', 0xF9A4},
{'\ue296', 0xF9A5}, {'\ue297', 0xF9A6}, {'\ue298', 0xF9A7},
{'\ue299', 0xF9A8}, {'\ue29a', 0xF9A9}, {'\ue29b', 0xF9AA},
{'\ue29c', 0xF9AB}, {'\ue29d', 0xF9AC}, {'\ue29e', 0xF9AD},
{'\ue29f', 0xF9AE}, {'\ue2a0', 0xF9AF}, {'\ue2a1', 0xF9B0},
{'\ue2a2', 0xF9B1}, {'\ue2a3', 0xF9B2}, {'\ue2a4', 0xF9B3},
{'\ue2a5', 0xF9B4}, {'\ue2a6', 0xF9B5}, {'\ue2a7', 0xF9B6},
{'\ue2a8', 0xF9B7}, {'\ue2a9', 0xF9B8}, {'\ue2aa', 0xF9B9},
{'\ue2ab', 0xF9BA}, {'\ue2ac', 0xF9BB}, {'\ue2ad', 0xF9BC},
{'\ue2ae', 0xF9BD}, {'\ue2af', 0xF9BE}, {'\ue2b0', 0xF9BF},
{'\ue2b1', 0xF9C0}, {'\ue2b2', 0xF9C1}, {'\ue2b3', 0xF9C2},
{'\ue2b4', 0xF9C3}, {'\ue2b5', 0xF9C4}, {'\ue2b6', 0xF9C5},
{'\ue2b7', 0xF9C6}, {'\ue2b8', 0xF9C7}, {'\ue2b9', 0xF9C8},
{'\ue2ba', 0xF9C9}, {'\ue2bb', 0xF9CA}, {'\ue2bc', 0xF9CB},
{'\ue2bd', 0xF9CC}, {'\ue2be', 0xF9CD}, {'\ue2bf', 0xF9CE},
{'\ue2c0', 0xF9CF}, {'\ue2c1', 0xF9D0}, {'\ue2c2', 0xF9D1},
{'\ue2c3', 0xF9D2}, {'\ue2c4', 0xF9D3}, {'\ue2c5', 0xF9D4},
{'\ue2c6', 0xF9D5}, {'\ue2c7', 0xF9D6}, {'\ue2c8', 0xF9D7},
{'\ue2c9', 0xF9D8}, {'\ue2ca', 0xF9D9}, {'\ue2cb', 0xF9DA},
{'\ue2cc', 0xF9DB}, {'\ue2cd', 0xF9DC}, {'\ue2ce', 0xF9DD},
{'\ue2cf', 0xF9DE}, {'\ue2d0', 0xF9DF}, {'\ue2d1', 0xF9E0},
{'\ue2d2', 0xF9E1}, {'\ue2d3', 0xF9E2}, {'\ue2d4', 0xF9E3},
{'\ue2d5', 0xF9E4}, {'\ue2d6', 0xF9E5}, {'\ue2d7', 0xF9E6},
{'\ue2d8', 0xF9E7}, {'\ue2d9', 0xF9E8}, {'\ue2da', 0xF9E9},
{'\ue2db', 0xF9EA}, {'\ue2dc', 0xF9EB}, {'\ue2dd', 0xF9EC},
{'\ue2de', 0xF9ED}, {'\ue2df', 0xF9EE}, {'\ue2e0', 0xF9EF},
{'\ue2e1', 0xF9F0}, {'\ue2e2', 0xF9F1}, {'\ue2e3', 0xF9F2},
{'\ue2e4', 0xF9F3}, {'\ue2e5', 0xF9F4}, {'\ue2e6', 0xF9F5},
{'\ue2e7', 0xF9F6}, {'\ue2e8', 0xF9F7}, {'\ue2e9', 0xF9F8},
{'\ue2ea', 0xF9F9}, {'\ue2eb', 0xF9FA}, {'\ue2ec', 0xF9FB},
{'\ue2ed', 0xF9FC}, {'\ue2ee', 0xF9FD}, {'\ue2ef', 0xF9FE},
{'\ue2f0', 0xFAA1}, {'\ue2f1', 0xFAA2}, {'\ue2f2', 0xFAA3},
{'\ue2f3', 0xFAA4}, {'\ue2f4', 0xFAA5}, {'\ue2f5', 0xFAA6},
{'\ue2f6', 0xFAA7}, {'\ue2f7', 0xFAA8}, {'\ue2f8', 0xFAA9},
{'\ue2f9', 0xFAAA}, {'\ue2fa', 0xFAAB}, {'\ue2fb', 0xFAAC},
{'\ue2fc', 0xFAAD}, {'\ue2fd', 0xFAAE}, {'\ue2fe', 0xFAAF},
{'\ue2ff', 0xFAB0}, {'\ue300', 0xFAB1}, {'\ue301', 0xFAB2},
{'\ue302', 0xFAB3}, {'\ue303', 0xFAB4}, {'\ue304', 0xFAB5},
{'\ue305', 0xFAB6}, {'\ue306', 0xFAB7}, {'\ue307', 0xFAB8},
{'\ue308', 0xFAB9}, {'\ue309', 0xFABA}, {'\ue30a', 0xFABB},
{'\ue30b', 0xFABC}, {'\ue30c', 0xFABD}, {'\ue30d', 0xFABE},
{'\ue30e', 0xFABF}, {'\ue30f', 0xFAC0}, {'\ue310', 0xFAC1},
{'\ue311', 0xFAC2}, {'\ue312', 0xFAC3}, {'\ue313', 0xFAC4},
{'\ue314', 0xFAC5}, {'\ue315', 0xFAC6}, {'\ue316', 0xFAC7},
{'\ue317', 0xFAC8}, {'\ue318', 0xFAC9}, {'\ue319', 0xFACA},
{'\ue31a', 0xFACB}, {'\ue31b', 0xFACC}, {'\ue31c', 0xFACD},
{'\ue31d', 0xFACE}, {'\ue31e', 0xFACF}, {'\ue31f', 0xFAD0},
{'\ue320', 0xFAD1}, {'\ue321', 0xFAD2}, {'\ue322', 0xFAD3},
{'\ue323', 0xFAD4}, {'\ue324', 0xFAD5}, {'\ue325', 0xFAD6},
{'\ue326', 0xFAD7}, {'\ue327', 0xFAD8}, {'\ue328', 0xFAD9},
{'\ue329', 0xFADA}, {'\ue32a', 0xFADB}, {'\ue32b', 0xFADC},
{'\ue32c', 0xFADD}, {'\ue32d', 0xFADE}, {'\ue32e', 0xFADF},
{'\ue32f', 0xFAE0}, {'\ue330', 0xFAE1}, {'\ue331', 0xFAE2},
{'\ue332', 0xFAE3}, {'\ue333', 0xFAE4}, {'\ue334', 0xFAE5},
{'\ue335', 0xFAE6}, {'\ue336', 0xFAE7}, {'\ue337', 0xFAE8},
{'\ue338', 0xFAE9}, {'\ue339', 0xFAEA}, {'\ue33a', 0xFAEB},
{'\ue33b', 0xFAEC}, {'\ue33c', 0xFAED}, {'\ue33d', 0xFAEE},
{'\ue33e', 0xFAEF}, {'\ue33f', 0xFAF0}, {'\ue340', 0xFAF1},
{'\ue341', 0xFAF2}, {'\ue342', 0xFAF3}, {'\ue343', 0xFAF4},
{'\ue344', 0xFAF5}, {'\ue345', 0xFAF6}, {'\ue346', 0xFAF7},
{'\ue347', 0xFAF8}, {'\ue348', 0xFAF9}, {'\ue349', 0xFAFA},
{'\ue34a', 0xFAFB}, {'\ue34b', 0xFAFC}, {'\ue34c', 0xFAFD},
{'\ue34d', 0xFAFE}, {'\ue34e', 0xFBA1}, {'\ue34f', 0xFBA2},
{'\ue350', 0xFBA3}, {'\ue351', 0xFBA4}, {'\ue352', 0xFBA5},
{'\ue353', 0xFBA6}, {'\ue354', 0xFBA7}, {'\ue355', 0xFBA8},
{'\ue356', 0xFBA9}, {'\ue357', 0xFBAA}, {'\ue358', 0xFBAB},
{'\ue359', 0xFBAC}, {'\ue35a', 0xFBAD}, {'\ue35b', 0xFBAE},
{'\ue35c', 0xFBAF}, {'\ue35d', 0xFBB0}, {'\ue35e', 0xFBB1},
{'\ue35f', 0xFBB2}, {'\ue360', 0xFBB3}, {'\ue361', 0xFBB4},
{'\ue362', 0xFBB5}, {'\ue363', 0xFBB6}, {'\ue364', 0xFBB7},
{'\ue365', 0xFBB8}, {'\ue366', 0xFBB9}, {'\ue367', 0xFBBA},
{'\ue368', 0xFBBB}, {'\ue369', 0xFBBC}, {'\ue36a', 0xFBBD},
{'\ue36b', 0xFBBE}, {'\ue36c', 0xFBBF}, {'\ue36d', 0xFBC0},
{'\ue36e', 0xFBC1}, {'\ue36f', 0xFBC2}, {'\ue370', 0xFBC3},
{'\ue371', 0xFBC4}, {'\ue372', 0xFBC5}, {'\ue373', 0xFBC6},
{'\ue374', 0xFBC7}, {'\ue375', 0xFBC8}, {'\ue376', 0xFBC9},
{'\ue377', 0xFBCA}, {'\ue378', 0xFBCB}, {'\ue379', 0xFBCC},
{'\ue37a', 0xFBCD}, {'\ue37b', 0xFBCE}, {'\ue37c', 0xFBCF},
{'\ue37d', 0xFBD0}, {'\ue37e', 0xFBD1}, {'\ue37f', 0xFBD2},
{'\ue380', 0xFBD3}, {'\ue381', 0xFBD4}, {'\ue382', 0xFBD5},
{'\ue383', 0xFBD6}, {'\ue384', 0xFBD7}, {'\ue385', 0xFBD8},
{'\ue386', 0xFBD9}, {'\ue387', 0xFBDA}, {'\ue388', 0xFBDB},
{'\ue389', 0xFBDC}, {'\ue38a', 0xFBDD}, {'\ue38b', 0xFBDE},
{'\ue38c', 0xFBDF}, {'\ue38d', 0xFBE0}, {'\ue38e', 0xFBE1},
{'\ue38f', 0xFBE2}, {'\ue390', 0xFBE3}, {'\ue391', 0xFBE4},
{'\ue392', 0xFBE5}, {'\ue393', 0xFBE6}, {'\ue394', 0xFBE7},
{'\ue395', 0xFBE8}, {'\ue396', 0xFBE9}, {'\ue397', 0xFBEA},
{'\ue398', 0xFBEB}, {'\ue399', 0xFBEC}, {'\ue39a', 0xFBED},
{'\ue39b', 0xFBEE}, {'\ue39c', 0xFBEF}, {'\ue39d', 0xFBF0},
{'\ue39e', 0xFBF1}, {'\ue39f', 0xFBF2}, {'\ue3a0', 0xFBF3},
{'\ue3a1', 0xFBF4}, {'\ue3a2', 0xFBF5}, {'\ue3a3', 0xFBF6},
{'\ue3a4', 0xFBF7}, {'\ue3a5', 0xFBF8}, {'\ue3a6', 0xFBF9},
{'\ue3a7', 0xFBFA}, {'\ue3a8', 0xFBFB}, {'\ue3a9', 0xFBFC},
{'\ue3aa', 0xFBFD}, {'\ue3ab', 0xFBFE}, {'\ue3ac', 0xFCA1},
{'\ue3ad', 0xFCA2}, {'\ue3ae', 0xFCA3}, {'\ue3af', 0xFCA4},
{'\ue3b0', 0xFCA5}, {'\ue3b1', 0xFCA6}, {'\ue3b2', 0xFCA7},
{'\ue3b3', 0xFCA8}, {'\ue3b4', 0xFCA9}, {'\ue3b5', 0xFCAA},
{'\ue3b6', 0xFCAB}, {'\ue3b7', 0xFCAC}, {'\ue3b8', 0xFCAD},
{'\ue3b9', 0xFCAE}, {'\ue3ba', 0xFCAF}, {'\ue3bb', 0xFCB0},
{'\ue3bc', 0xFCB1}, {'\ue3bd', 0xFCB2}, {'\ue3be', 0xFCB3},
{'\ue3bf', 0xFCB4}, {'\ue3c0', 0xFCB5}, {'\ue3c1', 0xFCB6},
{'\ue3c2', 0xFCB7}, {'\ue3c3', 0xFCB8}, {'\ue3c4', 0xFCB9},
{'\ue3c5', 0xFCBA}, {'\ue3c6', 0xFCBB}, {'\ue3c7', 0xFCBC},
{'\ue3c8', 0xFCBD}, {'\ue3c9', 0xFCBE}, {'\ue3ca', 0xFCBF},
{'\ue3cb', 0xFCC0}, {'\ue3cc', 0xFCC1}, {'\ue3cd', 0xFCC2},
{'\ue3ce', 0xFCC3}, {'\ue3cf', 0xFCC4}, {'\ue3d0', 0xFCC5},
{'\ue3d1', 0xFCC6}, {'\ue3d2', 0xFCC7}, {'\ue3d3', 0xFCC8},
{'\ue3d4', 0xFCC9}, {'\ue3d5', 0xFCCA}, {'\ue3d6', 0xFCCB},
{'\ue3d7', 0xFCCC}, {'\ue3d8', 0xFCCD}, {'\ue3d9', 0xFCCE},
{'\ue3da', 0xFCCF}, {'\ue3db', 0xFCD0}, {'\ue3dc', 0xFCD1},
{'\ue3dd', 0xFCD2}, {'\ue3de', 0xFCD3}, {'\ue3df', 0xFCD4},
{'\ue3e0', 0xFCD5}, {'\ue3e1', 0xFCD6}, {'\ue3e2', 0xFCD7},
{'\ue3e3', 0xFCD8}, {'\ue3e4', 0xFCD9}, {'\ue3e5', 0xFCDA},
{'\ue3e6', 0xFCDB}, {'\ue3e7', 0xFCDC}, {'\ue3e8', 0xFCDD},
{'\ue3e9', 0xFCDE}, {'\ue3ea', 0xFCDF}, {'\ue3eb', 0xFCE0},
{'\ue3ec', 0xFCE1}, {'\ue3ed', 0xFCE2}, {'\ue3ee', 0xFCE3},
{'\ue3ef', 0xFCE4}, {'\ue3f0', 0xFCE5}, {'\ue3f1', 0xFCE6},
{'\ue3f2', 0xFCE7}, {'\ue3f3', 0xFCE8}, {'\ue3f4', 0xFCE9},
{'\ue3f5', 0xFCEA}, {'\ue3f6', 0xFCEB}, {'\ue3f7', 0xFCEC},
{'\ue3f8', 0xFCED}, {'\ue3f9', 0xFCEE}, {'\ue3fa', 0xFCEF},
{'\ue3fb', 0xFCF0}, {'\ue3fc', 0xFCF1}, {'\ue3fd', 0xFCF2},
{'\ue3fe', 0xFCF3}, {'\ue3ff', 0xFCF4}, {'\ue400', 0xFCF5},
{'\ue401', 0xFCF6}, {'\ue402', 0xFCF7}, {'\ue403', 0xFCF8},
{'\ue404', 0xFCF9}, {'\ue405', 0xFCFA}, {'\ue406', 0xFCFB},
{'\ue407', 0xFCFC}, {'\ue408', 0xFCFD}, {'\ue409', 0xFCFE},
{'\ue40a', 0xFDA1}, {'\ue40b', 0xFDA2}, {'\ue40c', 0xFDA3},
{'\ue40d', 0xFDA4}, {'\ue40e', 0xFDA5}, {'\ue40f', 0xFDA6},
{'\ue410', 0xFDA7}, {'\ue411', 0xFDA8}, {'\ue412', 0xFDA9},
{'\ue413', 0xFDAA}, {'\ue414', 0xFDAB}, {'\ue415', 0xFDAC},
{'\ue416', 0xFDAD}, {'\ue417', 0xFDAE}, {'\ue418', 0xFDAF},
{'\ue419', 0xFDB0}, {'\ue41a', 0xFDB1}, {'\ue41b', 0xFDB2},
{'\ue41c', 0xFDB3}, {'\ue41d', 0xFDB4}, {'\ue41e', 0xFDB5},
{'\ue41f', 0xFDB6}, {'\ue420', 0xFDB7}, {'\ue421', 0xFDB8},
{'\ue422', 0xFDB9}, {'\ue423', 0xFDBA}, {'\ue424', 0xFDBB},
{'\ue425', 0xFDBC}, {'\ue426', 0xFDBD}, {'\ue427', 0xFDBE},
{'\ue428', 0xFDBF}, {'\ue429', 0xFDC0}, {'\ue42a', 0xFDC1},
{'\ue42b', 0xFDC2}, {'\ue42c', 0xFDC3}, {'\ue42d', 0xFDC4},
{'\ue42e', 0xFDC5}, {'\ue42f', 0xFDC6}, {'\ue430', 0xFDC7},
{'\ue431', 0xFDC8}, {'\ue432', 0xFDC9}, {'\ue433', 0xFDCA},
{'\ue434', 0xFDCB}, {'\ue435', 0xFDCC}, {'\ue436', 0xFDCD},
{'\ue437', 0xFDCE}, {'\ue438', 0xFDCF}, {'\ue439', 0xFDD0},
{'\ue43a', 0xFDD1}, {'\ue43b', 0xFDD2}, {'\ue43c', 0xFDD3},
{'\ue43d', 0xFDD4}, {'\ue43e', 0xFDD5}, {'\ue43f', 0xFDD6},
{'\ue440', 0xFDD7}, {'\ue441', 0xFDD8}, {'\ue442', 0xFDD9},
{'\ue443', 0xFDDA}, {'\ue444', 0xFDDB}, {'\ue445', 0xFDDC},
{'\ue446', 0xFDDD}, {'\ue447', 0xFDDE}, {'\ue448', 0xFDDF},
{'\ue449', 0xFDE0}, {'\ue44a', 0xFDE1}, {'\ue44b', 0xFDE2},
{'\ue44c', 0xFDE3}, {'\ue44d', 0xFDE4}, {'\ue44e', 0xFDE5},
{'\ue44f', 0xFDE6}, {'\ue450', 0xFDE7}, {'\ue451', 0xFDE8},
{'\ue452', 0xFDE9}, {'\ue453', 0xFDEA}, {'\ue454', 0xFDEB},
{'\ue455', 0xFDEC}, {'\ue456', 0xFDED}, {'\ue457', 0xFDEE},
{'\ue458', 0xFDEF}, {'\ue459', 0xFDF0}, {'\ue45a', 0xFDF1},
{'\ue45b', 0xFDF2}, {'\ue45c', 0xFDF3}, {'\ue45d', 0xFDF4},
{'\ue45e', 0xFDF5}, {'\ue45f', 0xFDF6}, {'\ue460', 0xFDF7},
{'\ue461', 0xFDF8}, {'\ue462', 0xFDF9}, {'\ue463', 0xFDFA},
{'\ue464', 0xFDFB}, {'\ue465', 0xFDFC}, {'\ue466', 0xFDFD},
{'\ue467', 0xFDFE}, {'\ue468', 0xFEA1}, {'\ue469', 0xFEA2},
{'\ue46a', 0xFEA3}, {'\ue46b', 0xFEA4}, {'\ue46c', 0xFEA5},
{'\ue46d', 0xFEA6}, {'\ue46e', 0xFEA7}, {'\ue46f', 0xFEA8},
{'\ue470', 0xFEA9}, {'\ue471', 0xFEAA}, {'\ue472', 0xFEAB},
{'\ue473', 0xFEAC}, {'\ue474', 0xFEAD}, {'\ue475', 0xFEAE},
{'\ue476', 0xFEAF}, {'\ue477', 0xFEB0}, {'\ue478', 0xFEB1},
{'\ue479', 0xFEB2}, {'\ue47a', 0xFEB3}, {'\ue47b', 0xFEB4},
{'\ue47c', 0xFEB5}, {'\ue47d', 0xFEB6}, {'\ue47e', 0xFEB7},
{'\ue47f', 0xFEB8}, {'\ue480', 0xFEB9}, {'\ue481', 0xFEBA},
{'\ue482', 0xFEBB}, {'\ue483', 0xFEBC}, {'\ue484', 0xFEBD},
{'\ue485', 0xFEBE}, {'\ue486', 0xFEBF}, {'\ue487', 0xFEC0},
{'\ue488', 0xFEC1}, {'\ue489', 0xFEC2}, {'\ue48a', 0xFEC3},
{'\ue48b', 0xFEC4}, {'\ue48c', 0xFEC5}, {'\ue48d', 0xFEC6},
{'\ue48e', 0xFEC7}, {'\ue48f', 0xFEC8}, {'\ue490', 0xFEC9},
{'\ue491', 0xFECA}, {'\ue492', 0xFECB}, {'\ue493', 0xFECC},
{'\ue494', 0xFECD}, {'\ue495', 0xFECE}, {'\ue496', 0xFECF},
{'\ue497', 0xFED0}, {'\ue498', 0xFED1}, {'\ue499', 0xFED2},
{'\ue49a', 0xFED3}, {'\ue49b', 0xFED4}, {'\ue49c', 0xFED5},
{'\ue49d', 0xFED6}, {'\ue49e', 0xFED7}, {'\ue49f', 0xFED8},
{'\ue4a0', 0xFED9}, {'\ue4a1', 0xFEDA}, {'\ue4a2', 0xFEDB},
{'\ue4a3', 0xFEDC}, {'\ue4a4', 0xFEDD}, {'\ue4a5', 0xFEDE},
{'\ue4a6', 0xFEDF}, {'\ue4a7', 0xFEE0}, {'\ue4a8', 0xFEE1},
{'\ue4a9', 0xFEE2}, {'\ue4aa', 0xFEE3}, {'\ue4ab', 0xFEE4},
{'\ue4ac', 0xFEE5}, {'\ue4ad', 0xFEE6}, {'\ue4ae', 0xFEE7},
{'\ue4af', 0xFEE8}, {'\ue4b0', 0xFEE9}, {'\ue4b1', 0xFEEA},
{'\ue4b2', 0xFEEB}, {'\ue4b3', 0xFEEC}, {'\ue4b4', 0xFEED},
{'\ue4b5', 0xFEEE}, {'\ue4b6', 0xFEEF}, {'\ue4b7', 0xFEF0},
{'\ue4b8', 0xFEF1}, {'\ue4b9', 0xFEF2}, {'\ue4ba', 0xFEF3},
{'\ue4bb', 0xFEF4}, {'\ue4bc', 0xFEF5}, {'\ue4bd', 0xFEF6},
{'\ue4be', 0xFEF7}, {'\ue4bf', 0xFEF8}, {'\ue4c0', 0xFEF9},
{'\ue4c1', 0xFEFA}, {'\ue4c2', 0xFEFB}, {'\ue4c3', 0xFEFC},
{'\ue4c4', 0xFEFD}, {'\ue4c5', 0xFEFE}, {'\ue4c6', 0xA140},
{'\ue4c7', 0xA141}, {'\ue4c8', 0xA142}, {'\ue4c9', 0xA143},
{'\ue4ca', 0xA144}, {'\ue4cb', 0xA145}, {'\ue4cc', 0xA146},
{'\ue4cd', 0xA147}, {'\ue4ce', 0xA148}, {'\ue4cf', 0xA149},
{'\ue4d0', 0xA14A}, {'\ue4d1', 0xA14B}, {'\ue4d2', 0xA14C},
{'\ue4d3', 0xA14D}, {'\ue4d4', 0xA14E}, {'\ue4d5', 0xA14F},
{'\ue4d6', 0xA150}, {'\ue4d7', 0xA151}, {'\ue4d8', 0xA152},
{'\ue4d9', 0xA153}, {'\ue4da', 0xA154}, {'\ue4db', 0xA155},
{'\ue4dc', 0xA156}, {'\ue4dd', 0xA157}, {'\ue4de', 0xA158},
{'\ue4df', 0xA159}, {'\ue4e0', 0xA15A}, {'\ue4e1', 0xA15B},
{'\ue4e2', 0xA15C}, {'\ue4e3', 0xA15D}, {'\ue4e4', 0xA15E},
{'\ue4e5', 0xA15F}, {'\ue4e6', 0xA160}, {'\ue4e7', 0xA161},
{'\ue4e8', 0xA162}, {'\ue4e9', 0xA163}, {'\ue4ea', 0xA164},
{'\ue4eb', 0xA165}, {'\ue4ec', 0xA166}, {'\ue4ed', 0xA167},
{'\ue4ee', 0xA168}, {'\ue4ef', 0xA169}, {'\ue4f0', 0xA16A},
{'\ue4f1', 0xA16B}, {'\ue4f2', 0xA16C}, {'\ue4f3', 0xA16D},
{'\ue4f4', 0xA16E}, {'\ue4f5', 0xA16F}, {'\ue4f6', 0xA170},
{'\ue4f7', 0xA171}, {'\ue4f8', 0xA172}, {'\ue4f9', 0xA173},
{'\ue4fa', 0xA174}, {'\ue4fb', 0xA175}, {'\ue4fc', 0xA176},
{'\ue4fd', 0xA177}, {'\ue4fe', 0xA178}, {'\ue4ff', 0xA179},
{'\ue500', 0xA17A}, {'\ue501', 0xA17B}, {'\ue502', 0xA17C},
{'\ue503', 0xA17D}, {'\ue504', 0xA17E}, {'\ue505', 0xA180},
{'\ue506', 0xA181}, {'\ue507', 0xA182}, {'\ue508', 0xA183},
{'\ue509', 0xA184}, {'\ue50a', 0xA185}, {'\ue50b', 0xA186},
{'\ue50c', 0xA187}, {'\ue50d', 0xA188}, {'\ue50e', 0xA189},
{'\ue50f', 0xA18A}, {'\ue510', 0xA18B}, {'\ue511', 0xA18C},
{'\ue512', 0xA18D}, {'\ue513', 0xA18E}, {'\ue514', 0xA18F},
{'\ue515', 0xA190}, {'\ue516', 0xA191}, {'\ue517', 0xA192},
{'\ue518', 0xA193}, {'\ue519', 0xA194}, {'\ue51a', 0xA195},
{'\ue51b', 0xA196}, {'\ue51c', 0xA197}, {'\ue51d', 0xA198},
{'\ue51e', 0xA199}, {'\ue51f', 0xA19A}, {'\ue520', 0xA19B},
{'\ue521', 0xA19C}, {'\ue522', 0xA19D}, {'\ue523', 0xA19E},
{'\ue524', 0xA19F}, {'\ue525', 0xA1A0}, {'\ue526', 0xA240},
{'\ue527', 0xA241}, {'\ue528', 0xA242}, {'\ue529', 0xA243},
{'\ue52a', 0xA244}, {'\ue52b', 0xA245}, {'\ue52c', 0xA246},
{'\ue52d', 0xA247}, {'\ue52e', 0xA248}, {'\ue52f', 0xA249},
{'\ue530', 0xA24A}, {'\ue531', 0xA24B}, {'\ue532', 0xA24C},
{'\ue533', 0xA24D}, {'\ue534', 0xA24E}, {'\ue535', 0xA24F},
{'\ue536', 0xA250}, {'\ue537', 0xA251}, {'\ue538', 0xA252},
{'\ue539', 0xA253}, {'\ue53a', 0xA254}, {'\ue53b', 0xA255},
{'\ue53c', 0xA256}, {'\ue53d', 0xA257}, {'\ue53e', 0xA258},
{'\ue53f', 0xA259}, {'\ue540', 0xA25A}, {'\ue541', 0xA25B},
{'\ue542', 0xA25C}, {'\ue543', 0xA25D}, {'\ue544', 0xA25E},
{'\ue545', 0xA25F}, {'\ue546', 0xA260}, {'\ue547', 0xA261},
{'\ue548', 0xA262}, {'\ue549', 0xA263}, {'\ue54a', 0xA264},
{'\ue54b', 0xA265}, {'\ue54c', 0xA266}, {'\ue54d', 0xA267},
{'\ue54e', 0xA268}, {'\ue54f', 0xA269}, {'\ue550', 0xA26A},
{'\ue551', 0xA26B}, {'\ue552', 0xA26C}, {'\ue553', 0xA26D},
{'\ue554', 0xA26E}, {'\ue555', 0xA26F}, {'\ue556', 0xA270},
{'\ue557', 0xA271}, {'\ue558', 0xA272}, {'\ue559', 0xA273},
{'\ue55a', 0xA274}, {'\ue55b', 0xA275}, {'\ue55c', 0xA276},
{'\ue55d', 0xA277}, {'\ue55e', 0xA278}, {'\ue55f', 0xA279},
{'\ue560', 0xA27A}, {'\ue561', 0xA27B}, {'\ue562', 0xA27C},
{'\ue563', 0xA27D}, {'\ue564', 0xA27E}, {'\ue565', 0xA280},
{'\ue566', 0xA281}, {'\ue567', 0xA282}, {'\ue568', 0xA283},
{'\ue569', 0xA284}, {'\ue56a', 0xA285}, {'\ue56b', 0xA286},
{'\ue56c', 0xA287}, {'\ue56d', 0xA288}, {'\ue56e', 0xA289},
{'\ue56f', 0xA28A}, {'\ue570', 0xA28B}, {'\ue571', 0xA28C},
{'\ue572', 0xA28D}, {'\ue573', 0xA28E}, {'\ue574', 0xA28F},
{'\ue575', 0xA290}, {'\ue576', 0xA291}, {'\ue577', 0xA292},
{'\ue578', 0xA293}, {'\ue579', 0xA294}, {'\ue57a', 0xA295},
{'\ue57b', 0xA296}, {'\ue57c', 0xA297}, {'\ue57d', 0xA298},
{'\ue57e', 0xA299}, {'\ue57f', 0xA29A}, {'\ue580', 0xA29B},
{'\ue581', 0xA29C}, {'\ue582', 0xA29D}, {'\ue583', 0xA29E},
{'\ue584', 0xA29F}, {'\ue585', 0xA2A0}, {'\ue586', 0xA340},
{'\ue587', 0xA341}, {'\ue588', 0xA342}, {'\ue589', 0xA343},
{'\ue58a', 0xA344}, {'\ue58b', 0xA345}, {'\ue58c', 0xA346},
{'\ue58d', 0xA347}, {'\ue58e', 0xA348}, {'\ue58f', 0xA349},
{'\ue590', 0xA34A}, {'\ue591', 0xA34B}, {'\ue592', 0xA34C},
{'\ue593', 0xA34D}, {'\ue594', 0xA34E}, {'\ue595', 0xA34F},
{'\ue596', 0xA350}, {'\ue597', 0xA351}, {'\ue598', 0xA352},
{'\ue599', 0xA353}, {'\ue59a', 0xA354}, {'\ue59b', 0xA355},
{'\ue59c', 0xA356}, {'\ue59d', 0xA357}, {'\ue59e', 0xA358},
{'\ue59f', 0xA359}, {'\ue5a0', 0xA35A}, {'\ue5a1', 0xA35B},
{'\ue5a2', 0xA35C}, {'\ue5a3', 0xA35D}, {'\ue5a4', 0xA35E},
{'\ue5a5', 0xA35F}, {'\ue5a6', 0xA360}, {'\ue5a7', 0xA361},
{'\ue5a8', 0xA362}, {'\ue5a9', 0xA363}, {'\ue5aa', 0xA364},
{'\ue5ab', 0xA365}, {'\ue5ac', 0xA366}, {'\ue5ad', 0xA367},
{'\ue5ae', 0xA368}, {'\ue5af', 0xA369}, {'\ue5b0', 0xA36A},
{'\ue5b1', 0xA36B}, {'\ue5b2', 0xA36C}, {'\ue5b3', 0xA36D},
{'\ue5b4', 0xA36E}, {'\ue5b5', 0xA36F}, {'\ue5b6', 0xA370},
{'\ue5b7', 0xA371}, {'\ue5b8', 0xA372}, {'\ue5b9', 0xA373},
{'\ue5ba', 0xA374}, {'\ue5bb', 0xA375}, {'\ue5bc', 0xA376},
{'\ue5bd', 0xA377}, {'\ue5be', 0xA378}, {'\ue5bf', 0xA379},
{'\ue5c0', 0xA37A}, {'\ue5c1', 0xA37B}, {'\ue5c2', 0xA37C},
{'\ue5c3', 0xA37D}, {'\ue5c4', 0xA37E}, {'\ue5c5', 0xA380},
{'\ue5c6', 0xA381}, {'\ue5c7', 0xA382}, {'\ue5c8', 0xA383},
{'\ue5c9', 0xA384}, {'\ue5ca', 0xA385}, {'\ue5cb', 0xA386},
{'\ue5cc', 0xA387}, {'\ue5cd', 0xA388}, {'\ue5ce', 0xA389},
{'\ue5cf', 0xA38A}, {'\ue5d0', 0xA38B}, {'\ue5d1', 0xA38C},
{'\ue5d2', 0xA38D}, {'\ue5d3', 0xA38E}, {'\ue5d4', 0xA38F},
{'\ue5d5', 0xA390}, {'\ue5d6', 0xA391}, {'\ue5d7', 0xA392},
{'\ue5d8', 0xA393}, {'\ue5d9', 0xA394}, {'\ue5da', 0xA395},
{'\ue5db', 0xA396}, {'\ue5dc', 0xA397}, {'\ue5dd', 0xA398},
{'\ue5de', 0xA399}, {'\ue5df', 0xA39A}, {'\ue5e0', 0xA39B},
{'\ue5e1', 0xA39C}, {'\ue5e2', 0xA39D}, {'\ue5e3', 0xA39E},
{'\ue5e4', 0xA39F}, {'\ue5e5', 0xA3A0}, {'\ue5e6', 0xA440},
{'\ue5e7', 0xA441}, {'\ue5e8', 0xA442}, {'\ue5e9', 0xA443},
{'\ue5ea', 0xA444}, {'\ue5eb', 0xA445}, {'\ue5ec', 0xA446},
{'\ue5ed', 0xA447}, {'\ue5ee', 0xA448}, {'\ue5ef', 0xA449},
{'\ue5f0', 0xA44A}, {'\ue5f1', 0xA44B}, {'\ue5f2', 0xA44C},
{'\ue5f3', 0xA44D}, {'\ue5f4', 0xA44E}, {'\ue5f5', 0xA44F},
{'\ue5f6', 0xA450}, {'\ue5f7', 0xA451}, {'\ue5f8', 0xA452},
{'\ue5f9', 0xA453}, {'\ue5fa', 0xA454}, {'\ue5fb', 0xA455},
{'\ue5fc', 0xA456}, {'\ue5fd', 0xA457}, {'\ue5fe', 0xA458},
{'\ue5ff', 0xA459}, {'\ue600', 0xA45A}, {'\ue601', 0xA45B},
{'\ue602', 0xA45C}, {'\ue603', 0xA45D}, {'\ue604', 0xA45E},
{'\ue605', 0xA45F}, {'\ue606', 0xA460}, {'\ue607', 0xA461},
{'\ue608', 0xA462}, {'\ue609', 0xA463}, {'\ue60a', 0xA464},
{'\ue60b', 0xA465}, {'\ue60c', 0xA466}, {'\ue60d', 0xA467},
{'\ue60e', 0xA468}, {'\ue60f', 0xA469}, {'\ue610', 0xA46A},
{'\ue611', 0xA46B}, {'\ue612', 0xA46C}, {'\ue613', 0xA46D},
{'\ue614', 0xA46E}, {'\ue615', 0xA46F}, {'\ue616', 0xA470},
{'\ue617', 0xA471}, {'\ue618', 0xA472}, {'\ue619', 0xA473},
{'\ue61a', 0xA474}, {'\ue61b', 0xA475}, {'\ue61c', 0xA476},
{'\ue61d', 0xA477}, {'\ue61e', 0xA478}, {'\ue61f', 0xA479},
{'\ue620', 0xA47A}, {'\ue621', 0xA47B}, {'\ue622', 0xA47C},
{'\ue623', 0xA47D}, {'\ue624', 0xA47E}, {'\ue625', 0xA480},
{'\ue626', 0xA481}, {'\ue627', 0xA482}, {'\ue628', 0xA483},
{'\ue629', 0xA484}, {'\ue62a', 0xA485}, {'\ue62b', 0xA486},
{'\ue62c', 0xA487}, {'\ue62d', 0xA488}, {'\ue62e', 0xA489},
{'\ue62f', 0xA48A}, {'\ue630', 0xA48B}, {'\ue631', 0xA48C},
{'\ue632', 0xA48D}, {'\ue633', 0xA48E}, {'\ue634', 0xA48F},
{'\ue635', 0xA490}, {'\ue636', 0xA491}, {'\ue637', 0xA492},
{'\ue638', 0xA493}, {'\ue639', 0xA494}, {'\ue63a', 0xA495},
{'\ue63b', 0xA496}, {'\ue63c', 0xA497}, {'\ue63d', 0xA498},
{'\ue63e', 0xA499}, {'\ue63f', 0xA49A}, {'\ue640', 0xA49B},
{'\ue641', 0xA49C}, {'\ue642', 0xA49D}, {'\ue643', 0xA49E},
{'\ue644', 0xA49F}, {'\ue645', 0xA4A0}, {'\ue646', 0xA540},
{'\ue647', 0xA541}, {'\ue648', 0xA542}, {'\ue649', 0xA543},
{'\ue64a', 0xA544}, {'\ue64b', 0xA545}, {'\ue64c', 0xA546},
{'\ue64d', 0xA547}, {'\ue64e', 0xA548}, {'\ue64f', 0xA549},
{'\ue650', 0xA54A}, {'\ue651', 0xA54B}, {'\ue652', 0xA54C},
{'\ue653', 0xA54D}, {'\ue654', 0xA54E}, {'\ue655', 0xA54F},
{'\ue656', 0xA550}, {'\ue657', 0xA551}, {'\ue658', 0xA552},
{'\ue659', 0xA553}, {'\ue65a', 0xA554}, {'\ue65b', 0xA555},
{'\ue65c', 0xA556}, {'\ue65d', 0xA557}, {'\ue65e', 0xA558},
{'\ue65f', 0xA559}, {'\ue660', 0xA55A}, {'\ue661', 0xA55B},
{'\ue662', 0xA55C}, {'\ue663', 0xA55D}, {'\ue664', 0xA55E},
{'\ue665', 0xA55F}, {'\ue666', 0xA560}, {'\ue667', 0xA561},
{'\ue668', 0xA562}, {'\ue669', 0xA563}, {'\ue66a', 0xA564},
{'\ue66b', 0xA565}, {'\ue66c', 0xA566}, {'\ue66d', 0xA567},
{'\ue66e', 0xA568}, {'\ue66f', 0xA569}, {'\ue670', 0xA56A},
{'\ue671', 0xA56B}, {'\ue672', 0xA56C}, {'\ue673', 0xA56D},
{'\ue674', 0xA56E}, {'\ue675', 0xA56F}, {'\ue676', 0xA570},
{'\ue677', 0xA571}, {'\ue678', 0xA572}, {'\ue679', 0xA573},
{'\ue67a', 0xA574}, {'\ue67b', 0xA575}, {'\ue67c', 0xA576},
{'\ue67d', 0xA577}, {'\ue67e', 0xA578}, {'\ue67f', 0xA579},
{'\ue680', 0xA57A}, {'\ue681', 0xA57B}, {'\ue682', 0xA57C},
{'\ue683', 0xA57D}, {'\ue684', 0xA57E}, {'\ue685', 0xA580},
{'\ue686', 0xA581}, {'\ue687', 0xA582}, {'\ue688', 0xA583},
{'\ue689', 0xA584}, {'\ue68a', 0xA585}, {'\ue68b', 0xA586},
{'\ue68c', 0xA587}, {'\ue68d', 0xA588}, {'\ue68e', 0xA589},
{'\ue68f', 0xA58A}, {'\ue690', 0xA58B}, {'\ue691', 0xA58C},
{'\ue692', 0xA58D}, {'\ue693', 0xA58E}, {'\ue694', 0xA58F},
{'\ue695', 0xA590}, {'\ue696', 0xA591}, {'\ue697', 0xA592},
{'\ue698', 0xA593}, {'\ue699', 0xA594}, {'\ue69a', 0xA595},
{'\ue69b', 0xA596}, {'\ue69c', 0xA597}, {'\ue69d', 0xA598},
{'\ue69e', 0xA599}, {'\ue69f', 0xA59A}, {'\ue6a0', 0xA59B},
{'\ue6a1', 0xA59C}, {'\ue6a2', 0xA59D}, {'\ue6a3', 0xA59E},
{'\ue6a4', 0xA59F}, {'\ue6a5', 0xA5A0}, {'\ue6a6', 0xA640},
{'\ue6a7', 0xA641}, {'\ue6a8', 0xA642}, {'\ue6a9', 0xA643},
{'\ue6aa', 0xA644}, {'\ue6ab', 0xA645}, {'\ue6ac', 0xA646},
{'\ue6ad', 0xA647}, {'\ue6ae', 0xA648}, {'\ue6af', 0xA649},
{'\ue6b0', 0xA64A}, {'\ue6b1', 0xA64B}, {'\ue6b2', 0xA64C},
{'\ue6b3', 0xA64D}, {'\ue6b4', 0xA64E}, {'\ue6b5', 0xA64F},
{'\ue6b6', 0xA650}, {'\ue6b7', 0xA651}, {'\ue6b8', 0xA652},
{'\ue6b9', 0xA653}, {'\ue6ba', 0xA654}, {'\ue6bb', 0xA655},
{'\ue6bc', 0xA656}, {'\ue6bd', 0xA657}, {'\ue6be', 0xA658},
{'\ue6bf', 0xA659}, {'\ue6c0', 0xA65A}, {'\ue6c1', 0xA65B},
{'\ue6c2', 0xA65C}, {'\ue6c3', 0xA65D}, {'\ue6c4', 0xA65E},
{'\ue6c5', 0xA65F}, {'\ue6c6', 0xA660}, {'\ue6c7', 0xA661},
{'\ue6c8', 0xA662}, {'\ue6c9', 0xA663}, {'\ue6ca', 0xA664},
{'\ue6cb', 0xA665}, {'\ue6cc', 0xA666}, {'\ue6cd', 0xA667},
{'\ue6ce', 0xA668}, {'\ue6cf', 0xA669}, {'\ue6d0', 0xA66A},
{'\ue6d1', 0xA66B}, {'\ue6d2', 0xA66C}, {'\ue6d3', 0xA66D},
{'\ue6d4', 0xA66E}, {'\ue6d5', 0xA66F}, {'\ue6d6', 0xA670},
{'\ue6d7', 0xA671}, {'\ue6d8', 0xA672}, {'\ue6d9', 0xA673},
{'\ue6da', 0xA674}, {'\ue6db', 0xA675}, {'\ue6dc', 0xA676},
{'\ue6dd', 0xA677}, {'\ue6de', 0xA678}, {'\ue6df', 0xA679},
{'\ue6e0', 0xA67A}, {'\ue6e1', 0xA67B}, {'\ue6e2', 0xA67C},
{'\ue6e3', 0xA67D}, {'\ue6e4', 0xA67E}, {'\ue6e5', 0xA680},
{'\ue6e6', 0xA681}, {'\ue6e7', 0xA682}, {'\ue6e8', 0xA683},
{'\ue6e9', 0xA684}, {'\ue6ea', 0xA685}, {'\ue6eb', 0xA686},
{'\ue6ec', 0xA687}, {'\ue6ed', 0xA688}, {'\ue6ee', 0xA689},
{'\ue6ef', 0xA68A}, {'\ue6f0', 0xA68B}, {'\ue6f1', 0xA68C},
{'\ue6f2', 0xA68D}, {'\ue6f3', 0xA68E}, {'\ue6f4', 0xA68F},
{'\ue6f5', 0xA690}, {'\ue6f6', 0xA691}, {'\ue6f7', 0xA692},
{'\ue6f8', 0xA693}, {'\ue6f9', 0xA694}, {'\ue6fa', 0xA695},
{'\ue6fb', 0xA696}, {'\ue6fc', 0xA697}, {'\ue6fd', 0xA698},
{'\ue6fe', 0xA699}, {'\ue6ff', 0xA69A}, {'\ue700', 0xA69B},
{'\ue701', 0xA69C}, {'\ue702', 0xA69D}, {'\ue703', 0xA69E},
{'\ue704', 0xA69F}, {'\ue705', 0xA6A0}, {'\ue706', 0xA740},
{'\ue707', 0xA741}, {'\ue708', 0xA742}, {'\ue709', 0xA743},
{'\ue70a', 0xA744}, {'\ue70b', 0xA745}, {'\ue70c', 0xA746},
{'\ue70d', 0xA747}, {'\ue70e', 0xA748}, {'\ue70f', 0xA749},
{'\ue710', 0xA74A}, {'\ue711', 0xA74B}, {'\ue712', 0xA74C},
{'\ue713', 0xA74D}, {'\ue714', 0xA74E}, {'\ue715', 0xA74F},
{'\ue716', 0xA750}, {'\ue717', 0xA751}, {'\ue718', 0xA752},
{'\ue719', 0xA753}, {'\ue71a', 0xA754}, {'\ue71b', 0xA755},
{'\ue71c', 0xA756}, {'\ue71d', 0xA757}, {'\ue71e', 0xA758},
{'\ue71f', 0xA759}, {'\ue720', 0xA75A}, {'\ue721', 0xA75B},
{'\ue722', 0xA75C}, {'\ue723', 0xA75D}, {'\ue724', 0xA75E},
{'\ue725', 0xA75F}, {'\ue726', 0xA760}, {'\ue727', 0xA761},
{'\ue728', 0xA762}, {'\ue729', 0xA763}, {'\ue72a', 0xA764},
{'\ue72b', 0xA765}, {'\ue72c', 0xA766}, {'\ue72d', 0xA767},
{'\ue72e', 0xA768}, {'\ue72f', 0xA769}, {'\ue730', 0xA76A},
{'\ue731', 0xA76B}, {'\ue732', 0xA76C}, {'\ue733', 0xA76D},
{'\ue734', 0xA76E}, {'\ue735', 0xA76F}, {'\ue736', 0xA770},
{'\ue737', 0xA771}, {'\ue738', 0xA772}, {'\ue739', 0xA773},
{'\ue73a', 0xA774}, {'\ue73b', 0xA775}, {'\ue73c', 0xA776},
{'\ue73d', 0xA777}, {'\ue73e', 0xA778}, {'\ue73f', 0xA779},
{'\ue740', 0xA77A}, {'\ue741', 0xA77B}, {'\ue742', 0xA77C},
{'\ue743', 0xA77D}, {'\ue744', 0xA77E}, {'\ue745', 0xA780},
{'\ue746', 0xA781}, {'\ue747', 0xA782}, {'\ue748', 0xA783},
{'\ue749', 0xA784}, {'\ue74a', 0xA785}, {'\ue74b', 0xA786},
{'\ue74c', 0xA787}, {'\ue74d', 0xA788}, {'\ue74e', 0xA789},
{'\ue74f', 0xA78A}, {'\ue750', 0xA78B}, {'\ue751', 0xA78C},
{'\ue752', 0xA78D}, {'\ue753', 0xA78E}, {'\ue754', 0xA78F},
{'\ue755', 0xA790}, {'\ue756', 0xA791}, {'\ue757', 0xA792},
{'\ue758', 0xA793}, {'\ue759', 0xA794}, {'\ue75a', 0xA795},
{'\ue75b', 0xA796}, {'\ue75c', 0xA797}, {'\ue75d', 0xA798},
{'\ue75e', 0xA799}, {'\ue75f', 0xA79A}, {'\ue760', 0xA79B},
{'\ue761', 0xA79C}, {'\ue762', 0xA79D}, {'\ue763', 0xA79E},
{'\ue764', 0xA79F}, {'\ue765', 0xA7A0}, {'\ue766', 0xA2AB},
{'\ue767', 0xA2AC}, {'\ue768', 0xA2AD}, {'\ue769', 0xA2AE},
{'\ue76a', 0xA2AF}, {'\ue76b', 0xA2B0}, {'\ue76d', 0xA2E4},
{'\ue76e', 0xA2EF}, {'\ue76f', 0xA2F0}, {'\ue770', 0xA2FD},
{'\ue771', 0xA2FE}, {'\ue772', 0xA4F4}, {'\ue773', 0xA4F5},
{'\ue774', 0xA4F6}, {'\ue775', 0xA4F7}, {'\ue776', 0xA4F8},
{'\ue777', 0xA4F9}, {'\ue778', 0xA4FA}, {'\ue779', 0xA4FB},
{'\ue77a', 0xA4FC}, {'\ue77b', 0xA4FD}, {'\ue77c', 0xA4FE},
{'\ue77d', 0xA5F7}, {'\ue77e', 0xA5F8}, {'\ue77f', 0xA5F9},
{'\ue780', 0xA5FA}, {'\ue781', 0xA5FB}, {'\ue782', 0xA5FC},
{'\ue783', 0xA5FD}, {'\ue784', 0xA5FE}, {'\ue785', 0xA6B9},
{'\ue786', 0xA6BA}, {'\ue787', 0xA6BB}, {'\ue788', 0xA6BC},
{'\ue789', 0xA6BD}, {'\ue78a', 0xA6BE}, {'\ue78b', 0xA6BF},
{'\ue78c', 0xA6C0}, {'\ue78d', 0x84318236}, {'\ue78e', 0x84318238},
{'\ue78f', 0x84318237}, {'\ue790', 0x84318239}, {'\ue791', 0x84318330},
{'\ue792', 0x84318331}, {'\ue793', 0x84318332}, {'\ue794', 0x84318333},
{'\ue795', 0x84318334}, {'\ue796', 0x84318335}, {'\ue797', 0xA6F6},
{'\ue798', 0xA6F7}, {'\ue799', 0xA6F8}, {'\ue79a', 0xA6F9},
{'\ue79b', 0xA6FA}, {'\ue79c', 0xA6FB}, {'\ue79d', 0xA6FC},
{'\ue79e', 0xA6FD}, {'\ue79f', 0xA6FE}, {'\ue7a0', 0xA7C2},
{'\ue7a1', 0xA7C3}, {'\ue7a2', 0xA7C4}, {'\ue7a3', 0xA7C5},
{'\ue7a4', 0xA7C6}, {'\ue7a5', 0xA7C7}, {'\ue7a6', 0xA7C8},
{'\ue7a7', 0xA7C9}, {'\ue7a8', 0xA7CA}, {'\ue7a9', 0xA7CB},
{'\ue7aa', 0xA7CC}, {'\ue7ab', 0xA7CD}, {'\ue7ac', 0xA7CE},
{'\ue7ad', 0xA7CF}, {'\ue7ae', 0xA7D0}, {'\ue7af', 0xA7F2},
{'\ue7b0', 0xA7F3}, {'\ue7b1', 0xA7F4}, {'\ue7b2', 0xA7F5},
{'\ue7b3', 0xA7F6}, {'\ue7b4', 0xA7F7}, {'\ue7b5', 0xA7F8},
{'\ue7b6', 0xA7F9}, {'\ue7b7', 0xA7FA}, {'\ue7b8', 0xA7FB},
{'\ue7b9', 0xA7FC}, {'\ue7ba', 0xA7FD}, {'\ue7bb', 0xA7FE},
{'\ue7bc', 0xA896}, {'\ue7bd', 0xA897}, {'\ue7be', 0xA898},
{'\ue7bf', 0xA899}, {'\ue7c0', 0xA89A}, {'\ue7c1', 0xA89B},
{'\ue7c2', 0xA89C}, {'\ue7c3', 0xA89D}, {'\ue7c4', 0xA89E},
{'\ue7c5', 0xA89F}, {'\ue7c6', 0xA8A0}, {'\ue7c7', 0x8135F437},
{'\ue7c9', 0xA8C1}, {'\ue7ca', 0xA8C2}, {'\ue7cb', 0xA8C3},
{'\ue7cc', 0xA8C4}, {'\ue7cd', 0xA8EA}, {'\ue7ce', 0xA8EB},
{'\ue7cf', 0xA8EC}, {'\ue7d0', 0xA8ED}, {'\ue7d1', 0xA8EE},
{'\ue7d2', 0xA8EF}, {'\ue7d3', 0xA8F0}, {'\ue7d4', 0xA8F1},
{'\ue7d5', 0xA8F2}, {'\ue7d6', 0xA8F3}, {'\ue7d7', 0xA8F4},
{'\ue7d8', 0xA8F5}, {'\ue7d9', 0xA8F6}, {'\ue7da', 0xA8F7},
{'\ue7db', 0xA8F8}, {'\ue7dc', 0xA8F9}, {'\ue7dd', 0xA8FA},
{'\ue7de', 0xA8FB}, {'\ue7df', 0xA8FC}, {'\ue7e0', 0xA8FD},
{'\ue7e1', 0xA8FE}, {'\ue7e2', 0xA958}, {'\ue7e3', 0xA95B},
{'\ue7e4', 0xA95D}, {'\ue7e5', 0xA95E}, {'\ue7e6', 0xA95F},
{'\ue7f4', 0xA997}, {'\ue7f5', 0xA998}, {'\ue7f6', 0xA999},
{'\ue7f7', 0xA99A}, {'\ue7f8', 0xA99B}, {'\ue7f9', 0xA99C},
{'\ue7fa', 0xA99D}, {'\ue7fb', 0xA99E}, {'\ue7fc', 0xA99F},
{'\ue7fd', 0xA9A0}, {'\ue7fe', 0xA9A1}, {'\ue7ff', 0xA9A2},
{'\ue800', 0xA9A3}, {'\ue801', 0xA9F0}, {'\ue802', 0xA9F1},
{'\ue803', 0xA9F2}, {'\ue804', 0xA9F3}, {'\ue805', 0xA9F4},
{'\ue806', 0xA9F5}, {'\ue807', 0xA9F6}, {'\ue808', 0xA9F7},
{'\ue809', 0xA9F8}, {'\ue80a', 0xA9F9}, {'\ue80b', 0xA9FA},
{'\ue80c', 0xA9FB}, {'\ue80d', 0xA9FC}, {'\ue80e', 0xA9FD},
{'\ue80f', 0xA9FE}, {'\ue810', 0xD7FA}, {'\ue811', 0xD7FB},
{'\ue812', 0xD7FC}, {'\ue813', 0xD7FD}, {'\ue814', 0xD7FE},
{'\ue816', 0xFE51}, {'\ue817', 0xFE52}, {'\ue818', 0xFE53},
{'\ue81e', 0x82359037}, {'\ue826', 0x82359038}, {'\ue82b', 0x82359039},
{'\ue82c', 0x82359130}, {'\ue831', 0xFE6C}, {'\ue832', 0x82359131},
{'\ue83b', 0xFE76}, {'\ue843', 0x82359132}, {'\ue854', 0x82359133},
{'\ue855', 0xFE91}, {'\ue864', 0x82359134}, {'\ufe10', 0xA6D9},
{'\ufe11', 0xA6DB}, {'\ufe12', 0xA6DA}, {'\ufe13', 0xA6DC},
{'\ufe14', 0xA6DD}, {'\ufe15', 0xA6DE}, {'\ufe16', 0xA6DF},
{'\ufe17', 0xA6EC}, {'\ufe18', 0xA6ED}, {'\ufe19', 0xA6F3},
{'\U00020087', 0x95329031}, {'\U00020089', 0x95329033}, {'\U000200cc', 0x95329730},
{'\U000215d7', 0x9536B937}, {'\U0002298f', 0x9630BA35}, {'\U000241fe', 0x9635B630},
}
for _, v := range gb18030EncodingList {
unicodeToGB18030[v.unicode] = v.gb18030
gb18030ToUnicode[v.gb18030] = v.unicode
}
}
var (
unicodeToGB18030 = map[rune]uint32{}
gb18030ToUnicode = map[uint32]rune{}
// GB18030Case follows the cases from MySQL
GB18030Case = unicode.SpecialCase{
unicode.CaseRange{Lo: 0xB5, Hi: 0xB5, Delta: [unicode.MaxCase]rune{0, 775, 0}},
unicode.CaseRange{Lo: 0x1C5, Hi: 0x1C5, Delta: [unicode.MaxCase]rune{0, 1, 0}},
unicode.CaseRange{Lo: 0x1C8, Hi: 0x1C8, Delta: [unicode.MaxCase]rune{0, 1, 0}},
unicode.CaseRange{Lo: 0x1CB, Hi: 0x1CB, Delta: [unicode.MaxCase]rune{0, 1, 0}},
unicode.CaseRange{Lo: 0x1F2, Hi: 0x1F2, Delta: [unicode.MaxCase]rune{0, 1, 0}},
unicode.CaseRange{Lo: 0x25C, Hi: 0x25C, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x261, Hi: 0x261, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x265, Hi: 0x266, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x26A, Hi: 0x26A, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x26C, Hi: 0x26C, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x282, Hi: 0x282, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x287, Hi: 0x287, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x29D, Hi: 0x29E, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x37F, Hi: 0x37F, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x3C2, Hi: 0x3C2, Delta: [unicode.MaxCase]rune{0, 1, 0}},
unicode.CaseRange{Lo: 0x3D0, Hi: 0x3D0, Delta: [unicode.MaxCase]rune{0, -30, 0}},
unicode.CaseRange{Lo: 0x3D1, Hi: 0x3D1, Delta: [unicode.MaxCase]rune{0, -25, 0}},
unicode.CaseRange{Lo: 0x3D5, Hi: 0x3D5, Delta: [unicode.MaxCase]rune{0, -15, 0}},
unicode.CaseRange{Lo: 0x3D6, Hi: 0x3D6, Delta: [unicode.MaxCase]rune{0, -22, 0}},
unicode.CaseRange{Lo: 0x3F0, Hi: 0x3F0, Delta: [unicode.MaxCase]rune{0, -54, 0}},
unicode.CaseRange{Lo: 0x3F1, Hi: 0x3F1, Delta: [unicode.MaxCase]rune{0, -48, 0}},
unicode.CaseRange{Lo: 0x3F3, Hi: 0x3F3, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x3F5, Hi: 0x3F5, Delta: [unicode.MaxCase]rune{0, -64, 0}},
unicode.CaseRange{Lo: 0x526, Hi: 0x52F, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x10C7, Hi: 0x10C7, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x10CD, Hi: 0x10CD, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x10D0, Hi: 0x10FA, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x10FD, Hi: 0x10FF, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x13A0, Hi: 0x13F5, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x13F8, Hi: 0x13FD, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x1C80, Hi: 0x1C88, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x1C90, Hi: 0x1CBA, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x1CBD, Hi: 0x1CBF, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x1D79, Hi: 0x1D79, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x1D7D, Hi: 0x1D7D, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x1D8E, Hi: 0x1D8E, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x1E9B, Hi: 0x1E9B, Delta: [unicode.MaxCase]rune{0, -58, 0}},
unicode.CaseRange{Lo: 0x1FBE, Hi: 0x1FBE, Delta: [unicode.MaxCase]rune{0, -7173, 0}},
unicode.CaseRange{Lo: 0x2CF2, Hi: 0x2CF3, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x2D27, Hi: 0x2D27, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x2D2D, Hi: 0x2D2D, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0xA660, Hi: 0xA661, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0xA698, Hi: 0xA69B, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0xA78D, Hi: 0xA78D, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0xA790, Hi: 0xA794, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0xA796, Hi: 0xA7AE, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0xA7B0, Hi: 0xA7BF, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0xA7C2, Hi: 0xA7CA, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0xA7F5, Hi: 0xA7F6, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0xAB53, Hi: 0xAB53, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0xAB70, Hi: 0xABBF, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x104B0, Hi: 0x104D3, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x104D8, Hi: 0x104FB, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x10C80, Hi: 0x10CB2, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x10CC0, Hi: 0x10CF2, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x118A0, Hi: 0x118DF, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x16E40, Hi: 0x16E7F, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x1E900, Hi: 0x1E943, Delta: [unicode.MaxCase]rune{0, 0, 0}},
}
)
// Copyright 2021 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package charset
import (
"bytes"
"strings"
"unicode"
"unicode/utf8"
"golang.org/x/text/encoding"
"golang.org/x/text/encoding/simplifiedchinese"
)
// EncodingGBKImpl is the instance of encodingGBK
var EncodingGBKImpl = &encodingGBK{encodingBase{enc: customGBK{}}}
func init() {
EncodingGBKImpl.self = EncodingGBKImpl
}
// encodingGBK is GBK encoding.
type encodingGBK struct {
encodingBase
}
// Name implements Encoding interface.
func (*encodingGBK) Name() string {
return CharsetGBK
}
// Tp implements Encoding interface.
func (*encodingGBK) Tp() EncodingTp {
return EncodingTpGBK
}
// Peek implements Encoding interface.
func (*encodingGBK) Peek(src []byte) []byte {
charLen := 2
if len(src) == 0 || src[0] < 0x80 {
// A byte in the range 00–7F is a single byte that means the same thing as it does in ASCII.
charLen = 1
}
if charLen < len(src) {
return src[:charLen]
}
return src
}
func (*encodingGBK) MbLen(bs string) int {
if len(bs) < 2 {
return 0
}
if 0x81 <= bs[0] && bs[0] <= 0xfe {
if (0x40 <= bs[1] && bs[1] <= 0x7e) || (0x80 <= bs[1] && bs[1] <= 0xfe) {
return 2
}
}
return 0
}
// ToUpper implements Encoding interface.
func (*encodingGBK) ToUpper(d string) string {
return strings.ToUpperSpecial(GBKCase, d)
}
// ToLower implements Encoding interface.
func (*encodingGBK) ToLower(d string) string {
return strings.ToLowerSpecial(GBKCase, d)
}
// GBKCase follows https://dev.mysql.com/worklog/task/?id=4583.
var GBKCase = unicode.SpecialCase{
unicode.CaseRange{Lo: 0x00E0, Hi: 0x00E1, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x00E8, Hi: 0x00EA, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x00EC, Hi: 0x00ED, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x00F2, Hi: 0x00F3, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x00F9, Hi: 0x00FA, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x00FC, Hi: 0x00FC, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x0101, Hi: 0x0101, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x0113, Hi: 0x0113, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x011B, Hi: 0x011B, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x012B, Hi: 0x012B, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x0144, Hi: 0x0144, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x0148, Hi: 0x0148, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x014D, Hi: 0x014D, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x016B, Hi: 0x016B, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x01CE, Hi: 0x01CE, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x01D0, Hi: 0x01D0, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x01D2, Hi: 0x01D2, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x01D4, Hi: 0x01D4, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x01D6, Hi: 0x01D6, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x01D8, Hi: 0x01D8, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x01DA, Hi: 0x01DA, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x01DC, Hi: 0x01DC, Delta: [unicode.MaxCase]rune{0, 0, 0}},
unicode.CaseRange{Lo: 0x216A, Hi: 0x216B, Delta: [unicode.MaxCase]rune{0, 0, 0}},
}
// customGBK is a simplifiedchinese.GBK wrapper.
type customGBK struct{}
// NewCustomGBKEncoder return a custom GBK encoding.
func NewCustomGBKEncoder() *encoding.Encoder {
return customGBK{}.NewEncoder()
}
// NewDecoder returns simplifiedchinese.GBK.NewDecoder().
func (customGBK) NewDecoder() *encoding.Decoder {
return &encoding.Decoder{
Transformer: customGBKDecoder{
gbkDecoder: simplifiedchinese.GBK.NewDecoder(),
},
}
}
type customGBKDecoder struct {
gbkDecoder *encoding.Decoder
}
// Transform special treatment for 0x80,
// see https://github.com/pingcap/tidb/issues/30581 get details.
func (c customGBKDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
if len(src) == 0 {
return 0, 0, nil
}
if src[0] == 0x80 {
return utf8.EncodeRune(dst[:], utf8.RuneError), 1, nil
}
return c.gbkDecoder.Transform(dst, src, atEOF)
}
// Reset is same as simplifiedchinese.GBK.Reset().
func (c customGBKDecoder) Reset() {
c.gbkDecoder.Reset()
}
type customGBKEncoder struct {
gbkEncoder *encoding.Encoder
}
// NewEncoder returns simplifiedchinese.gbk.
func (customGBK) NewEncoder() *encoding.Encoder {
return &encoding.Encoder{
Transformer: customGBKEncoder{
gbkEncoder: simplifiedchinese.GBK.NewEncoder(),
},
}
}
// Transform special treatment for `€`,
// see https://github.com/pingcap/tidb/issues/30581 get details.
func (c customGBKEncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
if bytes.HasPrefix(src, []byte{0xe2, 0x82, 0xac} /* '€' */) {
return 0, 0, ErrInvalidCharacterString
}
return c.gbkEncoder.Transform(dst, src, atEOF)
}
// Reset is same as simplifiedchinese.gbk.
func (c customGBKEncoder) Reset() {
c.gbkEncoder.Reset()
}
// Copyright 2021 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package charset
import (
"bytes"
"golang.org/x/text/encoding"
)
// EncodingLatin1Impl is the instance of encodingLatin1.
// TiDB uses utf8 implementation for latin1 charset because of the backward compatibility.
var EncodingLatin1Impl = &encodingLatin1{encodingUTF8{encodingBase{enc: encoding.Nop}}}
func init() {
EncodingLatin1Impl.self = EncodingLatin1Impl
}
// encodingLatin1 compatibles with latin1 in old version TiDB.
type encodingLatin1 struct {
encodingUTF8
}
// Name implements Encoding interface.
func (*encodingLatin1) Name() string {
return CharsetLatin1
}
// Peek implements Encoding interface.
func (*encodingLatin1) Peek(src []byte) []byte {
if len(src) == 0 {
return src
}
return src[:1]
}
// IsValid implements Encoding interface.
func (*encodingLatin1) IsValid(_ []byte) bool {
return true
}
// Tp implements Encoding interface.
func (*encodingLatin1) Tp() EncodingTp {
return EncodingTpLatin1
}
func (*encodingLatin1) Transform(_ *bytes.Buffer, src []byte, _ Op) ([]byte, error) {
return src, nil
}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package charset
import (
"strings"
"golang.org/x/text/encoding"
"golang.org/x/text/encoding/charmap"
"golang.org/x/text/encoding/japanese"
"golang.org/x/text/encoding/korean"
"golang.org/x/text/encoding/simplifiedchinese"
"golang.org/x/text/encoding/traditionalchinese"
"golang.org/x/text/encoding/unicode"
)
// Lookup returns the encoding with the specified label, and its canonical
// name. It returns nil and the empty string if label is not one of the
// standard encodings for HTML. Matching is case-insensitive and ignores
// leading and trailing whitespace.
func Lookup(label string) (e encoding.Encoding, name string) {
label = strings.ToLower(strings.Trim(label, "\t\n\r\f "))
return lookup(label)
}
func lookup(label string) (e encoding.Encoding, name string) {
enc := encodings[label]
return enc.e, enc.name
}
var encodings = map[string]struct {
e encoding.Encoding
name string
}{
"unicode-1-1-utf-8": {encoding.Nop, "utf-8"},
"utf-8": {encoding.Nop, "utf-8"},
"utf8": {encoding.Nop, "utf-8"},
"utf8mb4": {encoding.Nop, "utf-8"},
"binary": {encoding.Nop, "binary"},
"866": {charmap.CodePage866, "ibm866"},
"cp866": {charmap.CodePage866, "ibm866"},
"csibm866": {charmap.CodePage866, "ibm866"},
"ibm866": {charmap.CodePage866, "ibm866"},
"csisolatin2": {charmap.ISO8859_2, "iso-8859-2"},
"iso-8859-2": {charmap.ISO8859_2, "iso-8859-2"},
"iso-ir-101": {charmap.ISO8859_2, "iso-8859-2"},
"iso8859-2": {charmap.ISO8859_2, "iso-8859-2"},
"iso88592": {charmap.ISO8859_2, "iso-8859-2"},
"iso_8859-2": {charmap.ISO8859_2, "iso-8859-2"},
"iso_8859-2:1987": {charmap.ISO8859_2, "iso-8859-2"},
"l2": {charmap.ISO8859_2, "iso-8859-2"},
"latin2": {charmap.ISO8859_2, "iso-8859-2"},
"csisolatin3": {charmap.ISO8859_3, "iso-8859-3"},
"iso-8859-3": {charmap.ISO8859_3, "iso-8859-3"},
"iso-ir-109": {charmap.ISO8859_3, "iso-8859-3"},
"iso8859-3": {charmap.ISO8859_3, "iso-8859-3"},
"iso88593": {charmap.ISO8859_3, "iso-8859-3"},
"iso_8859-3": {charmap.ISO8859_3, "iso-8859-3"},
"iso_8859-3:1988": {charmap.ISO8859_3, "iso-8859-3"},
"l3": {charmap.ISO8859_3, "iso-8859-3"},
"latin3": {charmap.ISO8859_3, "iso-8859-3"},
"csisolatin4": {charmap.ISO8859_4, "iso-8859-4"},
"iso-8859-4": {charmap.ISO8859_4, "iso-8859-4"},
"iso-ir-110": {charmap.ISO8859_4, "iso-8859-4"},
"iso8859-4": {charmap.ISO8859_4, "iso-8859-4"},
"iso88594": {charmap.ISO8859_4, "iso-8859-4"},
"iso_8859-4": {charmap.ISO8859_4, "iso-8859-4"},
"iso_8859-4:1988": {charmap.ISO8859_4, "iso-8859-4"},
"l4": {charmap.ISO8859_4, "iso-8859-4"},
"latin4": {charmap.ISO8859_4, "iso-8859-4"},
"csisolatincyrillic": {charmap.ISO8859_5, "iso-8859-5"},
"cyrillic": {charmap.ISO8859_5, "iso-8859-5"},
"iso-8859-5": {charmap.ISO8859_5, "iso-8859-5"},
"iso-ir-144": {charmap.ISO8859_5, "iso-8859-5"},
"iso8859-5": {charmap.ISO8859_5, "iso-8859-5"},
"iso88595": {charmap.ISO8859_5, "iso-8859-5"},
"iso_8859-5": {charmap.ISO8859_5, "iso-8859-5"},
"iso_8859-5:1988": {charmap.ISO8859_5, "iso-8859-5"},
"arabic": {charmap.ISO8859_6, "iso-8859-6"},
"asmo-708": {charmap.ISO8859_6, "iso-8859-6"},
"csiso88596e": {charmap.ISO8859_6, "iso-8859-6"},
"csiso88596i": {charmap.ISO8859_6, "iso-8859-6"},
"csisolatinarabic": {charmap.ISO8859_6, "iso-8859-6"},
"ecma-114": {charmap.ISO8859_6, "iso-8859-6"},
"iso-8859-6": {charmap.ISO8859_6, "iso-8859-6"},
"iso-8859-6-e": {charmap.ISO8859_6, "iso-8859-6"},
"iso-8859-6-i": {charmap.ISO8859_6, "iso-8859-6"},
"iso-ir-127": {charmap.ISO8859_6, "iso-8859-6"},
"iso8859-6": {charmap.ISO8859_6, "iso-8859-6"},
"iso88596": {charmap.ISO8859_6, "iso-8859-6"},
"iso_8859-6": {charmap.ISO8859_6, "iso-8859-6"},
"iso_8859-6:1987": {charmap.ISO8859_6, "iso-8859-6"},
"csisolatingreek": {charmap.ISO8859_7, "iso-8859-7"},
"ecma-118": {charmap.ISO8859_7, "iso-8859-7"},
"elot_928": {charmap.ISO8859_7, "iso-8859-7"},
"greek": {charmap.ISO8859_7, "iso-8859-7"},
"greek8": {charmap.ISO8859_7, "iso-8859-7"},
"iso-8859-7": {charmap.ISO8859_7, "iso-8859-7"},
"iso-ir-126": {charmap.ISO8859_7, "iso-8859-7"},
"iso8859-7": {charmap.ISO8859_7, "iso-8859-7"},
"iso88597": {charmap.ISO8859_7, "iso-8859-7"},
"iso_8859-7": {charmap.ISO8859_7, "iso-8859-7"},
"iso_8859-7:1987": {charmap.ISO8859_7, "iso-8859-7"},
"sun_eu_greek": {charmap.ISO8859_7, "iso-8859-7"},
"csiso88598e": {charmap.ISO8859_8, "iso-8859-8"},
"csisolatinhebrew": {charmap.ISO8859_8, "iso-8859-8"},
"hebrew": {charmap.ISO8859_8, "iso-8859-8"},
"iso-8859-8": {charmap.ISO8859_8, "iso-8859-8"},
"iso-8859-8-e": {charmap.ISO8859_8, "iso-8859-8"},
"iso-ir-138": {charmap.ISO8859_8, "iso-8859-8"},
"iso8859-8": {charmap.ISO8859_8, "iso-8859-8"},
"iso88598": {charmap.ISO8859_8, "iso-8859-8"},
"iso_8859-8": {charmap.ISO8859_8, "iso-8859-8"},
"iso_8859-8:1988": {charmap.ISO8859_8, "iso-8859-8"},
"visual": {charmap.ISO8859_8, "iso-8859-8"},
"csiso88598i": {charmap.ISO8859_8, "iso-8859-8-i"},
"iso-8859-8-i": {charmap.ISO8859_8, "iso-8859-8-i"},
"logical": {charmap.ISO8859_8, "iso-8859-8-i"},
"csisolatin6": {charmap.ISO8859_10, "iso-8859-10"},
"iso-8859-10": {charmap.ISO8859_10, "iso-8859-10"},
"iso-ir-157": {charmap.ISO8859_10, "iso-8859-10"},
"iso8859-10": {charmap.ISO8859_10, "iso-8859-10"},
"iso885910": {charmap.ISO8859_10, "iso-8859-10"},
"l6": {charmap.ISO8859_10, "iso-8859-10"},
"latin6": {charmap.ISO8859_10, "iso-8859-10"},
"iso-8859-13": {charmap.ISO8859_13, "iso-8859-13"},
"iso8859-13": {charmap.ISO8859_13, "iso-8859-13"},
"iso885913": {charmap.ISO8859_13, "iso-8859-13"},
"iso-8859-14": {charmap.ISO8859_14, "iso-8859-14"},
"iso8859-14": {charmap.ISO8859_14, "iso-8859-14"},
"iso885914": {charmap.ISO8859_14, "iso-8859-14"},
"csisolatin9": {charmap.ISO8859_15, "iso-8859-15"},
"iso-8859-15": {charmap.ISO8859_15, "iso-8859-15"},
"iso8859-15": {charmap.ISO8859_15, "iso-8859-15"},
"iso885915": {charmap.ISO8859_15, "iso-8859-15"},
"iso_8859-15": {charmap.ISO8859_15, "iso-8859-15"},
"l9": {charmap.ISO8859_15, "iso-8859-15"},
"iso-8859-16": {charmap.ISO8859_16, "iso-8859-16"},
"cskoi8r": {charmap.KOI8R, "koi8-r"},
"koi": {charmap.KOI8R, "koi8-r"},
"koi8": {charmap.KOI8R, "koi8-r"},
"koi8-r": {charmap.KOI8R, "koi8-r"},
"koi8_r": {charmap.KOI8R, "koi8-r"},
"koi8-u": {charmap.KOI8U, "koi8-u"},
"csmacintosh": {charmap.Macintosh, "macintosh"},
"mac": {charmap.Macintosh, "macintosh"},
"macintosh": {charmap.Macintosh, "macintosh"},
"x-mac-roman": {charmap.Macintosh, "macintosh"},
"dos-874": {charmap.Windows874, "windows-874"},
"iso-8859-11": {charmap.Windows874, "windows-874"},
"iso8859-11": {charmap.Windows874, "windows-874"},
"iso885911": {charmap.Windows874, "windows-874"},
"tis-620": {charmap.Windows874, "windows-874"},
"windows-874": {charmap.Windows874, "windows-874"},
"cp1250": {charmap.Windows1250, "windows-1250"},
"windows-1250": {charmap.Windows1250, "windows-1250"},
"x-cp1250": {charmap.Windows1250, "windows-1250"},
"cp1251": {charmap.Windows1251, "windows-1251"},
"windows-1251": {charmap.Windows1251, "windows-1251"},
"x-cp1251": {charmap.Windows1251, "windows-1251"},
"ansi_x3.4-1968": {charmap.Windows1252, "windows-1252"},
"ascii": {charmap.Windows1252, "windows-1252"},
"cp1252": {charmap.Windows1252, "windows-1252"},
"cp819": {charmap.Windows1252, "windows-1252"},
"csisolatin1": {charmap.Windows1252, "windows-1252"},
"ibm819": {charmap.Windows1252, "windows-1252"},
"iso-8859-1": {charmap.Windows1252, "windows-1252"},
"iso-ir-100": {charmap.Windows1252, "windows-1252"},
"iso8859-1": {charmap.Windows1252, "windows-1252"},
"iso88591": {charmap.Windows1252, "windows-1252"},
"iso_8859-1": {charmap.Windows1252, "windows-1252"},
"iso_8859-1:1987": {charmap.Windows1252, "windows-1252"},
"l1": {charmap.Windows1252, "windows-1252"},
"latin1": {charmap.Windows1252, "windows-1252"},
"us-ascii": {charmap.Windows1252, "windows-1252"},
"windows-1252": {charmap.Windows1252, "windows-1252"},
"x-cp1252": {charmap.Windows1252, "windows-1252"},
"cp1253": {charmap.Windows1253, "windows-1253"},
"windows-1253": {charmap.Windows1253, "windows-1253"},
"x-cp1253": {charmap.Windows1253, "windows-1253"},
"cp1254": {charmap.Windows1254, "windows-1254"},
"csisolatin5": {charmap.Windows1254, "windows-1254"},
"iso-8859-9": {charmap.Windows1254, "windows-1254"},
"iso-ir-148": {charmap.Windows1254, "windows-1254"},
"iso8859-9": {charmap.Windows1254, "windows-1254"},
"iso88599": {charmap.Windows1254, "windows-1254"},
"iso_8859-9": {charmap.Windows1254, "windows-1254"},
"iso_8859-9:1989": {charmap.Windows1254, "windows-1254"},
"l5": {charmap.Windows1254, "windows-1254"},
"latin5": {charmap.Windows1254, "windows-1254"},
"windows-1254": {charmap.Windows1254, "windows-1254"},
"x-cp1254": {charmap.Windows1254, "windows-1254"},
"cp1255": {charmap.Windows1255, "windows-1255"},
"windows-1255": {charmap.Windows1255, "windows-1255"},
"x-cp1255": {charmap.Windows1255, "windows-1255"},
"cp1256": {charmap.Windows1256, "windows-1256"},
"windows-1256": {charmap.Windows1256, "windows-1256"},
"x-cp1256": {charmap.Windows1256, "windows-1256"},
"cp1257": {charmap.Windows1257, "windows-1257"},
"windows-1257": {charmap.Windows1257, "windows-1257"},
"x-cp1257": {charmap.Windows1257, "windows-1257"},
"cp1258": {charmap.Windows1258, "windows-1258"},
"windows-1258": {charmap.Windows1258, "windows-1258"},
"x-cp1258": {charmap.Windows1258, "windows-1258"},
"x-mac-cyrillic": {charmap.MacintoshCyrillic, "x-mac-cyrillic"},
"x-mac-ukrainian": {charmap.MacintoshCyrillic, "x-mac-cyrillic"},
"chinese": {simplifiedchinese.GBK, "gbk"},
"csgb2312": {simplifiedchinese.GBK, "gbk"},
"csiso58gb231280": {simplifiedchinese.GBK, "gbk"},
"gb2312": {simplifiedchinese.GBK, "gbk"},
"gb_2312": {simplifiedchinese.GBK, "gbk"},
"gb_2312-80": {simplifiedchinese.GBK, "gbk"},
"gbk": {simplifiedchinese.GBK, "gbk"},
"iso-ir-58": {simplifiedchinese.GBK, "gbk"},
"x-gbk": {simplifiedchinese.GBK, "gbk"},
"gb18030": {simplifiedchinese.GB18030, "gb18030"},
"hz-gb-2312": {simplifiedchinese.HZGB2312, "hz-gb-2312"},
"big5": {traditionalchinese.Big5, "big5"},
"big5-hkscs": {traditionalchinese.Big5, "big5"},
"cn-big5": {traditionalchinese.Big5, "big5"},
"csbig5": {traditionalchinese.Big5, "big5"},
"x-x-big5": {traditionalchinese.Big5, "big5"},
"cseucpkdfmtjapanese": {japanese.EUCJP, "euc-jp"},
"euc-jp": {japanese.EUCJP, "euc-jp"},
"x-euc-jp": {japanese.EUCJP, "euc-jp"},
"csiso2022jp": {japanese.ISO2022JP, "iso-2022-jp"},
"iso-2022-jp": {japanese.ISO2022JP, "iso-2022-jp"},
"csshiftjis": {japanese.ShiftJIS, "shift_jis"},
"ms_kanji": {japanese.ShiftJIS, "shift_jis"},
"shift-jis": {japanese.ShiftJIS, "shift_jis"},
"shift_jis": {japanese.ShiftJIS, "shift_jis"},
"sjis": {japanese.ShiftJIS, "shift_jis"},
"windows-31j": {japanese.ShiftJIS, "shift_jis"},
"x-sjis": {japanese.ShiftJIS, "shift_jis"},
"cseuckr": {korean.EUCKR, "euc-kr"},
"csksc56011987": {korean.EUCKR, "euc-kr"},
"euc-kr": {korean.EUCKR, "euc-kr"},
"iso-ir-149": {korean.EUCKR, "euc-kr"},
"korean": {korean.EUCKR, "euc-kr"},
"ks_c_5601-1987": {korean.EUCKR, "euc-kr"},
"ks_c_5601-1989": {korean.EUCKR, "euc-kr"},
"ksc5601": {korean.EUCKR, "euc-kr"},
"ksc_5601": {korean.EUCKR, "euc-kr"},
"windows-949": {korean.EUCKR, "euc-kr"},
"csiso2022kr": {encoding.Replacement, "replacement"},
"iso-2022-kr": {encoding.Replacement, "replacement"},
"iso-2022-cn": {encoding.Replacement, "replacement"},
"iso-2022-cn-ext": {encoding.Replacement, "replacement"},
"utf-16be": {unicode.UTF16(unicode.BigEndian, unicode.IgnoreBOM), "utf-16be"},
"utf-16": {unicode.UTF16(unicode.LittleEndian, unicode.IgnoreBOM), "utf-16le"},
"utf-16le": {unicode.UTF16(unicode.LittleEndian, unicode.IgnoreBOM), "utf-16le"},
"x-user-defined": {charmap.XUserDefined, "x-user-defined"},
}
// Copyright 2021 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package charset
import (
"bytes"
"unicode/utf8"
"golang.org/x/text/encoding"
)
// EncodingUTF8Impl is the instance of encodingUTF8.
var EncodingUTF8Impl = &encodingUTF8{encodingBase{enc: encoding.Nop}}
// EncodingUTF8MB3StrictImpl is the instance of encodingUTF8MB3Strict.
var EncodingUTF8MB3StrictImpl = &encodingUTF8MB3Strict{
encodingUTF8{
encodingBase{
enc: encoding.Nop,
},
},
}
func init() {
EncodingUTF8Impl.self = EncodingUTF8Impl
EncodingUTF8MB3StrictImpl.self = EncodingUTF8MB3StrictImpl
}
// encodingUTF8 is TiDB's default encoding.
type encodingUTF8 struct {
encodingBase
}
// Name implements Encoding interface.
func (*encodingUTF8) Name() string {
return CharsetUTF8MB4
}
// Tp implements Encoding interface.
func (*encodingUTF8) Tp() EncodingTp {
return EncodingTpUTF8
}
// Peek implements Encoding interface.
func (*encodingUTF8) Peek(src []byte) []byte {
nextLen := 4
if len(src) == 0 || src[0] < 0x80 {
nextLen = 1
} else if src[0] < 0xe0 {
nextLen = 2
} else if src[0] < 0xf0 {
nextLen = 3
}
if len(src) < nextLen {
return src
}
return src[:nextLen]
}
func (*encodingUTF8) MbLen(bs string) int {
_, size := utf8.DecodeRuneInString(bs)
if size <= 1 {
return 0
}
return size
}
// IsValid implements Encoding interface.
func (e *encodingUTF8) IsValid(src []byte) bool {
if utf8.Valid(src) {
return true
}
return e.encodingBase.IsValid(src)
}
// Transform implements Encoding interface.
func (e *encodingUTF8) Transform(dest *bytes.Buffer, src []byte, op Op) ([]byte, error) {
if e.IsValid(src) {
return src, nil
}
return e.encodingBase.Transform(dest, src, op)
}
// Foreach implements Encoding interface.
func (*encodingUTF8) Foreach(src []byte, _ Op, fn func(from, to []byte, ok bool) bool) {
var rv rune
for i, w := 0, 0; i < len(src); i += w {
rv, w = utf8.DecodeRune(src[i:])
meetErr := rv == utf8.RuneError && w == 1
if !fn(src[i:i+w], src[i:i+w], !meetErr) {
return
}
}
}
// encodingUTF8MB3Strict is the strict mode of EncodingUTF8MB3.
// MB4 characters are considered invalid.
type encodingUTF8MB3Strict struct {
encodingUTF8
}
// IsValid implements Encoding interface.
func (e *encodingUTF8MB3Strict) IsValid(src []byte) bool {
return e.encodingBase.IsValid(src)
}
// Foreach implements Encoding interface.
func (*encodingUTF8MB3Strict) Foreach(src []byte, _ Op, fn func(srcCh, dstCh []byte, ok bool) bool) {
for i, w := 0, 0; i < len(src); i += w {
var rv rune
rv, w = utf8.DecodeRune(src[i:])
meetErr := (rv == utf8.RuneError && w == 1) || w > 3
if !fn(src[i:i+w], src[i:i+w], !meetErr) {
return
}
}
}
// Transform implements Encoding interface.
func (e *encodingUTF8MB3Strict) Transform(dest *bytes.Buffer, src []byte, op Op) ([]byte, error) {
if e.IsValid(src) {
return src, nil
}
return e.encodingBase.Transform(dest, src, op)
}
// Copyright 2019 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package parser
import (
"bytes"
"crypto/sha256"
"encoding/hex"
hash2 "hash"
"strings"
"sync"
"unsafe"
"github.com/pingcap/errors"
"github.com/pingcap/tidb/pkg/parser/charset"
)
// Digest stores the fixed length hash value.
type Digest struct {
b []byte
str string
}
// NewDigest returns a new digest.
func NewDigest(b []byte) *Digest {
return &Digest{
b: b,
str: hex.EncodeToString(b),
}
}
// String returns the digest hex string.
func (d *Digest) String() string {
return d.str
}
// Bytes returns the digest byte slice.
func (d *Digest) Bytes() []byte {
return d.b
}
// DigestHash generates the digest of statements.
// it will generate a hash on normalized form of statement text
// which removes general property of a statement but keeps specific property.
//
// for example: both DigestHash('select 1') and DigestHash('select 2') => e1c71d1661ae46e09b7aaec1c390957f0d6260410df4e4bc71b9c8d681021471
//
// Deprecated: It is logically consistent with NormalizeDigest.
func DigestHash(sql string) (digest *Digest) {
d := digesterPool.Get().(*sqlDigester)
digest = d.doDigest(sql)
digesterPool.Put(d)
return
}
// DigestNormalized generates the digest of a normalized sql.
// it will generate a hash on a normalized sql.
// Normalize + DigestNormalized equals to NormalizeDigest.
//
// for example: DigestNormalized('select ?')
// DigestNormalized should be called with a normalized SQL string (like 'select ?') generated by function Normalize.
// do not call with SQL which is not normalized, DigestNormalized('select 1') and DigestNormalized('select 2') is not the same
func DigestNormalized(normalized string) (digest *Digest) {
d := digesterPool.Get().(*sqlDigester)
digest = d.doDigestNormalized(normalized)
digesterPool.Put(d)
return
}
// Normalize generates the normalized statements.
// it will get normalized form of statement text
// which removes general property of a statement but keeps specific property.
// possible values for 'redact' is "OFF", "ON" or "MARKER". Passing "" is seen as "OFF".
//
// when "OFF", it is returned as is
// for example, when "ON": Normalize('select 1 from b where a = 1') => 'select ? from b where a = ?'
// for example, when "MARKER": Normalize('select 1 from b where a = 1') => 'select ‹1› from b where a = ‹1›'
func Normalize(sql string, redact string) (result string) {
if redact == "" || redact == errors.RedactLogDisable {
return sql
}
d := digesterPool.Get().(*sqlDigester)
result = d.doNormalize(sql, redact, false)
digesterPool.Put(d)
return
}
// NormalizeForBinding generates the normalized statements with additional binding rules
// it will get normalized form of statement text
// which removes general property of a statement but keeps specific property.
//
// for example: NormalizeForBinding('select 1 from b where a = 1') => 'select ? from b where a = ?'
func NormalizeForBinding(sql string, forPlanReplayerReload bool) (result string) {
d := digesterPool.Get().(*sqlDigester)
result = d.doNormalizeForBinding(sql, false, forPlanReplayerReload)
digesterPool.Put(d)
return
}
// NormalizeKeepHint generates the normalized statements, but keep the hints.
// it will get normalized form of statement text with hints.
// which removes general property of a statement but keeps specific property.
//
// for example: Normalize('select /*+ use_index(t, primary) */ 1 from b where a = 1') => 'select /*+ use_index(t, primary) */ ? from b where a = ?'
func NormalizeKeepHint(sql string) (result string) {
d := digesterPool.Get().(*sqlDigester)
result = d.doNormalize(sql, errors.RedactLogEnable, true)
digesterPool.Put(d)
return
}
// NormalizeDigest combines Normalize and DigestNormalized into one method.
func NormalizeDigest(sql string) (normalized string, digest *Digest) {
d := digesterPool.Get().(*sqlDigester)
normalized, digest = d.doNormalizeDigest(sql)
digesterPool.Put(d)
return
}
// NormalizeDigestForBinding combines Normalize and DigestNormalized into one method with additional binding rules.
func NormalizeDigestForBinding(sql string) (normalized string, digest *Digest) {
d := digesterPool.Get().(*sqlDigester)
normalized, digest = d.doNormalizeDigestForBinding(sql)
digesterPool.Put(d)
return
}
var digesterPool = sync.Pool{
New: func() interface{} {
return &sqlDigester{
lexer: NewScanner(""),
hasher: sha256.New(),
}
},
}
// sqlDigester is used to compute DigestHash or Normalize for sql.
type sqlDigester struct {
buffer bytes.Buffer
lexer *Scanner
hasher hash2.Hash
tokens tokenDeque
}
func (d *sqlDigester) doDigestNormalized(normalized string) (digest *Digest) {
b := unsafe.Slice(unsafe.StringData(normalized), len(normalized))
d.hasher.Write(b)
digest = NewDigest(d.hasher.Sum(nil))
d.hasher.Reset()
return
}
func (d *sqlDigester) doDigest(sql string) (digest *Digest) {
d.normalize(sql, errors.RedactLogEnable, false, false, false)
d.hasher.Write(d.buffer.Bytes())
d.buffer.Reset()
digest = NewDigest(d.hasher.Sum(nil))
d.hasher.Reset()
return
}
func (d *sqlDigester) doNormalize(sql string, redact string, keepHint bool) (result string) {
d.normalize(sql, redact, keepHint, false, false)
result = d.buffer.String()
d.buffer.Reset()
return
}
func (d *sqlDigester) doNormalizeForBinding(sql string, keepHint bool, forPlanReplayerReload bool) (result string) {
d.normalize(sql, errors.RedactLogEnable, keepHint, true, forPlanReplayerReload)
result = d.buffer.String()
d.buffer.Reset()
return
}
func (d *sqlDigester) doNormalizeDigest(sql string) (normalized string, digest *Digest) {
d.normalize(sql, errors.RedactLogEnable, false, false, false)
normalized = d.buffer.String()
d.hasher.Write(d.buffer.Bytes())
d.buffer.Reset()
digest = NewDigest(d.hasher.Sum(nil))
d.hasher.Reset()
return
}
func (d *sqlDigester) doNormalizeDigestForBinding(sql string) (normalized string, digest *Digest) {
d.normalize(sql, errors.RedactLogEnable, false, true, false)
normalized = d.buffer.String()
d.hasher.Write(d.buffer.Bytes())
d.buffer.Reset()
digest = NewDigest(d.hasher.Sum(nil))
d.hasher.Reset()
return
}
const (
// genericSymbol presents parameter holder ("?") in statement
// it can be any value as long as it is not repeated with other tokens.
genericSymbol = -1
// genericSymbolList presents parameter holder lists ("?, ?, ...") in statement
// it can be any value as long as it is not repeated with other tokens.
genericSymbolList = -2
)
func (d *sqlDigester) normalize(sql string, redact string, keepHint bool, forBinding bool, forPlanReplayerReload bool) {
d.lexer.reset(sql)
d.lexer.setKeepHint(keepHint)
for {
tok, pos, lit := d.lexer.scan()
if tok == invalid {
break
}
if pos.Offset == len(sql) || (pos.Offset == len(sql)-1 && sql[pos.Offset] == ';') {
break
}
currTok := token{tok, strings.ToLower(lit)}
if !keepHint && d.reduceOptimizerHint(&currTok) {
continue
}
d.reduceLit(&currTok, redact, forBinding, forPlanReplayerReload)
if forPlanReplayerReload {
// Apply for plan replayer to match specific rules, changing IN (...) to IN (?). This can avoid plan replayer load failures caused by parse errors.
d.replaceSingleLiteralWithInList(&currTok)
} else if forBinding {
// Apply binding matching specific rules, IN (?) => IN ( ... ) #44298
d.reduceInListWithSingleLiteral(&currTok)
// In (Row(...)) => In (...) #51222
d.reduceInRowListWithSingleLiteral(&currTok)
}
if currTok.tok == identifier {
if strings.HasPrefix(currTok.lit, "_") {
_, err := charset.GetCharsetInfo(currTok.lit[1:])
if err == nil {
currTok.tok = underscoreCS
goto APPEND
}
}
if tok1 := d.lexer.isTokenIdentifier(currTok.lit, pos.Offset); tok1 != 0 {
currTok.tok = tok1
}
}
APPEND:
d.tokens.pushBack(currTok)
}
d.lexer.reset("")
for i, token := range d.tokens {
if i > 0 {
d.buffer.WriteRune(' ')
}
if token.tok == singleAtIdentifier {
d.buffer.WriteString("@")
d.buffer.WriteString(token.lit)
} else if token.tok == underscoreCS {
d.buffer.WriteString("(_charset)")
} else if token.tok == identifier || token.tok == quotedIdentifier {
d.buffer.WriteByte('`')
d.buffer.WriteString(token.lit)
d.buffer.WriteByte('`')
} else {
d.buffer.WriteString(token.lit)
}
}
d.tokens.reset()
}
func (d *sqlDigester) reduceOptimizerHint(tok *token) (reduced bool) {
// ignore /*+..*/
if tok.tok == hintComment {
return
}
// ignore force/use/ignore index(x)
if tok.lit == "index" {
toks := d.tokens.back(1)
if len(toks) > 0 {
switch strings.ToLower(toks[0].lit) {
case "force", "use", "ignore":
for {
tok, _, lit := d.lexer.scan()
if (tok == 0 && d.lexer.r.eof()) || tok == invalid {
break
}
if lit == ")" {
reduced = true
d.tokens.popBack(1)
break
}
}
return
}
}
}
// ignore straight_join
if tok.lit == "straight_join" {
tok.lit = "join"
return
}
return
}
func (d *sqlDigester) reduceLit(currTok *token, redact string, forBinding bool, forPlanReplayer bool) {
if !d.isLit(*currTok) {
return
}
if redact == errors.RedactLogMarker && !forBinding && !forPlanReplayer {
switch currTok.lit {
case "?", "*":
return
}
input := currTok.lit
b := &strings.Builder{}
b.Grow(len(input))
_, _ = b.WriteRune('‹')
for _, c := range input {
if c == '‹' || c == '›' {
_, _ = b.WriteRune(c)
_, _ = b.WriteRune(c)
} else {
_, _ = b.WriteRune(c)
}
}
_, _ = b.WriteRune('›')
currTok.lit = b.String()
return
}
// count(*) => count(?)
if currTok.lit == "*" {
if d.isStarParam() {
currTok.tok = genericSymbol
currTok.lit = "?"
}
return
}
// "-x" or "+x" => "x"
if d.isPrefixByUnary(currTok.tok) {
d.tokens.popBack(1)
}
// "?, ?, ?, ?" => "..."
last2 := d.tokens.back(2)
if d.isGenericList(last2) {
d.tokens.popBack(2)
currTok.tok = genericSymbolList
currTok.lit = "..."
return
}
// "_charset ?, _charset ?," => "..."
last4 := d.tokens.back(4)
if toPop := d.isGenericListWithCharset(last4); toPop != 0 {
d.tokens.popBack(toPop)
currTok.tok = genericSymbolList
currTok.lit = "..."
return
}
// Aggressive reduce lists.
if d.isGenericLists(last4) {
d.tokens.popBack(4)
currTok.tok = genericSymbolList
currTok.lit = "..."
return
}
// reduce "In (row(...), row(...))" to "In (row(...))"
// final, it will be reduced to "In (...)". Issue: #51222
if forBinding {
last9 := d.tokens.back(9)
if d.isGenericRowListsWithIn(last9) {
d.tokens.popBack(5)
currTok.tok = genericSymbolList
currTok.lit = "..."
return
}
}
// order by n => order by n
if currTok.tok == intLit {
if d.isOrderOrGroupBy() {
return
}
}
// 2 => ?
currTok.tok = genericSymbol
currTok.lit = "?"
}
func (d *sqlDigester) isGenericLists(last4 []token) bool {
if len(last4) < 4 {
return false
}
if !(last4[0].tok == genericSymbol || last4[0].tok == genericSymbolList) {
return false
}
if last4[1].lit != ")" {
return false
}
if !d.isComma(last4[2]) {
return false
}
if last4[3].lit != "(" {
return false
}
return true
}
// In (Row(...), Row(...)) => In (Row(...))
func (d *sqlDigester) isGenericRowListsWithIn(last9 []token) bool {
if len(last9) < 7 {
return false
}
if !d.isInKeyword(last9[0]) {
return false
}
if last9[1].lit != "(" {
return false
}
if !d.isRowKeyword(last9[2]) {
return false
}
if last9[3].lit != "(" {
return false
}
if !(last9[4].tok == genericSymbol || last9[4].tok == genericSymbolList) {
return false
}
if last9[5].lit != ")" {
return false
}
if !d.isComma(last9[6]) {
return false
}
if !d.isRowKeyword(last9[7]) {
return false
}
if last9[8].lit != "(" {
return false
}
return true
}
// IN (...) => IN (?) Issue: #43192
func (d *sqlDigester) replaceSingleLiteralWithInList(currTok *token) {
last5 := d.tokens.back(5)
if len(last5) == 5 &&
d.isInKeyword(last5[0]) &&
d.isLeftParen(last5[1]) &&
last5[2].lit == "." &&
last5[3].lit == "." &&
last5[4].lit == "." &&
d.isRightParen(*currTok) {
d.tokens.popBack(3)
d.tokens.pushBack(token{genericSymbol, "?"})
return
}
}
// IN (?) => IN (...) Issue: #44298
func (d *sqlDigester) reduceInListWithSingleLiteral(currTok *token) {
last3 := d.tokens.back(3)
if len(last3) == 3 &&
d.isInKeyword(last3[0]) &&
d.isLeftParen(last3[1]) &&
last3[2].tok == genericSymbol &&
d.isRightParen(*currTok) {
d.tokens.popBack(1)
d.tokens.pushBack(token{genericSymbolList, "..."})
return
}
}
// In (Row(...)) => In (...) #51222
func (d *sqlDigester) reduceInRowListWithSingleLiteral(currTok *token) {
last5 := d.tokens.back(6)
if len(last5) == 6 &&
d.isInKeyword(last5[0]) &&
d.isLeftParen(last5[1]) &&
d.isRowKeyword(last5[2]) &&
d.isLeftParen(last5[3]) &&
(last5[4].tok == genericSymbolList || last5[4].tok == genericSymbol) &&
d.isRightParen(last5[5]) &&
d.isRightParen(*currTok) {
d.tokens.popBack(4)
d.tokens.pushBack(token{genericSymbolList, "..."})
return
}
}
func (d *sqlDigester) isPrefixByUnary(currTok int) (isUnary bool) {
if !d.isNumLit(currTok) {
return
}
last := d.tokens.back(1)
if last == nil {
return
}
// a[0] != '-' and a[0] != '+'
if last[0].lit != "-" && last[0].lit != "+" {
return
}
last2 := d.tokens.back(2)
if last2 == nil {
isUnary = true
return
}
// '(-x' or ',-x' or ',+x' or '--x' or '+-x'
switch last2[0].lit {
case "(", ",", "+", "-", ">=", "is", "<=", "=", "<", ">":
isUnary = true
default:
}
// select -x or select +x
last2Lit := strings.ToLower(last2[0].lit)
if last2Lit == "select" {
isUnary = true
}
return
}
func (d *sqlDigester) isGenericList(last2 []token) (generic bool) {
if len(last2) < 2 {
return false
}
if !d.isComma(last2[1]) {
return false
}
switch last2[0].tok {
case genericSymbol, genericSymbolList:
generic = true
default:
}
return
}
func (d *sqlDigester) isGenericListWithCharset(last []token) int {
if len(last) < 3 {
return 0
}
toPop := 0
if len(last) >= 4 {
// elminate the first _charset
if last[0].tok == underscoreCS {
toPop = 1
}
last = last[1:]
}
if last[2].tok != underscoreCS {
return 0
}
if !d.isGenericList(last[:2]) {
return 0
}
return toPop + 3
}
func (d *sqlDigester) isOrderOrGroupBy() (orderOrGroupBy bool) {
var (
last []token
n int
)
// skip number item lists, e.g. "order by 1, 2, 3" should NOT convert to "order by ?, ?, ?"
for n = 2; ; n += 2 {
last = d.tokens.back(n)
if len(last) < 2 {
return false
}
if !d.isComma(last[1]) {
break
}
}
// handle group by number item list surround by "()", e.g. "group by (1, 2)" should not convert to "group by (?, ?)"
if last[1].lit == "(" {
last = d.tokens.back(n + 1)
if len(last) < 2 {
return false
}
}
orderOrGroupBy = (last[0].lit == "order" || last[0].lit == "group") && last[1].lit == "by"
return
}
func (d *sqlDigester) isStarParam() (starParam bool) {
last := d.tokens.back(1)
if last == nil {
starParam = false
return
}
starParam = last[0].lit == "("
return
}
func (d *sqlDigester) isLit(t token) (beLit bool) {
tok := t.tok
if d.isNumLit(tok) || tok == stringLit || tok == bitLit || tok == paramMarker {
beLit = true
} else if t.lit == "*" {
beLit = true
} else if tok == null || (tok == identifier && strings.ToLower(t.lit) == "null") {
beLit = true
}
return
}
func (*sqlDigester) isNumLit(tok int) (beNum bool) {
switch tok {
case intLit, decLit, floatLit, hexLit:
beNum = true
default:
}
return
}
func (*sqlDigester) isComma(tok token) (isComma bool) {
isComma = tok.lit == ","
return
}
func (*sqlDigester) isLeftParen(tok token) (isLeftParen bool) {
isLeftParen = tok.lit == "("
return
}
func (*sqlDigester) isRightParen(tok token) (isLeftParen bool) {
isLeftParen = tok.lit == ")"
return
}
func (*sqlDigester) isInKeyword(tok token) (isInKeyword bool) {
isInKeyword = tok.lit == "in"
return
}
func (*sqlDigester) isRowKeyword(tok token) (isRowKeyword bool) {
isRowKeyword = tok.lit == "row"
return
}
type token struct {
tok int
lit string
}
type tokenDeque []token
func (s *tokenDeque) reset() {
*s = (*s)[:0]
}
func (s *tokenDeque) pushBack(t token) {
*s = append(*s, t)
}
func (s *tokenDeque) popBack(n int) (t []token) {
if len(*s) < n {
t = nil
return
}
t = (*s)[len(*s)-n:]
*s = (*s)[:len(*s)-n]
return
}
func (s *tokenDeque) back(n int) (t []token) {
if len(*s)-n < 0 {
return
}
t = (*s)[len(*s)-n:]
return
}
// Copyright 2023 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
// Package duration provides a customized duration, which supports unit 'd', 'h' and 'm'
package duration
import (
"strconv"
"time"
"unicode"
"github.com/pingcap/errors"
)
func readFloat(s string) (float64, string, error) {
numbers := ""
for pos, ch := range s {
if !unicode.IsDigit(ch) && ch != '.' {
numbers = s[:pos]
break
}
}
if len(numbers) > 0 {
i, err := strconv.ParseFloat(numbers, 64)
if err != nil {
return 0, s, err
}
return i, s[len(numbers):], nil
}
return 0, s, errors.New("fail to read an integer")
}
// ParseDuration parses the duration which contains 'd', 'h' and 'm'
func ParseDuration(s string) (time.Duration, error) {
duration := time.Duration(0)
if s == "0" {
return 0, nil
}
var err error
var i float64
for len(s) > 0 {
i, s, err = readFloat(s)
if err != nil {
return 0, err
}
switch s[0] {
case 'd':
duration += time.Duration(i * float64(time.Hour*24))
case 'h':
duration += time.Duration(i * float64(time.Hour))
case 'm':
duration += time.Duration(i * float64(time.Minute))
default:
return 0, errors.Errorf("unknown unit %c", s[0])
}
s = s[1:]
}
return duration, nil
}
// Copyright (c) 2014 The sortutil Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSES/STRUTIL-LICENSE file.
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package format
import (
"bytes"
"fmt"
"io"
"slices"
"strings"
)
const (
st0 = iota
stBOL
stPERC
stBOLPERC
)
// Formatter is an io.Writer extended formatter by a fmt.Printf like function Format.
type Formatter interface {
io.Writer
Format(format string, args ...any) (n int, errno error)
}
type indentFormatter struct {
io.Writer
indent []byte
indentLevel int
state int
}
var replace = map[rune]string{
'\000': "\\0",
'\'': "''",
'\n': "\\n",
'\r': "\\r",
}
// IndentFormatter returns a new Formatter which interprets %i and %u in the
// Format() formats string as indent and unindent commands. The commands can
// nest. The Formatter writes to io.Writer 'w' and inserts one 'indent'
// string per current indent level value.
// Behaviour of commands reaching negative indent levels is undefined.
//
// IndentFormatter(os.Stdout, "\t").Format("abc%d%%e%i\nx\ny\n%uz\n", 3)
//
// output:
//
// abc3%e
// x
// y
// z
//
// The Go quoted string literal form of the above is:
//
// "abc%%e\n\tx\n\tx\nz\n"
//
// The commands can be scattered between separate invocations of Format(),
// i.e. the formatter keeps track of the indent level and knows if it is
// positioned on start of a line and should emit indentation(s).
// The same output as above can be produced by e.g.:
//
// f := IndentFormatter(os.Stdout, " ")
// f.Format("abc%d%%e%i\nx\n", 3)
// f.Format("y\n%uz\n")
func IndentFormatter(w io.Writer, indent string) Formatter {
return &indentFormatter{w, []byte(indent), 0, stBOL}
}
func (f *indentFormatter) format(flat bool, format string, args ...any) (n int, errno error) {
var buf = make([]byte, 0)
for i := range len(format) {
c := format[i]
switch f.state {
case st0:
switch c {
case '\n':
cc := c
if flat && f.indentLevel != 0 {
cc = ' '
}
buf = append(buf, cc)
f.state = stBOL
case '%':
f.state = stPERC
default:
buf = append(buf, c)
}
case stBOL:
switch c {
case '\n':
cc := c
if flat && f.indentLevel != 0 {
cc = ' '
}
buf = append(buf, cc)
case '%':
f.state = stBOLPERC
default:
if !flat {
for range f.indentLevel {
buf = append(buf, f.indent...)
}
}
buf = append(buf, c)
f.state = st0
}
case stBOLPERC:
switch c {
case 'i':
f.indentLevel++
f.state = stBOL
case 'u':
f.indentLevel--
f.state = stBOL
default:
if !flat {
for range f.indentLevel {
buf = append(buf, f.indent...)
}
}
buf = append(buf, '%', c)
f.state = st0
}
case stPERC:
switch c {
case 'i':
f.indentLevel++
f.state = st0
case 'u':
f.indentLevel--
f.state = st0
default:
buf = append(buf, '%', c)
f.state = st0
}
default:
panic("unexpected state")
}
}
switch f.state {
case stPERC, stBOLPERC:
buf = append(buf, '%')
}
return fmt.Fprintf(f, string(buf), args...)
}
// Format implements Format interface.
func (f *indentFormatter) Format(format string, args ...any) (n int, errno error) {
return f.format(false, format, args...)
}
type flatFormatter indentFormatter
// FlatFormatter returns a newly created Formatter with the same functionality as the one returned
// by IndentFormatter except it allows a newline in the 'format' string argument of Format
// to pass through if the indent level is current zero.
//
// If the indent level is non-zero then such new lines are changed to a space character.
// There is no indent string, the %i and %u format verbs are used solely to determine the indent level.
//
// The FlatFormatter is intended for flattening of normally nested structure textual representation to
// a one top level structure per line form.
//
// FlatFormatter(os.Stdout, " ").Format("abc%d%%e%i\nx\ny\n%uz\n", 3)
//
// output in the form of a Go quoted string literal:
//
// "abc3%%e x y z\n"
func FlatFormatter(w io.Writer) Formatter {
return (*flatFormatter)(IndentFormatter(w, "").(*indentFormatter))
}
// Format implements Format interface.
func (f *flatFormatter) Format(format string, args ...any) (n int, errno error) {
return (*indentFormatter)(f).format(true, format, args...)
}
// OutputFormat output escape character with backslash.
func OutputFormat(s string) string {
var buf bytes.Buffer
for _, old := range s {
if newVal, ok := replace[old]; ok {
buf.WriteString(newVal)
continue
}
buf.WriteRune(old)
}
return buf.String()
}
// RestoreFlags mark the Restore format
type RestoreFlags uint64
// Mutually exclusive group of `RestoreFlags`:
// [RestoreStringSingleQuotes, RestoreStringDoubleQuotes]
// [RestoreKeyWordUppercase, RestoreKeyWordLowercase]
// [RestoreNameUppercase, RestoreNameLowercase]
// [RestoreNameDoubleQuotes, RestoreNameBackQuotes]
// The flag with the left position in each group has a higher priority.
const (
RestoreStringSingleQuotes RestoreFlags = 1 << iota
RestoreStringDoubleQuotes
RestoreStringEscapeBackslash
RestoreKeyWordUppercase
RestoreKeyWordLowercase
RestoreNameUppercase
RestoreNameLowercase
RestoreNameDoubleQuotes
RestoreNameBackQuotes
RestoreSpacesAroundBinaryOperation
RestoreBracketAroundBinaryOperation
RestoreStringWithoutCharset
RestoreStringWithoutDefaultCharset
RestoreTiDBSpecialComment
SkipPlacementRuleForRestore
RestoreWithTTLEnableOff
RestoreWithoutSchemaName
RestoreWithoutTableName
RestoreForNonPrepPlanCache
RestoreBracketAroundBetweenExpr
)
const (
// DefaultRestoreFlags is the default value of RestoreFlags.
DefaultRestoreFlags = RestoreStringSingleQuotes | RestoreKeyWordUppercase | RestoreNameBackQuotes
)
func (rf RestoreFlags) has(flag RestoreFlags) bool {
return rf&flag != 0
}
// HasWithoutSchemaNameFlag returns a boolean indicating when `rf` has `RestoreWithoutSchemaName` flag.
func (rf RestoreFlags) HasWithoutSchemaNameFlag() bool {
return rf.has(RestoreWithoutSchemaName)
}
// HasWithoutTableNameFlag returns a boolean indicating when `rf` has `RestoreWithoutTableName` flag.
func (rf RestoreFlags) HasWithoutTableNameFlag() bool {
return rf.has(RestoreWithoutTableName)
}
// HasStringSingleQuotesFlag returns a boolean indicating when `rf` has `RestoreStringSingleQuotes` flag.
func (rf RestoreFlags) HasStringSingleQuotesFlag() bool {
return rf.has(RestoreStringSingleQuotes)
}
// HasStringDoubleQuotesFlag returns a boolean indicating whether `rf` has `RestoreStringDoubleQuotes` flag.
func (rf RestoreFlags) HasStringDoubleQuotesFlag() bool {
return rf.has(RestoreStringDoubleQuotes)
}
// HasStringEscapeBackslashFlag returns a boolean indicating whether `rf` has `RestoreStringEscapeBackslash` flag.
func (rf RestoreFlags) HasStringEscapeBackslashFlag() bool {
return rf.has(RestoreStringEscapeBackslash)
}
// HasKeyWordUppercaseFlag returns a boolean indicating whether `rf` has `RestoreKeyWordUppercase` flag.
func (rf RestoreFlags) HasKeyWordUppercaseFlag() bool {
return rf.has(RestoreKeyWordUppercase)
}
// HasKeyWordLowercaseFlag returns a boolean indicating whether `rf` has `RestoreKeyWordLowercase` flag.
func (rf RestoreFlags) HasKeyWordLowercaseFlag() bool {
return rf.has(RestoreKeyWordLowercase)
}
// HasNameUppercaseFlag returns a boolean indicating whether `rf` has `RestoreNameUppercase` flag.
func (rf RestoreFlags) HasNameUppercaseFlag() bool {
return rf.has(RestoreNameUppercase)
}
// HasNameLowercaseFlag returns a boolean indicating whether `rf` has `RestoreNameLowercase` flag.
func (rf RestoreFlags) HasNameLowercaseFlag() bool {
return rf.has(RestoreNameLowercase)
}
// HasNameDoubleQuotesFlag returns a boolean indicating whether `rf` has `RestoreNameDoubleQuotes` flag.
func (rf RestoreFlags) HasNameDoubleQuotesFlag() bool {
return rf.has(RestoreNameDoubleQuotes)
}
// HasNameBackQuotesFlag returns a boolean indicating whether `rf` has `RestoreNameBackQuotes` flag.
func (rf RestoreFlags) HasNameBackQuotesFlag() bool {
return rf.has(RestoreNameBackQuotes)
}
// HasSpacesAroundBinaryOperationFlag returns a boolean indicating
// whether `rf` has `RestoreSpacesAroundBinaryOperation` flag.
func (rf RestoreFlags) HasSpacesAroundBinaryOperationFlag() bool {
return rf.has(RestoreSpacesAroundBinaryOperation)
}
// HasRestoreBracketAroundBinaryOperation returns a boolean indicating
// whether `rf` has `RestoreBracketAroundBinaryOperation` flag.
func (rf RestoreFlags) HasRestoreBracketAroundBinaryOperation() bool {
return rf.has(RestoreBracketAroundBinaryOperation)
}
// HasStringWithoutDefaultCharset returns a boolean indicating
// whether `rf` has `RestoreStringWithoutDefaultCharset` flag.
func (rf RestoreFlags) HasStringWithoutDefaultCharset() bool {
return rf.has(RestoreStringWithoutDefaultCharset)
}
// HasRestoreBracketAroundBetweenExpr returns a boolean indicating
// whether `rf` has `RestoreBracketAroundBetweenExpr` flag.
func (rf RestoreFlags) HasRestoreBracketAroundBetweenExpr() bool {
return rf.has(RestoreBracketAroundBetweenExpr)
}
// HasStringWithoutCharset returns a boolean indicating whether `rf` has `RestoreStringWithoutCharset` flag.
func (rf RestoreFlags) HasStringWithoutCharset() bool {
return rf.has(RestoreStringWithoutCharset)
}
// HasTiDBSpecialCommentFlag returns a boolean indicating whether `rf` has `RestoreTiDBSpecialComment` flag.
func (rf RestoreFlags) HasTiDBSpecialCommentFlag() bool {
return rf.has(RestoreTiDBSpecialComment)
}
// HasSkipPlacementRuleForRestoreFlag returns a boolean indicating whether `rf` has `SkipPlacementRuleForRestore` flag.
func (rf RestoreFlags) HasSkipPlacementRuleForRestoreFlag() bool {
return rf.has(SkipPlacementRuleForRestore)
}
// HasRestoreWithTTLEnableOff returns a boolean indicating
// whether to force set TTL_ENABLE='OFF' when restoring a TTL table
func (rf RestoreFlags) HasRestoreWithTTLEnableOff() bool {
return rf.has(RestoreWithTTLEnableOff)
}
// HasRestoreForNonPrepPlanCache returns a boolean indicating whether `rf` has `RestoreForNonPrepPlanCache` flag.
func (rf RestoreFlags) HasRestoreForNonPrepPlanCache() bool {
return rf.has(RestoreForNonPrepPlanCache)
}
// RestoreWriter is the interface for `Restore` to write.
type RestoreWriter interface {
io.Writer
io.StringWriter
}
// RestoreCtx is `Restore` context to hold flags and writer.
type RestoreCtx struct {
Flags RestoreFlags
In RestoreWriter
DefaultDB string
CTERestorer
}
// NewRestoreCtx returns a new `RestoreCtx`.
func NewRestoreCtx(flags RestoreFlags, in RestoreWriter) *RestoreCtx {
return &RestoreCtx{Flags: flags, In: in, DefaultDB: ""}
}
// WriteKeyWord writes the `keyWord` into writer.
// `keyWord` will be converted format(uppercase and lowercase for now) according to `RestoreFlags`.
func (ctx *RestoreCtx) WriteKeyWord(keyWord string) {
switch {
case ctx.Flags.HasKeyWordUppercaseFlag():
keyWord = strings.ToUpper(keyWord)
case ctx.Flags.HasKeyWordLowercaseFlag():
keyWord = strings.ToLower(keyWord)
}
ctx.In.WriteString(keyWord)
}
// WriteWithSpecialComments writes a string with a special comment wrapped.
func (ctx *RestoreCtx) WriteWithSpecialComments(featureID string, fn func() error) error {
if !ctx.Flags.HasTiDBSpecialCommentFlag() {
return fn()
}
ctx.WritePlain("/*T!")
if len(featureID) != 0 {
ctx.WritePlainf("[%s]", featureID)
}
ctx.WritePlain(" ")
if err := fn(); err != nil {
return err
}
ctx.WritePlain(" */")
return nil
}
// WriteKeyWordWithSpecialComments writes a keyword with a special comment wrapped.
func (ctx *RestoreCtx) WriteKeyWordWithSpecialComments(featureID string, keyWord string) {
_ = ctx.WriteWithSpecialComments(featureID, func() error {
ctx.WriteKeyWord(keyWord)
return nil
})
}
// WriteString writes the string into writer
// `str` may be wrapped in quotes and escaped according to RestoreFlags.
func (ctx *RestoreCtx) WriteString(str string) {
if ctx.Flags.HasStringEscapeBackslashFlag() {
str = strings.ReplaceAll(str, `\`, `\\`)
}
quotes := ""
switch {
case ctx.Flags.HasStringSingleQuotesFlag():
str = strings.ReplaceAll(str, `'`, `''`)
quotes = `'`
case ctx.Flags.HasStringDoubleQuotesFlag():
str = strings.ReplaceAll(str, `"`, `""`)
quotes = `"`
}
ctx.In.WriteString(quotes)
ctx.In.WriteString(str)
ctx.In.WriteString(quotes)
}
// WriteName writes the name into writer
// `name` maybe wrapped in quotes and escaped according to RestoreFlags.
func (ctx *RestoreCtx) WriteName(name string) {
switch {
case ctx.Flags.HasNameUppercaseFlag():
name = strings.ToUpper(name)
case ctx.Flags.HasNameLowercaseFlag():
name = strings.ToLower(name)
}
quotes := ""
switch {
case ctx.Flags.HasNameDoubleQuotesFlag():
name = strings.ReplaceAll(name, `"`, `""`)
quotes = `"`
case ctx.Flags.HasNameBackQuotesFlag():
name = strings.ReplaceAll(name, "`", "``")
quotes = "`"
}
// use `WriteString` directly instead of `fmt.Fprint` to get a better performance.
ctx.In.WriteString(quotes)
ctx.In.WriteString(name)
ctx.In.WriteString(quotes)
}
// WritePlain writes the plain text into writer without any handling.
func (ctx *RestoreCtx) WritePlain(plainText string) {
ctx.In.WriteString(plainText)
}
// WritePlainf write the plain text into writer without any handling.
func (ctx *RestoreCtx) WritePlainf(format string, a ...any) {
fmt.Fprintf(ctx.In, format, a...)
}
// CTERestorer is used by WithClause related nodes restore.
type CTERestorer struct {
CTENames []string
}
// IsCTETableName returns true if the given tableName comes from CTE.
func (c *CTERestorer) IsCTETableName(nameL string) bool {
return slices.Contains(c.CTENames, nameL)
}
// RecordCTEName records the CTE name.
func (c *CTERestorer) RecordCTEName(nameL string) {
c.CTENames = append(c.CTENames, nameL)
}
// RestoreCTEFunc is used to restore CTE.
func (c *CTERestorer) RestoreCTEFunc() func() {
l := len(c.CTENames)
return func() {
if l == 0 {
c.CTENames = nil
} else {
c.CTENames = c.CTENames[:l]
}
}
}
// Code generated by goyacc DO NOT EDIT.
// Copyright 2020 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package parser
import __yyfmt__ "fmt"
import (
"math"
"strconv"
"github.com/pingcap/tidb/pkg/parser/ast"
)
type yyhintSymType struct {
yys int
offset int
ident string
number uint64
hint *ast.TableOptimizerHint
hints []*ast.TableOptimizerHint
table ast.HintTable
modelIdents []ast.CIStr
leadingList *ast.LeadingList
leadingElement interface{} // Modified: Represents either *ast.HintTable or *ast.LeadingList
}
type yyhintXError struct {
state, xsym int
}
const (
yyhintDefault = 57438
yyhintEOFCode = 57344
yyhintErrCode = 57345
hintAggToCop = 57381
hintBCJoin = 57404
hintBKA = 57356
hintBNL = 57358
hintDupsWeedOut = 57434
hintFalse = 57430
hintFirstMatch = 57435
hintForceIndex = 57420
hintGB = 57433
hintHashAgg = 57384
hintHashJoin = 57360
hintHashJoinBuild = 57361
hintHashJoinProbe = 57362
hintHypoIndex = 57380
hintIdentifier = 57347
hintIgnoreIndex = 57387
hintIgnorePlanCache = 57382
hintIndexHashJoin = 57391
hintIndexJoin = 57388
hintIndexLookUpPushDown = 57412
hintIndexMerge = 57366
hintIndexMergeJoin = 57395
hintInlHashJoin = 57390
hintInlJoin = 57393
hintInlMergeJoin = 57394
hintIntLit = 57346
hintInvalid = 57348
hintJoinFixedOrder = 57352
hintJoinOrder = 57353
hintJoinPrefix = 57354
hintJoinSuffix = 57355
hintLeading = 57422
hintLimitToCop = 57419
hintLooseScan = 57436
hintMB = 57432
hintMRR = 57368
hintMaterialization = 57437
hintMaxExecutionTime = 57376
hintMemoryQuota = 57397
hintMerge = 57364
hintMpp1PhaseAgg = 57385
hintMpp2PhaseAgg = 57386
hintNoBKA = 57357
hintNoBNL = 57359
hintNoDecorrelate = 57424
hintNoHashJoin = 57363
hintNoICP = 57370
hintNoIndexHashJoin = 57392
hintNoIndexJoin = 57389
hintNoIndexLookUpPushDown = 57413
hintNoIndexMerge = 57367
hintNoIndexMergeJoin = 57396
hintNoMRR = 57369
hintNoMerge = 57365
hintNoOrderIndex = 57411
hintNoRangeOptimization = 57371
hintNoSMJoin = 57403
hintNoSemijoin = 57375
hintNoSkipScan = 57373
hintNoSwapJoinInputs = 57398
hintNthPlan = 57418
hintNumericLit = 57351
hintOLAP = 57425
hintOLTP = 57426
hintOrderIndex = 57410
hintPartition = 57427
hintQBName = 57379
hintQueryType = 57399
hintReadConsistentReplica = 57400
hintReadFromStorage = 57401
hintResourceGroup = 57378
hintSMJoin = 57402
hintSemiJoinRewrite = 57423
hintSemijoin = 57374
hintSetVar = 57377
hintShuffleJoin = 57405
hintSingleAtIdentifier = 57349
hintSkipScan = 57372
hintStraightJoin = 57421
hintStreamAgg = 57406
hintStringLit = 57350
hintSwapJoinInputs = 57407
hintTiFlash = 57429
hintTiKV = 57428
hintTimeRange = 57416
hintTrue = 57431
hintUseCascades = 57417
hintUseIndex = 57409
hintUseIndexMerge = 57408
hintUsePlanCache = 57414
hintUseToja = 57415
hintWriteSlowLog = 57383
yyhintMaxDepth = 200
yyhintTabOfs = -232
)
var (
yyhintXLAT = map[int]int{
41: 0, // ')' (175x)
57381: 1, // hintAggToCop (161x)
57404: 2, // hintBCJoin (161x)
57356: 3, // hintBKA (161x)
57358: 4, // hintBNL (161x)
57420: 5, // hintForceIndex (161x)
57384: 6, // hintHashAgg (161x)
57360: 7, // hintHashJoin (161x)
57361: 8, // hintHashJoinBuild (161x)
57362: 9, // hintHashJoinProbe (161x)
57380: 10, // hintHypoIndex (161x)
57347: 11, // hintIdentifier (161x)
57387: 12, // hintIgnoreIndex (161x)
57382: 13, // hintIgnorePlanCache (161x)
57391: 14, // hintIndexHashJoin (161x)
57388: 15, // hintIndexJoin (161x)
57412: 16, // hintIndexLookUpPushDown (161x)
57366: 17, // hintIndexMerge (161x)
57395: 18, // hintIndexMergeJoin (161x)
57390: 19, // hintInlHashJoin (161x)
57393: 20, // hintInlJoin (161x)
57394: 21, // hintInlMergeJoin (161x)
57352: 22, // hintJoinFixedOrder (161x)
57353: 23, // hintJoinOrder (161x)
57354: 24, // hintJoinPrefix (161x)
57355: 25, // hintJoinSuffix (161x)
57422: 26, // hintLeading (161x)
57419: 27, // hintLimitToCop (161x)
57376: 28, // hintMaxExecutionTime (161x)
57397: 29, // hintMemoryQuota (161x)
57364: 30, // hintMerge (161x)
57385: 31, // hintMpp1PhaseAgg (161x)
57386: 32, // hintMpp2PhaseAgg (161x)
57368: 33, // hintMRR (161x)
57357: 34, // hintNoBKA (161x)
57359: 35, // hintNoBNL (161x)
57424: 36, // hintNoDecorrelate (161x)
57363: 37, // hintNoHashJoin (161x)
57370: 38, // hintNoICP (161x)
57392: 39, // hintNoIndexHashJoin (161x)
57389: 40, // hintNoIndexJoin (161x)
57413: 41, // hintNoIndexLookUpPushDown (161x)
57367: 42, // hintNoIndexMerge (161x)
57396: 43, // hintNoIndexMergeJoin (161x)
57365: 44, // hintNoMerge (161x)
57369: 45, // hintNoMRR (161x)
57411: 46, // hintNoOrderIndex (161x)
57371: 47, // hintNoRangeOptimization (161x)
57375: 48, // hintNoSemijoin (161x)
57373: 49, // hintNoSkipScan (161x)
57403: 50, // hintNoSMJoin (161x)
57398: 51, // hintNoSwapJoinInputs (161x)
57418: 52, // hintNthPlan (161x)
57410: 53, // hintOrderIndex (161x)
57379: 54, // hintQBName (161x)
57399: 55, // hintQueryType (161x)
57400: 56, // hintReadConsistentReplica (161x)
57401: 57, // hintReadFromStorage (161x)
57378: 58, // hintResourceGroup (161x)
57374: 59, // hintSemijoin (161x)
57423: 60, // hintSemiJoinRewrite (161x)
57377: 61, // hintSetVar (161x)
57405: 62, // hintShuffleJoin (161x)
57372: 63, // hintSkipScan (161x)
57402: 64, // hintSMJoin (161x)
57421: 65, // hintStraightJoin (161x)
57406: 66, // hintStreamAgg (161x)
57407: 67, // hintSwapJoinInputs (161x)
57416: 68, // hintTimeRange (161x)
57417: 69, // hintUseCascades (161x)
57409: 70, // hintUseIndex (161x)
57408: 71, // hintUseIndexMerge (161x)
57414: 72, // hintUsePlanCache (161x)
57415: 73, // hintUseToja (161x)
57383: 74, // hintWriteSlowLog (161x)
44: 75, // ',' (157x)
57434: 76, // hintDupsWeedOut (132x)
57435: 77, // hintFirstMatch (132x)
57436: 78, // hintLooseScan (132x)
57437: 79, // hintMaterialization (132x)
57429: 80, // hintTiFlash (132x)
57428: 81, // hintTiKV (132x)
57430: 82, // hintFalse (131x)
57425: 83, // hintOLAP (131x)
57426: 84, // hintOLTP (131x)
57431: 85, // hintTrue (131x)
57433: 86, // hintGB (130x)
57432: 87, // hintMB (130x)
57349: 88, // hintSingleAtIdentifier (108x)
57346: 89, // hintIntLit (104x)
93: 90, // ']' (97x)
46: 91, // '.' (96x)
57427: 92, // hintPartition (91x)
61: 93, // '=' (88x)
40: 94, // '(' (87x)
57344: 95, // $end (31x)
57460: 96, // QueryBlockOpt (22x)
57450: 97, // Identifier (21x)
57446: 98, // HintTable (7x)
57350: 99, // hintStringLit (6x)
57440: 100, // CommaOpt (5x)
57351: 101, // hintNumericLit (4x)
57447: 102, // HintTableList (4x)
91: 103, // '[' (3x)
57454: 104, // LeadingTableElement (3x)
43: 105, // '+' (2x)
45: 106, // '-' (2x)
57439: 107, // BooleanHintName (2x)
57441: 108, // HintIndexList (2x)
57443: 109, // HintStorageType (2x)
57444: 110, // HintStorageTypeAndTable (2x)
57448: 111, // HintTableListOpt (2x)
57453: 112, // JoinOrderOptimizerHintName (2x)
57455: 113, // LeadingTableList (2x)
57456: 114, // NullaryHintName (2x)
57458: 115, // PartitionList (2x)
57459: 116, // PartitionListOpt (2x)
57462: 117, // StorageOptimizerHintOpt (2x)
57463: 118, // SubqueryOptimizerHintName (2x)
57466: 119, // SubqueryStrategy (2x)
57467: 120, // SupportedIndexLevelOptimizerHintName (2x)
57468: 121, // SupportedTableLevelOptimizerHintName (2x)
57469: 122, // TableOptimizerHintOpt (2x)
57471: 123, // UnsupportedIndexLevelOptimizerHintName (2x)
57472: 124, // UnsupportedTableLevelOptimizerHintName (2x)
57473: 125, // Value (2x)
57474: 126, // ViewName (2x)
57442: 127, // HintQueryType (1x)
57445: 128, // HintStorageTypeAndTableList (1x)
57449: 129, // HintTrueOrFalse (1x)
57451: 130, // IndexNameList (1x)
57452: 131, // IndexNameListOpt (1x)
57457: 132, // OptimizerHintList (1x)
57461: 133, // Start (1x)
57464: 134, // SubqueryStrategies (1x)
57465: 135, // SubqueryStrategiesOpt (1x)
57470: 136, // UnitOfBytes (1x)
57475: 137, // ViewNameList (1x)
57438: 138, // $default (0x)
57345: 139, // error (0x)
57348: 140, // hintInvalid (0x)
}
yyhintSymNames = []string{
"')'",
"hintAggToCop",
"hintBCJoin",
"hintBKA",
"hintBNL",
"hintForceIndex",
"hintHashAgg",
"hintHashJoin",
"hintHashJoinBuild",
"hintHashJoinProbe",
"hintHypoIndex",
"hintIdentifier",
"hintIgnoreIndex",
"hintIgnorePlanCache",
"hintIndexHashJoin",
"hintIndexJoin",
"hintIndexLookUpPushDown",
"hintIndexMerge",
"hintIndexMergeJoin",
"hintInlHashJoin",
"hintInlJoin",
"hintInlMergeJoin",
"hintJoinFixedOrder",
"hintJoinOrder",
"hintJoinPrefix",
"hintJoinSuffix",
"hintLeading",
"hintLimitToCop",
"hintMaxExecutionTime",
"hintMemoryQuota",
"hintMerge",
"hintMpp1PhaseAgg",
"hintMpp2PhaseAgg",
"hintMRR",
"hintNoBKA",
"hintNoBNL",
"hintNoDecorrelate",
"hintNoHashJoin",
"hintNoICP",
"hintNoIndexHashJoin",
"hintNoIndexJoin",
"hintNoIndexLookUpPushDown",
"hintNoIndexMerge",
"hintNoIndexMergeJoin",
"hintNoMerge",
"hintNoMRR",
"hintNoOrderIndex",
"hintNoRangeOptimization",
"hintNoSemijoin",
"hintNoSkipScan",
"hintNoSMJoin",
"hintNoSwapJoinInputs",
"hintNthPlan",
"hintOrderIndex",
"hintQBName",
"hintQueryType",
"hintReadConsistentReplica",
"hintReadFromStorage",
"hintResourceGroup",
"hintSemijoin",
"hintSemiJoinRewrite",
"hintSetVar",
"hintShuffleJoin",
"hintSkipScan",
"hintSMJoin",
"hintStraightJoin",
"hintStreamAgg",
"hintSwapJoinInputs",
"hintTimeRange",
"hintUseCascades",
"hintUseIndex",
"hintUseIndexMerge",
"hintUsePlanCache",
"hintUseToja",
"hintWriteSlowLog",
"','",
"hintDupsWeedOut",
"hintFirstMatch",
"hintLooseScan",
"hintMaterialization",
"hintTiFlash",
"hintTiKV",
"hintFalse",
"hintOLAP",
"hintOLTP",
"hintTrue",
"hintGB",
"hintMB",
"hintSingleAtIdentifier",
"hintIntLit",
"']'",
"'.'",
"hintPartition",
"'='",
"'('",
"$end",
"QueryBlockOpt",
"Identifier",
"HintTable",
"hintStringLit",
"CommaOpt",
"hintNumericLit",
"HintTableList",
"'['",
"LeadingTableElement",
"'+'",
"'-'",
"BooleanHintName",
"HintIndexList",
"HintStorageType",
"HintStorageTypeAndTable",
"HintTableListOpt",
"JoinOrderOptimizerHintName",
"LeadingTableList",
"NullaryHintName",
"PartitionList",
"PartitionListOpt",
"StorageOptimizerHintOpt",
"SubqueryOptimizerHintName",
"SubqueryStrategy",
"SupportedIndexLevelOptimizerHintName",
"SupportedTableLevelOptimizerHintName",
"TableOptimizerHintOpt",
"UnsupportedIndexLevelOptimizerHintName",
"UnsupportedTableLevelOptimizerHintName",
"Value",
"ViewName",
"HintQueryType",
"HintStorageTypeAndTableList",
"HintTrueOrFalse",
"IndexNameList",
"IndexNameListOpt",
"OptimizerHintList",
"Start",
"SubqueryStrategies",
"SubqueryStrategiesOpt",
"UnitOfBytes",
"ViewNameList",
"$default",
"error",
"hintInvalid",
}
yyhintReductions = []struct{ xsym, components int }{
{0, 1},
{133, 1},
{132, 1},
{132, 3},
{132, 1},
{132, 3},
{122, 4},
{122, 4},
{122, 4},
{122, 4},
{122, 5},
{122, 4},
{122, 4},
{122, 5},
{122, 5},
{122, 5},
{122, 6},
{122, 4},
{122, 4},
{122, 6},
{122, 6},
{122, 6},
{122, 5},
{122, 4},
{122, 1},
{122, 5},
{122, 5},
{122, 4},
{122, 6},
{122, 6},
{117, 5},
{128, 1},
{128, 3},
{110, 4},
{113, 1},
{113, 3},
{104, 1},
{104, 3},
{96, 0},
{96, 1},
{100, 0},
{100, 1},
{116, 0},
{116, 4},
{115, 1},
{115, 3},
{111, 1},
{111, 1},
{102, 2},
{102, 3},
{98, 3},
{98, 5},
{137, 3},
{137, 1},
{126, 2},
{126, 1},
{108, 4},
{131, 0},
{131, 1},
{130, 1},
{130, 3},
{135, 0},
{135, 1},
{134, 1},
{134, 3},
{125, 1},
{125, 1},
{125, 1},
{125, 1},
{125, 2},
{125, 2},
{125, 2},
{125, 2},
{136, 1},
{136, 1},
{129, 1},
{129, 1},
{112, 1},
{112, 1},
{112, 1},
{124, 1},
{124, 1},
{124, 1},
{124, 1},
{124, 1},
{121, 1},
{121, 1},
{121, 1},
{121, 1},
{121, 1},
{121, 1},
{121, 1},
{121, 1},
{121, 1},
{121, 1},
{121, 1},
{121, 1},
{121, 1},
{121, 1},
{121, 1},
{121, 1},
{121, 1},
{121, 1},
{121, 1},
{121, 1},
{121, 1},
{123, 1},
{123, 1},
{123, 1},
{123, 1},
{123, 1},
{123, 1},
{123, 1},
{120, 1},
{120, 1},
{120, 1},
{120, 1},
{120, 1},
{120, 1},
{120, 1},
{120, 1},
{118, 1},
{118, 1},
{119, 1},
{119, 1},
{119, 1},
{119, 1},
{107, 1},
{107, 1},
{114, 1},
{114, 1},
{114, 1},
{114, 1},
{114, 1},
{114, 1},
{114, 1},
{114, 1},
{114, 1},
{114, 1},
{114, 1},
{114, 1},
{114, 1},
{127, 1},
{127, 1},
{109, 1},
{109, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
{97, 1},
}
yyhintXErrors = map[yyhintXError]string{}
yyhintParseTab = [338][]uint16{
// 0
{1: 311, 268, 261, 263, 297, 307, 282, 284, 285, 286, 256, 295, 315, 275, 271, 300, 287, 280, 274, 270, 279, 237, 258, 259, 260, 241, 312, 245, 250, 273, 308, 309, 288, 262, 264, 318, 283, 290, 276, 272, 301, 313, 281, 265, 289, 299, 291, 303, 293, 267, 278, 246, 298, 249, 255, 314, 257, 248, 302, 317, 247, 269, 292, 266, 316, 310, 277, 251, 305, 294, 296, 306, 304, 254, 107: 252, 112: 238, 114: 253, 117: 236, 244, 120: 243, 240, 235, 242, 239, 132: 234, 233},
{95: 232},
{1: 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 427, 95: 231, 100: 567},
{1: 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 95: 230},
{1: 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 95: 228},
// 5
{94: 564},
{94: 561},
{94: 558},
{94: 553},
{94: 542},
// 10
{94: 539},
{94: 528},
{94: 516},
{94: 512},
{94: 508},
// 15
{94: 503},
{94: 500},
{94: 488},
{94: 481},
{94: 476},
// 20
{94: 470},
{94: 467},
{1: 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 95: 208},
{94: 461},
{94: 438},
// 25
{94: 319},
{94: 155},
{94: 154},
{94: 153},
{94: 152},
// 30
{94: 151},
{94: 150},
{94: 149},
{94: 148},
{94: 147},
// 35
{94: 146},
{94: 145},
{94: 144},
{94: 143},
{94: 142},
// 40
{94: 141},
{94: 140},
{94: 139},
{94: 138},
{94: 137},
// 45
{94: 136},
{94: 135},
{94: 134},
{94: 133},
{94: 132},
// 50
{94: 131},
{94: 130},
{94: 129},
{94: 128},
{94: 127},
// 55
{94: 126},
{94: 125},
{94: 124},
{94: 123},
{94: 122},
// 60
{94: 121},
{94: 120},
{94: 119},
{94: 118},
{94: 117},
// 65
{94: 116},
{94: 115},
{94: 114},
{94: 113},
{94: 112},
// 70
{94: 111},
{94: 110},
{94: 105},
{94: 104},
{94: 103},
// 75
{94: 102},
{94: 101},
{94: 100},
{94: 99},
{94: 98},
// 80
{94: 97},
{94: 96},
{94: 95},
{94: 94},
{94: 93},
// 85
{94: 92},
{94: 91},
{80: 194, 194, 88: 321, 96: 320},
{80: 326, 325, 109: 324, 323, 128: 322},
{193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 89: 193, 193, 193, 193, 94: 193},
// 90
{435, 75: 436},
{201, 75: 201},
{103: 327},
{103: 88},
{103: 87},
// 95
{1: 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 76: 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 321, 96: 329, 102: 328},
{75: 433, 90: 432},
{1: 362, 386, 337, 339, 401, 366, 341, 342, 343, 361, 332, 369, 364, 371, 374, 394, 347, 377, 370, 373, 376, 333, 334, 335, 336, 403, 363, 357, 379, 345, 367, 368, 349, 338, 340, 405, 344, 351, 372, 375, 395, 348, 378, 346, 350, 393, 352, 356, 354, 385, 380, 400, 392, 360, 381, 382, 383, 359, 355, 404, 358, 387, 353, 384, 402, 388, 389, 398, 399, 391, 390, 396, 397, 365, 76: 414, 415, 416, 417, 409, 408, 410, 406, 407, 411, 413, 412, 97: 331, 330},
{184, 75: 184, 90: 184},
{194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 321, 90: 194, 419, 194, 96: 418},
// 100
{86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86},
{85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85},
{84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84},
{83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83},
{82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82},
// 105
{81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81},
{80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80},
{79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79},
{78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78},
{77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77},
// 110
{76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76},
{75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75},
{74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74},
{73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73},
{72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72},
// 115
{71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71},
{70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70},
{69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69},
{68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68},
{67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67},
// 120
{66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66},
{65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65},
{64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64},
{63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63},
{62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62},
// 125
{61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61},
{60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60},
{59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59},
{58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58},
{57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57},
// 130
{56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56},
{55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55},
{54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54},
{53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53},
{52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52},
// 135
{51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51},
{50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50},
{49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49},
{48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48},
{47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47},
// 140
{46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46},
{45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45},
{44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44},
{43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43},
{42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42},
// 145
{41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41},
{40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40},
{39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39},
{38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38},
{37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37},
// 150
{36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36},
{35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35},
{34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34},
{33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33},
{32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
// 155
{31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31},
{30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30},
{29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29},
{28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28},
{27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27},
// 160
{26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26},
{25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25},
{24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24},
{23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23},
{22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22},
// 165
{21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21},
{20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20},
{19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19},
{18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18},
{17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17},
// 170
{16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
{15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15},
{14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14},
{13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13},
{12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12},
// 175
{11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11},
{10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10},
{9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9},
{8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
{7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7},
// 180
{6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6},
{5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5},
{4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4},
{3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3},
{2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2},
// 185
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 90: 190, 92: 422, 116: 431},
{1: 362, 386, 337, 339, 401, 366, 341, 342, 343, 361, 332, 369, 364, 371, 374, 394, 347, 377, 370, 373, 376, 333, 334, 335, 336, 403, 363, 357, 379, 345, 367, 368, 349, 338, 340, 405, 344, 351, 372, 375, 395, 348, 378, 346, 350, 393, 352, 356, 354, 385, 380, 400, 392, 360, 381, 382, 383, 359, 355, 404, 358, 387, 353, 384, 402, 388, 389, 398, 399, 391, 390, 396, 397, 365, 76: 414, 415, 416, 417, 409, 408, 410, 406, 407, 411, 413, 412, 97: 420},
{194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 321, 90: 194, 92: 194, 96: 421},
{190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 90: 190, 92: 422, 116: 423},
// 190
{94: 424},
{181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 90: 181},
{1: 362, 386, 337, 339, 401, 366, 341, 342, 343, 361, 332, 369, 364, 371, 374, 394, 347, 377, 370, 373, 376, 333, 334, 335, 336, 403, 363, 357, 379, 345, 367, 368, 349, 338, 340, 405, 344, 351, 372, 375, 395, 348, 378, 346, 350, 393, 352, 356, 354, 385, 380, 400, 392, 360, 381, 382, 383, 359, 355, 404, 358, 387, 353, 384, 402, 388, 389, 398, 399, 391, 390, 396, 397, 365, 76: 414, 415, 416, 417, 409, 408, 410, 406, 407, 411, 413, 412, 97: 426, 115: 425},
{428, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 427, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 100: 429},
{188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188},
// 195
{191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 76: 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 89: 191, 99: 191},
{189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 90: 189},
{1: 362, 386, 337, 339, 401, 366, 341, 342, 343, 361, 332, 369, 364, 371, 374, 394, 347, 377, 370, 373, 376, 333, 334, 335, 336, 403, 363, 357, 379, 345, 367, 368, 349, 338, 340, 405, 344, 351, 372, 375, 395, 348, 378, 346, 350, 393, 352, 356, 354, 385, 380, 400, 392, 360, 381, 382, 383, 359, 355, 404, 358, 387, 353, 384, 402, 388, 389, 398, 399, 391, 390, 396, 397, 365, 76: 414, 415, 416, 417, 409, 408, 410, 406, 407, 411, 413, 412, 97: 430},
{187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 89: 187},
{182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 90: 182},
// 200
{199, 75: 199},
{1: 362, 386, 337, 339, 401, 366, 341, 342, 343, 361, 332, 369, 364, 371, 374, 394, 347, 377, 370, 373, 376, 333, 334, 335, 336, 403, 363, 357, 379, 345, 367, 368, 349, 338, 340, 405, 344, 351, 372, 375, 395, 348, 378, 346, 350, 393, 352, 356, 354, 385, 380, 400, 392, 360, 381, 382, 383, 359, 355, 404, 358, 387, 353, 384, 402, 388, 389, 398, 399, 391, 390, 396, 397, 365, 76: 414, 415, 416, 417, 409, 408, 410, 406, 407, 411, 413, 412, 97: 331, 434},
{183, 75: 183, 90: 183},
{1: 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 95: 202},
{80: 326, 325, 109: 324, 437},
// 205
{200, 75: 200},
{1: 362, 386, 337, 339, 401, 366, 341, 342, 343, 361, 332, 369, 364, 371, 374, 394, 347, 377, 370, 373, 376, 333, 334, 335, 336, 403, 363, 357, 379, 345, 367, 368, 349, 338, 340, 405, 344, 351, 372, 375, 395, 348, 378, 346, 350, 393, 352, 356, 354, 385, 380, 400, 392, 360, 381, 382, 383, 359, 355, 404, 358, 387, 353, 384, 402, 388, 389, 398, 399, 391, 390, 396, 397, 365, 76: 414, 415, 416, 417, 409, 408, 410, 406, 407, 411, 413, 412, 321, 194, 96: 439, 441, 115: 440},
{89: 459},
{455, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 427, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 89: 192, 100: 456},
{188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 89: 188, 93: 442},
// 210
{1: 362, 386, 337, 339, 401, 366, 341, 342, 343, 361, 332, 369, 364, 371, 374, 394, 347, 377, 370, 373, 376, 333, 334, 335, 336, 403, 363, 357, 379, 345, 367, 368, 349, 338, 340, 405, 344, 351, 372, 375, 395, 348, 378, 346, 350, 393, 352, 356, 354, 385, 380, 400, 392, 360, 381, 382, 383, 359, 355, 404, 358, 387, 353, 384, 402, 388, 389, 398, 399, 391, 390, 396, 397, 365, 76: 414, 415, 416, 417, 409, 408, 410, 406, 407, 411, 413, 412, 89: 447, 97: 445, 99: 444, 101: 446, 105: 448, 449, 125: 443},
{454},
{167},
{166},
{165},
// 215
{164},
{89: 453, 101: 452},
{89: 451, 101: 450},
{162},
{160},
// 220
{163},
{161},
{1: 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, 95: 203},
{1: 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 95: 205},
{1: 362, 386, 337, 339, 401, 366, 341, 342, 343, 361, 332, 369, 364, 371, 374, 394, 347, 377, 370, 373, 376, 333, 334, 335, 336, 403, 363, 357, 379, 345, 367, 368, 349, 338, 340, 405, 344, 351, 372, 375, 395, 348, 378, 346, 350, 393, 352, 356, 354, 385, 380, 400, 392, 360, 381, 382, 383, 359, 355, 404, 358, 387, 353, 384, 402, 388, 389, 398, 399, 391, 390, 396, 397, 365, 76: 414, 415, 416, 417, 409, 408, 410, 406, 407, 411, 413, 412, 89: 457, 97: 430},
// 225
{458},
{1: 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 95: 204},
{460},
{1: 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 95: 206},
{83: 194, 194, 88: 321, 96: 462},
// 230
{83: 464, 465, 127: 463},
{466},
{90},
{89},
{1: 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 207, 95: 207},
// 235
{194, 88: 321, 96: 468},
{469},
{1: 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 95: 209},
{82: 194, 85: 194, 88: 321, 96: 471},
{82: 474, 85: 473, 129: 472},
// 240
{475},
{157},
{156},
{1: 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 95: 210},
{99: 477},
// 245
{75: 427, 99: 192, 478},
{99: 479},
{480},
{1: 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 95: 211},
{88: 321, 194, 96: 482},
// 250
{89: 483},
{86: 486, 485, 136: 484},
{487},
{159},
{158},
// 255
{1: 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 95: 212},
{1: 362, 386, 337, 339, 401, 366, 341, 342, 343, 361, 332, 369, 364, 371, 374, 394, 347, 377, 370, 373, 376, 333, 334, 335, 336, 403, 363, 357, 379, 345, 367, 368, 349, 338, 340, 405, 344, 351, 372, 375, 395, 348, 378, 346, 350, 393, 352, 356, 354, 385, 380, 400, 392, 360, 381, 382, 383, 359, 355, 404, 358, 387, 353, 384, 402, 388, 389, 398, 399, 391, 390, 396, 397, 365, 76: 414, 415, 416, 417, 409, 408, 410, 406, 407, 411, 413, 412, 97: 489},
{490, 75: 491},
{1: 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 95: 214},
{194, 362, 386, 337, 339, 401, 366, 341, 342, 343, 361, 332, 369, 364, 371, 374, 394, 347, 377, 370, 373, 376, 333, 334, 335, 336, 403, 363, 357, 379, 345, 367, 368, 349, 338, 340, 405, 344, 351, 372, 375, 395, 348, 378, 346, 350, 393, 352, 356, 354, 385, 380, 400, 392, 360, 381, 382, 383, 359, 355, 404, 358, 387, 353, 384, 402, 388, 389, 398, 399, 391, 390, 396, 397, 365, 76: 414, 415, 416, 417, 409, 408, 410, 406, 407, 411, 413, 412, 321, 91: 194, 96: 495, 494, 126: 493, 137: 492},
// 260
{497, 91: 498},
{179, 91: 179},
{194, 88: 321, 91: 194, 96: 496},
{177, 91: 177},
{178, 91: 178},
// 265
{1: 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 95: 213},
{194, 362, 386, 337, 339, 401, 366, 341, 342, 343, 361, 332, 369, 364, 371, 374, 394, 347, 377, 370, 373, 376, 333, 334, 335, 336, 403, 363, 357, 379, 345, 367, 368, 349, 338, 340, 405, 344, 351, 372, 375, 395, 348, 378, 346, 350, 393, 352, 356, 354, 385, 380, 400, 392, 360, 381, 382, 383, 359, 355, 404, 358, 387, 353, 384, 402, 388, 389, 398, 399, 391, 390, 396, 397, 365, 76: 414, 415, 416, 417, 409, 408, 410, 406, 407, 411, 413, 412, 321, 91: 194, 96: 495, 494, 126: 499},
{180, 91: 180},
{1: 362, 386, 337, 339, 401, 366, 341, 342, 343, 361, 332, 369, 364, 371, 374, 394, 347, 377, 370, 373, 376, 333, 334, 335, 336, 403, 363, 357, 379, 345, 367, 368, 349, 338, 340, 405, 344, 351, 372, 375, 395, 348, 378, 346, 350, 393, 352, 356, 354, 385, 380, 400, 392, 360, 381, 382, 383, 359, 355, 404, 358, 387, 353, 384, 402, 388, 389, 398, 399, 391, 390, 396, 397, 365, 76: 414, 415, 416, 417, 409, 408, 410, 406, 407, 411, 413, 412, 97: 501},
{502},
// 270
{1: 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 95: 215},
{1: 362, 386, 337, 339, 401, 366, 341, 342, 343, 361, 332, 369, 364, 371, 374, 394, 347, 377, 370, 373, 376, 333, 334, 335, 336, 403, 363, 357, 379, 345, 367, 368, 349, 338, 340, 405, 344, 351, 372, 375, 395, 348, 378, 346, 350, 393, 352, 356, 354, 385, 380, 400, 392, 360, 381, 382, 383, 359, 355, 404, 358, 387, 353, 384, 402, 388, 389, 398, 399, 391, 390, 396, 397, 365, 76: 414, 415, 416, 417, 409, 408, 410, 406, 407, 411, 413, 412, 97: 504},
{93: 505},
{1: 362, 386, 337, 339, 401, 366, 341, 342, 343, 361, 332, 369, 364, 371, 374, 394, 347, 377, 370, 373, 376, 333, 334, 335, 336, 403, 363, 357, 379, 345, 367, 368, 349, 338, 340, 405, 344, 351, 372, 375, 395, 348, 378, 346, 350, 393, 352, 356, 354, 385, 380, 400, 392, 360, 381, 382, 383, 359, 355, 404, 358, 387, 353, 384, 402, 388, 389, 398, 399, 391, 390, 396, 397, 365, 76: 414, 415, 416, 417, 409, 408, 410, 406, 407, 411, 413, 412, 89: 447, 97: 445, 99: 444, 101: 446, 105: 448, 449, 125: 506},
{507},
// 275
{1: 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 95: 216},
{88: 321, 194, 96: 509},
{89: 510},
{511},
{1: 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 95: 217},
// 280
{88: 321, 194, 96: 513},
{89: 514},
{515},
{1: 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 95: 218},
{194, 76: 194, 194, 194, 194, 88: 321, 96: 517},
// 285
{171, 76: 521, 522, 523, 524, 119: 520, 134: 519, 518},
{527},
{170, 75: 525},
{169, 75: 169},
{109, 75: 109},
// 290
{108, 75: 108},
{107, 75: 107},
{106, 75: 106},
{76: 521, 522, 523, 524, 119: 526},
{168, 75: 168},
// 295
{1: 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 95: 219},
{1: 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 76: 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 321, 96: 530, 108: 529},
{538},
{1: 362, 386, 337, 339, 401, 366, 341, 342, 343, 361, 332, 369, 364, 371, 374, 394, 347, 377, 370, 373, 376, 333, 334, 335, 336, 403, 363, 357, 379, 345, 367, 368, 349, 338, 340, 405, 344, 351, 372, 375, 395, 348, 378, 346, 350, 393, 352, 356, 354, 385, 380, 400, 392, 360, 381, 382, 383, 359, 355, 404, 358, 387, 353, 384, 402, 388, 389, 398, 399, 391, 390, 396, 397, 365, 76: 414, 415, 416, 417, 409, 408, 410, 406, 407, 411, 413, 412, 97: 331, 531},
{192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 427, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 100: 532},
// 300
{175, 362, 386, 337, 339, 401, 366, 341, 342, 343, 361, 332, 369, 364, 371, 374, 394, 347, 377, 370, 373, 376, 333, 334, 335, 336, 403, 363, 357, 379, 345, 367, 368, 349, 338, 340, 405, 344, 351, 372, 375, 395, 348, 378, 346, 350, 393, 352, 356, 354, 385, 380, 400, 392, 360, 381, 382, 383, 359, 355, 404, 358, 387, 353, 384, 402, 388, 389, 398, 399, 391, 390, 396, 397, 365, 76: 414, 415, 416, 417, 409, 408, 410, 406, 407, 411, 413, 412, 97: 535, 130: 534, 533},
{176},
{174, 75: 536},
{173, 75: 173},
{1: 362, 386, 337, 339, 401, 366, 341, 342, 343, 361, 332, 369, 364, 371, 374, 394, 347, 377, 370, 373, 376, 333, 334, 335, 336, 403, 363, 357, 379, 345, 367, 368, 349, 338, 340, 405, 344, 351, 372, 375, 395, 348, 378, 346, 350, 393, 352, 356, 354, 385, 380, 400, 392, 360, 381, 382, 383, 359, 355, 404, 358, 387, 353, 384, 402, 388, 389, 398, 399, 391, 390, 396, 397, 365, 76: 414, 415, 416, 417, 409, 408, 410, 406, 407, 411, 413, 412, 97: 537},
// 305
{172, 75: 172},
{1: 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 95: 220},
{1: 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 76: 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 321, 96: 530, 108: 540},
{541},
{1: 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 95: 221},
// 310
{1: 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 76: 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 321, 94: 194, 96: 543},
{1: 362, 386, 337, 339, 401, 366, 341, 342, 343, 361, 332, 369, 364, 371, 374, 394, 347, 377, 370, 373, 376, 333, 334, 335, 336, 403, 363, 357, 379, 345, 367, 368, 349, 338, 340, 405, 344, 351, 372, 375, 395, 348, 378, 346, 350, 393, 352, 356, 354, 385, 380, 400, 392, 360, 381, 382, 383, 359, 355, 404, 358, 387, 353, 384, 402, 388, 389, 398, 399, 391, 390, 396, 397, 365, 76: 414, 415, 416, 417, 409, 408, 410, 406, 407, 411, 413, 412, 94: 547, 97: 331, 546, 104: 545, 113: 544},
{552, 75: 549},
{198, 75: 198},
{196, 75: 196},
// 315
{1: 362, 386, 337, 339, 401, 366, 341, 342, 343, 361, 332, 369, 364, 371, 374, 394, 347, 377, 370, 373, 376, 333, 334, 335, 336, 403, 363, 357, 379, 345, 367, 368, 349, 338, 340, 405, 344, 351, 372, 375, 395, 348, 378, 346, 350, 393, 352, 356, 354, 385, 380, 400, 392, 360, 381, 382, 383, 359, 355, 404, 358, 387, 353, 384, 402, 388, 389, 398, 399, 391, 390, 396, 397, 365, 76: 414, 415, 416, 417, 409, 408, 410, 406, 407, 411, 413, 412, 94: 547, 97: 331, 546, 104: 545, 113: 548},
{550, 75: 549},
{1: 362, 386, 337, 339, 401, 366, 341, 342, 343, 361, 332, 369, 364, 371, 374, 394, 347, 377, 370, 373, 376, 333, 334, 335, 336, 403, 363, 357, 379, 345, 367, 368, 349, 338, 340, 405, 344, 351, 372, 375, 395, 348, 378, 346, 350, 393, 352, 356, 354, 385, 380, 400, 392, 360, 381, 382, 383, 359, 355, 404, 358, 387, 353, 384, 402, 388, 389, 398, 399, 391, 390, 396, 397, 365, 76: 414, 415, 416, 417, 409, 408, 410, 406, 407, 411, 413, 412, 94: 547, 97: 331, 546, 104: 551},
{195, 75: 195},
{197, 75: 197},
// 320
{1: 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 95: 222},
{194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 76: 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 321, 96: 556, 102: 555, 111: 554},
{557},
{186, 75: 433},
{185, 362, 386, 337, 339, 401, 366, 341, 342, 343, 361, 332, 369, 364, 371, 374, 394, 347, 377, 370, 373, 376, 333, 334, 335, 336, 403, 363, 357, 379, 345, 367, 368, 349, 338, 340, 405, 344, 351, 372, 375, 395, 348, 378, 346, 350, 393, 352, 356, 354, 385, 380, 400, 392, 360, 381, 382, 383, 359, 355, 404, 358, 387, 353, 384, 402, 388, 389, 398, 399, 391, 390, 396, 397, 365, 76: 414, 415, 416, 417, 409, 408, 410, 406, 407, 411, 413, 412, 97: 331, 330},
// 325
{1: 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, 95: 223},
{194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 76: 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 321, 96: 556, 102: 555, 111: 559},
{560},
{1: 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 95: 224},
{1: 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 76: 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 321, 96: 329, 102: 562},
// 330
{563, 75: 433},
{1: 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, 95: 225},
{194, 88: 321, 96: 565},
{566},
{1: 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 95: 226},
// 335
{1: 311, 268, 261, 263, 297, 307, 282, 284, 285, 286, 256, 295, 315, 275, 271, 300, 287, 280, 274, 270, 279, 237, 258, 259, 260, 241, 312, 245, 250, 273, 308, 309, 288, 262, 264, 318, 283, 290, 276, 272, 301, 313, 281, 265, 289, 299, 291, 303, 293, 267, 278, 246, 298, 249, 255, 314, 257, 248, 302, 317, 247, 269, 292, 266, 316, 310, 277, 251, 305, 294, 296, 306, 304, 254, 107: 252, 112: 238, 114: 253, 117: 569, 244, 120: 243, 240, 568, 242, 239},
{1: 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 95: 229},
{1: 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 95: 227},
}
)
var yyhintDebug = 0
type yyhintLexer interface {
Lex(lval *yyhintSymType) int
Errorf(format string, a ...interface{}) error
AppendError(err error)
AppendWarn(err error)
Errors() (warns []error, errs []error)
}
type yyhintLexerEx interface {
yyhintLexer
Reduced(rule, state int, lval *yyhintSymType) bool
}
func yyhintSymName(c int) (s string) {
x, ok := yyhintXLAT[c]
if ok {
return yyhintSymNames[x]
}
return __yyfmt__.Sprintf("%d", c)
}
func yyhintlex1(yylex yyhintLexer, lval *yyhintSymType) (n int) {
n = yylex.Lex(lval)
if n <= 0 {
n = yyhintEOFCode
}
if yyhintDebug >= 3 {
__yyfmt__.Printf("\nlex %s(%#x %d), lval: %+v\n", yyhintSymName(n), n, n, lval)
}
return n
}
func yyhintParse(yylex yyhintLexer, parser *hintParser) int {
const yyError = 139
yyEx, _ := yylex.(yyhintLexerEx)
var yyn int
parser.yylval = yyhintSymType{}
yyS := parser.cache
Nerrs := 0 /* number of errors */
Errflag := 0 /* error recovery flag */
yyerrok := func() {
if yyhintDebug >= 2 {
__yyfmt__.Printf("yyerrok()\n")
}
Errflag = 0
}
_ = yyerrok
yystate := 0
yychar := -1
var yyxchar int
var yyshift int
yyp := -1
goto yystack
ret0:
return 0
ret1:
return 1
yystack:
/* put a state and value onto the stack */
yyp++
if yyp+1 >= len(yyS) {
nyys := make([]yyhintSymType, len(yyS)*2)
copy(nyys, yyS)
yyS = nyys
parser.cache = yyS
}
parser.yyVAL = &yyS[yyp+1]
yyS[yyp].yys = yystate
yynewstate:
if yychar < 0 {
yychar = yyhintlex1(yylex, &parser.yylval)
var ok bool
if yyxchar, ok = yyhintXLAT[yychar]; !ok {
yyxchar = len(yyhintSymNames) // > tab width
}
}
if yyhintDebug >= 4 {
var a []int
for _, v := range yyS[:yyp+1] {
a = append(a, v.yys)
}
__yyfmt__.Printf("state stack %v\n", a)
}
row := yyhintParseTab[yystate]
yyn = 0
if yyxchar < len(row) {
if yyn = int(row[yyxchar]); yyn != 0 {
yyn += yyhintTabOfs
}
}
switch {
case yyn > 0: // shift
yychar = -1
*parser.yyVAL = parser.yylval
yystate = yyn
yyshift = yyn
if yyhintDebug >= 2 {
__yyfmt__.Printf("shift, and goto state %d\n", yystate)
}
if Errflag > 0 {
Errflag--
}
goto yystack
case yyn < 0: // reduce
case yystate == 1: // accept
if yyhintDebug >= 2 {
__yyfmt__.Println("accept")
}
goto ret0
}
if yyn == 0 {
/* error ... attempt to resume parsing */
switch Errflag {
case 0: /* brand new error */
if yyhintDebug >= 1 {
__yyfmt__.Printf("no action for %s in state %d\n", yyhintSymName(yychar), yystate)
}
msg, ok := yyhintXErrors[yyhintXError{yystate, yyxchar}]
if !ok {
msg, ok = yyhintXErrors[yyhintXError{yystate, -1}]
}
if !ok && yyshift != 0 {
msg, ok = yyhintXErrors[yyhintXError{yyshift, yyxchar}]
}
if !ok {
msg, ok = yyhintXErrors[yyhintXError{yyshift, -1}]
}
if !ok || msg == "" {
msg = "syntax error"
}
// ignore goyacc error message
yylex.AppendError(yylex.Errorf(""))
Nerrs++
fallthrough
case 1, 2: /* incompletely recovered error ... try again */
Errflag = 3
/* find a state where "error" is a legal shift action */
for yyp >= 0 {
row := yyhintParseTab[yyS[yyp].yys]
if yyError < len(row) {
yyn = int(row[yyError]) + yyhintTabOfs
if yyn > 0 { // hit
if yyhintDebug >= 2 {
__yyfmt__.Printf("error recovery found error shift in state %d\n", yyS[yyp].yys)
}
yystate = yyn /* simulate a shift of "error" */
goto yystack
}
}
/* the current p has no shift on "error", pop stack */
if yyhintDebug >= 2 {
__yyfmt__.Printf("error recovery pops state %d\n", yyS[yyp].yys)
}
yyp--
}
/* there is no state on the stack with an error shift ... abort */
if yyhintDebug >= 2 {
__yyfmt__.Printf("error recovery failed\n")
}
goto ret1
case 3: /* no shift yet; clobber input char */
if yyhintDebug >= 2 {
__yyfmt__.Printf("error recovery discards %s\n", yyhintSymName(yychar))
}
if yychar == yyhintEOFCode {
goto ret1
}
yychar = -1
goto yynewstate /* try again in the same state */
}
}
r := -yyn
x0 := yyhintReductions[r]
x, n := x0.xsym, x0.components
yypt := yyp
_ = yypt // guard against "declared and not used"
yyp -= n
if yyp+1 >= len(yyS) {
nyys := make([]yyhintSymType, len(yyS)*2)
copy(nyys, yyS)
yyS = nyys
parser.cache = yyS
}
parser.yyVAL = &yyS[yyp+1]
/* consult goto table to find next state */
exState := yystate
yystate = int(yyhintParseTab[yyS[yyp].yys][x]) + yyhintTabOfs
/* reduction by production r */
if yyhintDebug >= 2 {
__yyfmt__.Printf("reduce using rule %v (%s), and goto state %d\n", r, yyhintSymNames[x], yystate)
}
switch r {
case 1:
{
parser.result = yyS[yypt-0].hints
}
case 2:
{
if yyS[yypt-0].hint != nil {
parser.yyVAL.hints = []*ast.TableOptimizerHint{yyS[yypt-0].hint}
}
}
case 3:
{
if yyS[yypt-0].hint != nil {
parser.yyVAL.hints = append(yyS[yypt-2].hints, yyS[yypt-0].hint)
} else {
parser.yyVAL.hints = yyS[yypt-2].hints
}
}
case 4:
{
parser.yyVAL.hints = yyS[yypt-0].hints
}
case 5:
{
parser.yyVAL.hints = append(yyS[yypt-2].hints, yyS[yypt-0].hints...)
}
case 6:
{
parser.warnUnsupportedHint(yyS[yypt-3].ident)
parser.yyVAL.hint = nil
}
case 7:
{
parser.warnUnsupportedHint(yyS[yypt-3].ident)
parser.yyVAL.hint = nil
}
case 8:
{
parser.warnUnsupportedHint(yyS[yypt-3].ident)
parser.yyVAL.hint = nil
}
case 9:
{
h := yyS[yypt-1].hint
h.HintName = ast.NewCIStr(yyS[yypt-3].ident)
parser.yyVAL.hint = h
}
case 10:
{
h := &ast.TableOptimizerHint{
HintName: ast.NewCIStr(yyS[yypt-4].ident),
QBName: ast.NewCIStr(yyS[yypt-2].ident),
HintData: yyS[yypt-1].leadingList,
}
// For LEADING hints we need to maintain two views of the tables:
// h.HintData:
// - Stores the structured AST node (LeadingList).
// - Preserves the nesting and order information of LEADING(...),
//
// h.Tables:
// - Stores a flat slice of all HintTable elements inside the LeadingList.
// - Only used for initialization.
if leadingList, ok := h.HintData.(*ast.LeadingList); ok {
// be compatible with the prior flatten writing style
h.Tables = ast.FlattenLeadingList(leadingList)
}
parser.yyVAL.hint = h
}
case 11:
{
parser.warnUnsupportedHint(yyS[yypt-3].ident)
parser.yyVAL.hint = nil
}
case 12:
{
h := yyS[yypt-1].hint
h.HintName = ast.NewCIStr(yyS[yypt-3].ident)
parser.yyVAL.hint = h
}
case 13:
{
parser.warnUnsupportedHint(yyS[yypt-4].ident)
parser.yyVAL.hint = nil
}
case 14:
{
parser.yyVAL.hint = &ast.TableOptimizerHint{
HintName: ast.NewCIStr(yyS[yypt-4].ident),
QBName: ast.NewCIStr(yyS[yypt-2].ident),
HintData: yyS[yypt-1].number,
}
}
case 15:
{
parser.yyVAL.hint = &ast.TableOptimizerHint{
HintName: ast.NewCIStr(yyS[yypt-4].ident),
QBName: ast.NewCIStr(yyS[yypt-2].ident),
HintData: int64(yyS[yypt-1].number),
}
}
case 16:
{
parser.yyVAL.hint = &ast.TableOptimizerHint{
HintName: ast.NewCIStr(yyS[yypt-5].ident),
HintData: ast.HintSetVar{
VarName: yyS[yypt-3].ident,
Value: yyS[yypt-1].ident,
},
}
}
case 17:
{
parser.yyVAL.hint = &ast.TableOptimizerHint{
HintName: ast.NewCIStr(yyS[yypt-3].ident),
HintData: yyS[yypt-1].ident,
}
}
case 18:
{
parser.yyVAL.hint = &ast.TableOptimizerHint{
HintName: ast.NewCIStr(yyS[yypt-3].ident),
QBName: ast.NewCIStr(yyS[yypt-1].ident),
}
}
case 19:
{
parser.yyVAL.hint = &ast.TableOptimizerHint{
HintName: ast.NewCIStr(yyS[yypt-5].ident),
QBName: ast.NewCIStr(yyS[yypt-3].ident),
Tables: yyS[yypt-1].hint.Tables,
}
}
case 20:
{
maxValue := uint64(math.MaxInt64) / yyS[yypt-1].number
if yyS[yypt-2].number <= maxValue {
parser.yyVAL.hint = &ast.TableOptimizerHint{
HintName: ast.NewCIStr(yyS[yypt-5].ident),
HintData: int64(yyS[yypt-2].number * yyS[yypt-1].number),
QBName: ast.NewCIStr(yyS[yypt-3].ident),
}
} else {
yylex.AppendError(ErrWarnMemoryQuotaOverflow.GenWithStackByArgs(math.MaxInt))
parser.lastErrorAsWarn()
parser.yyVAL.hint = nil
}
}
case 21:
{
parser.yyVAL.hint = &ast.TableOptimizerHint{
HintName: ast.NewCIStr(yyS[yypt-5].ident),
HintData: ast.HintTimeRange{
From: yyS[yypt-3].ident,
To: yyS[yypt-1].ident,
},
}
}
case 22:
{
h := yyS[yypt-1].hint
h.HintName = ast.NewCIStr(yyS[yypt-4].ident)
h.QBName = ast.NewCIStr(yyS[yypt-2].ident)
parser.yyVAL.hint = h
}
case 23:
{
parser.yyVAL.hint = &ast.TableOptimizerHint{
HintName: ast.NewCIStr(yyS[yypt-3].ident),
QBName: ast.NewCIStr(yyS[yypt-1].ident),
}
}
case 24:
{
parser.yyVAL.hint = &ast.TableOptimizerHint{
HintName: ast.NewCIStr(yyS[yypt-0].ident),
}
}
case 25:
{
parser.yyVAL.hint = &ast.TableOptimizerHint{
HintName: ast.NewCIStr(yyS[yypt-4].ident),
QBName: ast.NewCIStr(yyS[yypt-2].ident),
HintData: ast.NewCIStr(yyS[yypt-1].ident),
}
}
case 26:
{
parser.warnUnsupportedHint(yyS[yypt-4].ident)
parser.yyVAL.hint = nil
}
case 27:
{
parser.warnUnsupportedHint(yyS[yypt-3].ident)
parser.yyVAL.hint = nil
}
case 28:
{
parser.warnUnsupportedHint(yyS[yypt-5].ident)
parser.yyVAL.hint = nil
}
case 29:
{
parser.warnUnsupportedHint(yyS[yypt-5].ident)
parser.yyVAL.hint = nil
}
case 30:
{
hs := yyS[yypt-1].hints
name := ast.NewCIStr(yyS[yypt-4].ident)
qb := ast.NewCIStr(yyS[yypt-2].ident)
for _, h := range hs {
h.HintName = name
h.QBName = qb
}
parser.yyVAL.hints = hs
}
case 31:
{
parser.yyVAL.hints = []*ast.TableOptimizerHint{yyS[yypt-0].hint}
}
case 32:
{
parser.yyVAL.hints = append(yyS[yypt-2].hints, yyS[yypt-0].hint)
}
case 33:
{
h := yyS[yypt-1].hint
h.HintData = ast.NewCIStr(yyS[yypt-3].ident)
parser.yyVAL.hint = h
}
case 34:
{
parser.yyVAL.leadingList = &ast.LeadingList{Items: []interface{}{yyS[yypt-0].leadingElement}}
}
case 35:
{
parser.yyVAL.leadingList = yyS[yypt-2].leadingList
parser.yyVAL.leadingList.Items = append(parser.yyVAL.leadingList.Items, yyS[yypt-0].leadingElement)
}
case 36:
{
tmp := yyS[yypt-0].table
parser.yyVAL.leadingElement = &tmp
}
case 37:
{
parser.yyVAL.leadingElement = yyS[yypt-1].leadingList
}
case 38:
{
parser.yyVAL.ident = ""
}
case 42:
{
parser.yyVAL.modelIdents = nil
}
case 43:
{
parser.yyVAL.modelIdents = yyS[yypt-1].modelIdents
}
case 44:
{
parser.yyVAL.modelIdents = []ast.CIStr{ast.NewCIStr(yyS[yypt-0].ident)}
}
case 45:
{
parser.yyVAL.modelIdents = append(yyS[yypt-2].modelIdents, ast.NewCIStr(yyS[yypt-0].ident))
}
case 47:
{
parser.yyVAL.hint = &ast.TableOptimizerHint{
QBName: ast.NewCIStr(yyS[yypt-0].ident),
}
}
case 48:
{
parser.yyVAL.hint = &ast.TableOptimizerHint{
Tables: []ast.HintTable{yyS[yypt-0].table},
QBName: ast.NewCIStr(yyS[yypt-1].ident),
}
}
case 49:
{
h := yyS[yypt-2].hint
h.Tables = append(h.Tables, yyS[yypt-0].table)
parser.yyVAL.hint = h
}
case 50:
{
parser.yyVAL.table = ast.HintTable{
TableName: ast.NewCIStr(yyS[yypt-2].ident),
QBName: ast.NewCIStr(yyS[yypt-1].ident),
PartitionList: yyS[yypt-0].modelIdents,
}
}
case 51:
{
parser.yyVAL.table = ast.HintTable{
DBName: ast.NewCIStr(yyS[yypt-4].ident),
TableName: ast.NewCIStr(yyS[yypt-2].ident),
QBName: ast.NewCIStr(yyS[yypt-1].ident),
PartitionList: yyS[yypt-0].modelIdents,
}
}
case 52:
{
h := yyS[yypt-2].hint
h.Tables = append(h.Tables, yyS[yypt-0].table)
parser.yyVAL.hint = h
}
case 53:
{
parser.yyVAL.hint = &ast.TableOptimizerHint{
Tables: []ast.HintTable{yyS[yypt-0].table},
}
}
case 54:
{
parser.yyVAL.table = ast.HintTable{
TableName: ast.NewCIStr(yyS[yypt-1].ident),
QBName: ast.NewCIStr(yyS[yypt-0].ident),
}
}
case 55:
{
parser.yyVAL.table = ast.HintTable{
QBName: ast.NewCIStr(yyS[yypt-0].ident),
}
}
case 56:
{
h := yyS[yypt-0].hint
h.Tables = []ast.HintTable{yyS[yypt-2].table}
h.QBName = ast.NewCIStr(yyS[yypt-3].ident)
parser.yyVAL.hint = h
}
case 57:
{
parser.yyVAL.hint = &ast.TableOptimizerHint{}
}
case 59:
{
parser.yyVAL.hint = &ast.TableOptimizerHint{
Indexes: []ast.CIStr{ast.NewCIStr(yyS[yypt-0].ident)},
}
}
case 60:
{
h := yyS[yypt-2].hint
h.Indexes = append(h.Indexes, ast.NewCIStr(yyS[yypt-0].ident))
parser.yyVAL.hint = h
}
case 68:
{
parser.yyVAL.ident = strconv.FormatUint(yyS[yypt-0].number, 10)
}
case 69:
{
parser.yyVAL.ident = yyS[yypt-0].ident
}
case 70:
{
parser.yyVAL.ident = "-" + yyS[yypt-0].ident
}
case 71:
{
parser.yyVAL.ident = strconv.FormatUint(yyS[yypt-0].number, 10)
}
case 72:
{
if yyS[yypt-0].number > 9223372036854775808 {
yylex.AppendError(yylex.Errorf("the Signed Value should be at the range of [-9223372036854775808, 9223372036854775807]."))
return 1
} else if yyS[yypt-0].number == 9223372036854775808 {
signed_one := int64(1)
parser.yyVAL.ident = strconv.FormatInt(signed_one<<63, 10)
} else {
parser.yyVAL.ident = strconv.FormatInt(-int64(yyS[yypt-0].number), 10)
}
}
case 73:
{
parser.yyVAL.number = 1024 * 1024
}
case 74:
{
parser.yyVAL.number = 1024 * 1024 * 1024
}
case 75:
{
parser.yyVAL.hint = &ast.TableOptimizerHint{HintData: true}
}
case 76:
{
parser.yyVAL.hint = &ast.TableOptimizerHint{HintData: false}
}
}
if !parser.lexer.skipPositionRecording {
yyhintSetOffset(parser.yyVAL, parser.yyVAL.offset)
}
if yyEx != nil && yyEx.Reduced(r, exState, parser.yyVAL) {
return -1
}
goto yystack /* stack new state and value */
}
// Copyright 2020 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package parser
import (
"strconv"
"strings"
"github.com/pingcap/tidb/pkg/parser/ast"
"github.com/pingcap/tidb/pkg/parser/mysql"
"github.com/pingcap/tidb/pkg/parser/terror"
)
//revive:disable:exported
var (
ErrWarnOptimizerHintUnsupportedHint = terror.ClassParser.NewStd(mysql.ErrWarnOptimizerHintUnsupportedHint)
ErrWarnOptimizerHintInvalidToken = terror.ClassParser.NewStd(mysql.ErrWarnOptimizerHintInvalidToken)
ErrWarnMemoryQuotaOverflow = terror.ClassParser.NewStd(mysql.ErrWarnMemoryQuotaOverflow)
ErrWarnOptimizerHintParseError = terror.ClassParser.NewStd(mysql.ErrWarnOptimizerHintParseError)
ErrWarnOptimizerHintInvalidInteger = terror.ClassParser.NewStd(mysql.ErrWarnOptimizerHintInvalidInteger)
ErrWarnOptimizerHintWrongPos = terror.ClassParser.NewStd(mysql.ErrWarnOptimizerHintWrongPos)
)
//revive:enable:exported
// hintScanner implements the yyhintLexer interface
type hintScanner struct {
Scanner
setVarValueState hintSetVarValueState
}
// SET_VAR values are parsed with lexer context so decimal/float tokens are accepted only after
// SET_VAR(name = ...). Other hints, such as QB_NAME(1.5), must keep rejecting those tokens.
type hintSetVarValueState uint8
const (
hintSetVarValueStateNone hintSetVarValueState = iota
hintSetVarValueStateAfterSetVar
hintSetVarValueStateAfterLParen
hintSetVarValueStateAfterName
hintSetVarValueStateExpectValue
hintSetVarValueStateAfterSign
)
func (hs *hintScanner) Errorf(format string, args ...interface{}) error {
inner := hs.Scanner.Errorf(format, args...)
return ErrParse.GenWithStackByArgs("Optimizer hint syntax error at", inner)
}
func (hs *hintScanner) acceptSetVarNumericValue() bool {
return hs.setVarValueState == hintSetVarValueStateExpectValue ||
hs.setVarValueState == hintSetVarValueStateAfterSign
}
func (hs *hintScanner) updateSetVarValueState(tok int) {
switch hs.setVarValueState {
case hintSetVarValueStateNone:
if tok == hintSetVar {
hs.setVarValueState = hintSetVarValueStateAfterSetVar
}
case hintSetVarValueStateAfterSetVar:
if tok == '(' {
hs.setVarValueState = hintSetVarValueStateAfterLParen
} else if tok != hintSetVar {
hs.setVarValueState = hintSetVarValueStateNone
}
case hintSetVarValueStateAfterLParen:
if tok == ')' || tok == ',' || tok == '=' || tok <= 0 {
hs.setVarValueState = hintSetVarValueStateNone
} else {
hs.setVarValueState = hintSetVarValueStateAfterName
}
case hintSetVarValueStateAfterName:
if tok == '=' {
hs.setVarValueState = hintSetVarValueStateExpectValue
} else {
hs.setVarValueState = hintSetVarValueStateNone
}
case hintSetVarValueStateExpectValue:
if tok == '+' || tok == '-' {
hs.setVarValueState = hintSetVarValueStateAfterSign
} else {
hs.setVarValueState = hintSetVarValueStateNone
}
case hintSetVarValueStateAfterSign:
hs.setVarValueState = hintSetVarValueStateNone
}
}
func (hs *hintScanner) Lex(lval *yyhintSymType) int {
tok, pos, lit := hs.scan()
hs.lastScanOffset = pos.Offset
var errorTokenType string
returnToken := func(tok int) int {
hs.updateSetVarValueState(tok)
return tok
}
switch tok {
case intLit:
n, e := strconv.ParseUint(lit, 10, 64)
if e != nil {
hs.AppendError(ErrWarnOptimizerHintInvalidInteger.GenWithStackByArgs(lit))
return returnToken(hintInvalid)
}
lval.number = n
return returnToken(hintIntLit)
case singleAtIdentifier:
lval.ident = lit
return returnToken(hintSingleAtIdentifier)
case identifier:
lval.ident = lit
if tok1, ok := hintTokenMap[strings.ToUpper(lit)]; ok {
return returnToken(tok1)
}
return returnToken(hintIdentifier)
case stringLit:
lval.ident = lit
if hs.sqlMode.HasANSIQuotesMode() && hs.r.s[pos.Offset] == '"' {
return returnToken(hintIdentifier)
}
return returnToken(hintStringLit)
case bitLit:
if strings.HasPrefix(lit, "0b") {
lval.ident = lit
return returnToken(hintIdentifier)
}
errorTokenType = "bit-value literal"
case hexLit:
if strings.HasPrefix(lit, "0x") {
lval.ident = lit
return returnToken(hintIdentifier)
}
errorTokenType = "hexadecimal literal"
case quotedIdentifier:
lval.ident = lit
return returnToken(hintIdentifier)
case eq:
return returnToken('=')
case floatLit:
if hs.acceptSetVarNumericValue() {
lval.ident = lit
return returnToken(hintNumericLit)
}
errorTokenType = "floating point number"
case decLit:
if hs.acceptSetVarNumericValue() {
lval.ident = lit
return returnToken(hintNumericLit)
}
errorTokenType = "decimal number"
default:
if tok <= 0x7f {
return returnToken(tok)
}
errorTokenType = "unknown token"
}
hs.AppendError(ErrWarnOptimizerHintInvalidToken.GenWithStackByArgs(errorTokenType, lit, tok))
return returnToken(hintInvalid)
}
type hintParser struct {
lexer hintScanner
result []*ast.TableOptimizerHint
// the following fields are used by yyParse to reduce allocation.
cache []yyhintSymType
yylval yyhintSymType
yyVAL *yyhintSymType
}
func newHintParser() *hintParser {
return &hintParser{cache: make([]yyhintSymType, 50)}
}
func (hp *hintParser) parse(input string, sqlMode mysql.SQLMode, initPos Pos) ([]*ast.TableOptimizerHint, []error) {
hp.result = nil
hp.lexer.reset(input[3:])
hp.lexer.setVarValueState = hintSetVarValueStateNone
hp.lexer.SetSQLMode(sqlMode)
hp.lexer.r.updatePos(Pos{
Line: initPos.Line,
Col: initPos.Col + 3, // skipped the initial '/*+'
Offset: 0,
})
hp.lexer.inBangComment = true // skip the final '*/' (we need the '*/' for reporting warnings)
yyhintParse(&hp.lexer, hp)
warns, errs := hp.lexer.Errors()
if len(errs) == 0 {
errs = warns
}
return hp.result, errs
}
// ParseHint parses an optimizer hint (the interior of `/*+ ... */`).
func ParseHint(input string, sqlMode mysql.SQLMode, initPos Pos) ([]*ast.TableOptimizerHint, []error) {
hp := newHintParser()
return hp.parse(input, sqlMode, initPos)
}
func (hp *hintParser) warnUnsupportedHint(name string) {
warn := ErrWarnOptimizerHintUnsupportedHint.FastGenByArgs(name)
hp.lexer.warns = append(hp.lexer.warns, warn)
}
func (hp *hintParser) lastErrorAsWarn() {
hp.lexer.lastErrorAsWarn()
}
// Copyright 2016 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package parser
import (
"bytes"
"fmt"
"strconv"
"strings"
"unicode"
"github.com/pingcap/tidb/pkg/parser/charset"
"github.com/pingcap/tidb/pkg/parser/mysql"
tidbfeature "github.com/pingcap/tidb/pkg/parser/tidb"
"github.com/pingcap/tidb/pkg/parser/util"
)
var _ = yyLexer(&Scanner{})
// Pos represents the position of a token.
type Pos struct {
Line int
Col int
Offset int
}
// Scanner implements the yyLexer interface.
type Scanner struct {
r reader
buf bytes.Buffer
client charset.Encoding
connection charset.Encoding
errs []error
warns []error
stmtStartPos int
// inBangComment is true if we are inside a `/*! ... */` block.
// It is used to ignore a stray `*/` when scanning.
inBangComment bool
sqlMode mysql.SQLMode
// If the lexer should recognize keywords for window function.
// It may break the compatibility when support those keywords,
// because some application may already use them as identifiers.
supportWindowFunc bool
// Whether record the original text keyword position to the AST node.
skipPositionRecording bool
// lastScanOffset indicates last offset returned by scan().
// It's used to substring sql in syntax error message.
lastScanOffset int
// lastKeyword records the previous keyword returned by scan().
// determine whether an optimizer hint should be parsed or ignored.
lastKeyword int
// lastKeyword2 records the keyword before lastKeyword, it is used
// to disambiguate hint after for update, which should be ignored.
lastKeyword2 int
// lastKeyword3 records the keyword before lastKeyword2, it is used
// to disambiguate hint after create binding for update, which should
// be pertained.
lastKeyword3 int
// hintPos records the start position of the previous optimizer hint.
lastHintPos Pos
// true if a dot follows an identifier
identifierDot bool
// keepHint, if true, Scanner will keep hint when normalizing .
keepHint bool
}
// Errors returns the errors and warns during a scan.
func (s *Scanner) Errors() (warns []error, errs []error) {
return s.warns, s.errs
}
// reset resets the sql string to be scanned.
func (s *Scanner) reset(sql string) {
s.client = charset.FindEncoding(mysql.DefaultCharset)
s.connection = charset.FindEncoding(mysql.DefaultCharset)
s.r = reader{s: sql, p: Pos{Line: 1}, l: len(sql)}
s.buf.Reset()
s.errs = s.errs[:0]
s.warns = s.warns[:0]
s.stmtStartPos = 0
s.inBangComment = false
s.lastKeyword = 0
s.identifierDot = false
}
func (s *Scanner) stmtText() string {
endPos := s.r.pos().Offset
if s.r.s[endPos-1] == '\n' {
endPos = endPos - 1 // trim new line
}
if s.r.s[s.stmtStartPos] == '\n' {
s.stmtStartPos++
}
text := s.r.s[s.stmtStartPos:endPos]
s.stmtStartPos = endPos
return text
}
// Errorf tells scanner something is wrong.
// Scanner satisfies yyLexer interface which need this function.
func (s *Scanner) Errorf(format string, a ...interface{}) (err error) {
str := fmt.Sprintf(format, a...)
val := s.r.s[s.lastScanOffset:]
var lenStr = ""
if len(val) > 2048 {
lenStr = "(total length " + strconv.Itoa(len(val)) + ")"
val = val[:2048]
}
err = fmt.Errorf("line %d column %d near \"%s\"%s %s",
s.r.p.Line, s.r.p.Col, val, str, lenStr)
return
}
// AppendError sets error into scanner.
// Scanner satisfies yyLexer interface which need this function.
func (s *Scanner) AppendError(err error) {
if err == nil {
return
}
s.errs = append(s.errs, err)
}
// AppendWarn sets warning into scanner.
func (s *Scanner) AppendWarn(err error) {
if err == nil {
return
}
s.warns = append(s.warns, err)
}
// convert2System convert lit from client encoding to system encoding which is utf8mb4.
func (s *Scanner) convert2System(tok int, lit string) (int, string) {
utf8Lit, err := s.client.Transform(nil, charset.HackSlice(lit), charset.OpDecodeReplace)
if err != nil {
s.AppendWarn(err)
}
return tok, charset.HackString(utf8Lit)
}
// convert2Connection convert lit from client encoding to connection encoding.
func (s *Scanner) convert2Connection(tok int, lit string) (int, string) {
if mysql.IsUTF8Charset(s.client.Name()) {
return tok, lit
}
utf8Lit, err := s.client.Transform(nil, charset.HackSlice(lit), charset.OpDecodeReplace)
if err != nil {
s.AppendError(err)
if s.sqlMode.HasStrictMode() && s.client.Tp() == s.connection.Tp() {
return invalid, lit
}
s.lastErrorAsWarn()
}
// It is definitely valid if `client` is the same with `connection`, so just transform if they are not the same.
if s.client.Tp() != s.connection.Tp() {
utf8Lit, _ = s.connection.Transform(nil, utf8Lit, charset.OpReplaceNoErr)
}
return tok, charset.HackString(utf8Lit)
}
func (s *Scanner) getNextToken() int {
r := s.r
tok, pos, lit := s.scan()
if tok == identifier {
tok = s.handleIdent(&yySymType{})
}
if tok == identifier {
if tok1 := s.isTokenIdentifier(lit, pos.Offset); tok1 != 0 {
tok = tok1
}
}
s.r = r
return tok
}
func (s *Scanner) getNextTwoTokens() (tok1 int, tok2 int) {
r := s.r
tok1, pos, lit := s.scan()
if tok1 == identifier {
tok1 = s.handleIdent(&yySymType{})
}
if tok1 == identifier {
if tmpToken := s.isTokenIdentifier(lit, pos.Offset); tmpToken != 0 {
tok1 = tmpToken
}
}
tok2, pos, lit = s.scan()
if tok2 == identifier {
tok2 = s.handleIdent(&yySymType{})
}
if tok2 == identifier {
if tmpToken := s.isTokenIdentifier(lit, pos.Offset); tmpToken != 0 {
tok2 = tmpToken
}
}
s.r = r
return tok1, tok2
}
// Lex returns a token and store the token value in v.
// Scanner satisfies yyLexer interface.
// 0 and invalid are special token id this function would return:
// return 0 tells parser that scanner meets EOF,
// return invalid tells parser that scanner meets illegal character.
func (s *Scanner) Lex(v *yySymType) int {
tok, pos, lit := s.scan()
s.lastScanOffset = pos.Offset
s.lastKeyword3 = s.lastKeyword2
s.lastKeyword2 = s.lastKeyword
s.lastKeyword = 0
v.offset = pos.Offset
v.ident = lit
if tok == identifier {
tok = s.handleIdent(v)
}
if tok == identifier {
if tok1 := s.isTokenIdentifier(lit, pos.Offset); tok1 != 0 {
tok = tok1
s.lastKeyword = tok1
}
}
if s.sqlMode.HasANSIQuotesMode() &&
tok == stringLit &&
s.r.s[v.offset] == '"' {
tok = identifier
}
if tok == pipes && !(s.sqlMode.HasPipesAsConcatMode()) {
return pipesAsOr
}
if tok == not && s.sqlMode.HasHighNotPrecedenceMode() {
return not2
}
if (tok == as || tok == member) && s.getNextToken() == of {
_, pos, lit = s.scan()
v.ident = fmt.Sprintf("%s %s", v.ident, lit)
s.lastScanOffset = pos.Offset
v.offset = pos.Offset
if tok == as {
s.lastKeyword = asof
return asof
}
s.lastKeyword = memberof
return memberof
}
if tok == to {
tok1, tok2 := s.getNextTwoTokens()
if tok1 == timestampType && tok2 == stringLit {
_, pos, lit = s.scan()
v.ident = fmt.Sprintf("%s %s", v.ident, lit)
s.lastKeyword = toTimestamp
s.lastScanOffset = pos.Offset
v.offset = pos.Offset
return toTimestamp
}
if tok1 == tsoType && tok2 == intLit {
_, pos, lit = s.scan()
v.ident = fmt.Sprintf("%s %s", v.ident, lit)
s.lastKeyword = toTSO
s.lastScanOffset = pos.Offset
v.offset = pos.Offset
return toTSO
}
}
// fix shift/reduce conflict with DEFINED NULL BY xxx OPTIONALLY ENCLOSED
if tok == optionally {
tok1, tok2 := s.getNextTwoTokens()
if tok1 == enclosed && tok2 == by {
_, _, lit = s.scan()
_, pos2, lit2 := s.scan()
v.ident = fmt.Sprintf("%s %s %s", v.ident, lit, lit2)
s.lastKeyword = optionallyEnclosedBy
s.lastScanOffset = pos2.Offset
v.offset = pos2.Offset
return optionallyEnclosedBy
}
}
switch tok {
case intLit:
return toInt(s, v, lit)
case floatLit:
return toFloat(s, v, lit)
case decLit:
return toDecimal(s, v, lit)
case hexLit:
return toHex(s, v, lit)
case bitLit:
return toBit(s, v, lit)
case singleAtIdentifier, doubleAtIdentifier, cast, extract:
v.item = lit
return tok
case null:
v.item = nil
case quotedIdentifier, identifier:
tok = identifier
s.identifierDot = s.r.peek() == '.'
tok, v.ident = s.convert2System(tok, lit)
case stringLit:
tok, v.ident = s.convert2Connection(tok, lit)
}
return tok
}
// LexLiteral returns the value of the converted literal
func (s *Scanner) LexLiteral() interface{} {
symType := &yySymType{}
s.Lex(symType)
if symType.item == nil {
return symType.ident
}
return symType.item
}
// SetSQLMode sets the SQL mode for scanner.
func (s *Scanner) SetSQLMode(mode mysql.SQLMode) {
s.sqlMode = mode
}
// GetSQLMode return the SQL mode of scanner.
func (s *Scanner) GetSQLMode() mysql.SQLMode {
return s.sqlMode
}
// EnableWindowFunc controls whether the scanner recognize the keywords of window function.
func (s *Scanner) EnableWindowFunc(val bool) {
s.supportWindowFunc = val
}
// setKeepHint set the keepHint flag when normalizing.
func (s *Scanner) setKeepHint(val bool) {
s.keepHint = val
}
// InheritScanner returns a new scanner object which inherits configurations from the parent scanner.
func (s *Scanner) InheritScanner(sql string) *Scanner {
return &Scanner{
r: reader{s: sql},
client: s.client,
sqlMode: s.sqlMode,
supportWindowFunc: s.supportWindowFunc,
}
}
// NewScanner returns a new scanner object.
func NewScanner(s string) *Scanner {
lexer := &Scanner{r: reader{s: s}}
lexer.reset(s)
return lexer
}
func (*Scanner) handleIdent(lval *yySymType) int {
str := lval.ident
// A character string literal may have an optional character set introducer and COLLATE clause:
// [_charset_name]'string' [COLLATE collation_name]
// See https://dev.mysql.com/doc/refman/5.7/en/charset-literal.html
if !strings.HasPrefix(str, "_") {
return identifier
}
cs, _ := charset.GetCharsetInfo(str[1:])
if cs == nil {
return identifier
}
lval.ident = cs.Name
return underscoreCS
}
func (s *Scanner) skipWhitespace() byte {
return s.r.incAsLongAs(func(b byte) bool {
return unicode.IsSpace(rune(b))
})
}
func (s *Scanner) scan() (tok int, pos Pos, lit string) {
ch0 := s.r.peek()
if unicode.IsSpace(rune(ch0)) {
ch0 = s.skipWhitespace()
}
pos = s.r.pos()
if s.r.eof() {
// when scanner meets EOF, the returned token should be 0,
// because 0 is a special token id to remind the parser that stream is end.
return 0, pos, ""
}
if isIdentExtend(ch0) {
return scanIdentifier(s)
}
// search a trie to get a token.
node := &ruleTable
for !(node.childs[ch0] == nil || s.r.eof()) {
node = node.childs[ch0]
if node.fn != nil {
return node.fn(s)
}
s.r.inc()
ch0 = s.r.peek()
}
tok, lit = node.token, s.r.data(&pos)
return
}
func startWithXx(s *Scanner) (tok int, pos Pos, lit string) {
pos = s.r.pos()
s.r.inc()
if s.r.peek() == '\'' {
s.r.inc()
s.scanHex()
if s.r.peek() == '\'' {
s.r.inc()
tok, lit = hexLit, s.r.data(&pos)
} else {
tok = invalid
}
return
}
s.r.updatePos(pos)
return scanIdentifier(s)
}
func startWithNn(s *Scanner) (tok int, pos Pos, lit string) {
tok, pos, lit = scanIdentifier(s)
// The National Character Set, N'some text' or n'some test'.
// See https://dev.mysql.com/doc/refman/5.7/en/string-literals.html
// and https://dev.mysql.com/doc/refman/5.7/en/charset-national.html
if lit == "N" || lit == "n" {
if s.r.peek() == '\'' {
tok = underscoreCS
lit = "utf8"
}
}
return
}
func startWithBb(s *Scanner) (tok int, pos Pos, lit string) {
pos = s.r.pos()
s.r.inc()
if s.r.peek() == '\'' {
s.r.inc()
s.scanBit()
if s.r.peek() == '\'' {
s.r.inc()
tok, lit = bitLit, s.r.data(&pos)
} else {
tok = invalid
}
return
}
s.r.updatePos(pos)
return scanIdentifier(s)
}
func startWithSharp(s *Scanner) (tok int, pos Pos, lit string) {
s.r.incAsLongAs(func(ch byte) bool {
return ch != '\n'
})
return s.scan()
}
func startWithDash(s *Scanner) (tok int, pos Pos, lit string) {
pos = s.r.pos()
if strings.HasPrefix(s.r.s[pos.Offset:], "--") {
remainLen := len(s.r.s[pos.Offset:])
if remainLen == 2 || (remainLen > 2 && unicode.IsSpace(rune(s.r.s[pos.Offset+2]))) {
s.r.incAsLongAs(func(ch byte) bool {
return ch != '\n'
})
return s.scan()
}
}
if strings.HasPrefix(s.r.s[pos.Offset:], "->>") {
tok = juss
s.r.incN(3)
return
}
if strings.HasPrefix(s.r.s[pos.Offset:], "->") {
tok = jss
s.r.incN(2)
return
}
tok = int('-')
lit = "-"
s.r.inc()
return
}
func startWithSlash(s *Scanner) (tok int, pos Pos, lit string) {
pos = s.r.pos()
s.r.inc()
if s.r.peek() != '*' {
tok = int('/')
lit = "/"
return
}
isOptimizerHint := false
currentCharIsStar := false
s.r.inc() // we see '/*' so far.
switch s.r.readByte() {
case '!': // '/*!' MySQL-specific comments
// See http://dev.mysql.com/doc/refman/5.7/en/comments.html
// in '/*!', which we always recognize regardless of version.
s.scanVersionDigits(5, 5)
s.inBangComment = true
return s.scan()
case 'T': // '/*T' maybe TiDB-specific comments
if s.r.peek() != '!' {
// '/*TX' is just normal comment.
break
}
s.r.inc()
// in '/*T!', try to match the pattern '/*T![feature1,feature2,...]'.
features := s.scanFeatureIDs()
if tidbfeature.CanParseFeature(features...) {
s.inBangComment = true
return s.scan()
}
case 'M': // '/*M' maybe MariaDB-specific comments
// no special treatment for now.
case '+': // '/*+' optimizer hints
// See https://dev.mysql.com/doc/refman/5.7/en/optimizer-hints.html
if _, ok := hintedTokens[s.lastKeyword]; ok || s.keepHint {
// only recognize optimizers hints directly followed by certain
// keywords like SELECT, INSERT, etc., only a special case "FOR UPDATE" needs to be handled
// we will report a warning in order to match MySQL's behavior, but the hint content will be ignored
if s.lastKeyword2 == forKwd {
if s.lastKeyword3 == binding {
// special case of `create binding for update`
isOptimizerHint = true
} else {
s.warns = append(s.warns, ParseErrorWith(s.r.data(&pos), s.r.p.Line))
}
} else {
isOptimizerHint = true
}
} else {
s.AppendWarn(ErrWarnOptimizerHintWrongPos)
}
case '*': // '/**' if the next char is '/' it would close the comment.
currentCharIsStar = true
default:
}
// standard C-like comment. read until we see '*/' then drop it.
for {
if currentCharIsStar || s.r.incAsLongAs(func(ch byte) bool { return ch != '*' }) == '*' {
switch s.r.readByte() {
case '/':
// Meets */, means comment end.
if isOptimizerHint {
s.lastHintPos = pos
return hintComment, pos, s.r.data(&pos)
}
return s.scan()
case '*':
currentCharIsStar = true
continue
default:
currentCharIsStar = false
continue
}
}
// unclosed comment or other errors.
s.errs = append(s.errs, ParseErrorWith(s.r.data(&pos), s.r.p.Line))
return
}
}
func startWithStar(s *Scanner) (tok int, pos Pos, lit string) {
pos = s.r.pos()
s.r.inc()
// skip and exit '/*!' if we see '*/'
if s.inBangComment && s.r.peek() == '/' {
s.inBangComment = false
s.r.inc()
return s.scan()
}
// otherwise it is just a normal star.
s.identifierDot = false
return '*', pos, "*"
}
func startWithAt(s *Scanner) (tok int, pos Pos, lit string) {
pos = s.r.pos()
s.r.inc()
tok, lit = scanIdentifierOrString(s)
switch tok {
case '@':
s.r.inc()
stream := s.r.s[pos.Offset+2:]
var prefix string
for _, v := range []string{"global.", "session.", "local."} {
if len(v) > len(stream) {
continue
}
if strings.EqualFold(stream[:len(v)], v) {
prefix = v
s.r.incN(len(v))
break
}
}
tok, lit = scanIdentifierOrString(s)
switch tok {
case stringLit, quotedIdentifier:
var sb strings.Builder
sb.WriteString("@@")
sb.WriteString(prefix)
sb.WriteString(lit)
tok, lit = doubleAtIdentifier, sb.String()
case identifier:
tok, lit = doubleAtIdentifier, s.r.data(&pos)
}
case invalid:
return
default:
tok = singleAtIdentifier
}
return
}
func scanIdentifier(s *Scanner) (int, Pos, string) {
pos := s.r.pos()
s.r.incAsLongAs(isIdentChar)
return identifier, pos, s.r.data(&pos)
}
func scanIdentifierOrString(s *Scanner) (tok int, lit string) {
ch1 := s.r.peek()
switch ch1 {
case '\'', '"':
tok, _, lit = startString(s)
case '`':
tok, _, lit = scanQuotedIdent(s)
default:
if isUserVarChar(ch1) {
pos := s.r.pos()
s.r.incAsLongAs(isUserVarChar)
tok, lit = identifier, s.r.data(&pos)
} else {
tok = int(ch1)
}
}
return
}
var (
quotedIdentifier = -identifier
)
func scanQuotedIdent(s *Scanner) (tok int, pos Pos, lit string) {
pos = s.r.pos()
s.r.inc()
s.buf.Reset()
for !s.r.eof() {
tPos := s.r.pos()
if s.r.skipRune(s.client) {
s.buf.WriteString(s.r.data(&tPos))
continue
}
ch := s.r.readByte()
if ch == '`' {
if s.r.peek() != '`' {
// don't return identifier in case that it's interpreted as keyword token later.
tok, lit = quotedIdentifier, s.buf.String()
return
}
s.r.inc()
}
s.buf.WriteByte(ch)
}
tok = invalid
return
}
func startString(s *Scanner) (tok int, pos Pos, lit string) {
return s.scanString()
}
// lazyBuf is used to avoid allocation if possible.
// it has a useBuf field indicates whether bytes.Buffer is necessary. if
// useBuf is false, we can avoid calling bytes.Buffer.String(), which
// make a copy of data and cause allocation.
type lazyBuf struct {
useBuf bool
r *reader
b *bytes.Buffer
p *Pos
}
func (mb *lazyBuf) setUseBuf(str string) {
if !mb.useBuf {
mb.useBuf = true
mb.b.Reset()
mb.b.WriteString(str)
}
}
func (mb *lazyBuf) writeRune(r rune, w int) {
if mb.useBuf {
if w > 1 {
mb.b.WriteRune(r)
} else {
mb.b.WriteByte(byte(r))
}
}
}
func (mb *lazyBuf) data() string {
var lit string
if mb.useBuf {
lit = mb.b.String()
} else {
lit = mb.r.data(mb.p)
lit = lit[1 : len(lit)-1]
}
return lit
}
func (s *Scanner) scanString() (tok int, pos Pos, lit string) {
tok, pos = stringLit, s.r.pos()
ending := s.r.readByte()
s.buf.Reset()
for !s.r.eof() {
tPos := s.r.pos()
if s.r.skipRune(s.client) {
s.buf.WriteString(s.r.data(&tPos))
continue
}
ch0 := s.r.readByte()
if ch0 == ending {
if s.r.peek() != ending {
lit = s.buf.String()
return
}
s.r.inc()
s.buf.WriteByte(ch0)
} else if ch0 == '\\' && !s.sqlMode.HasNoBackslashEscapesMode() {
if s.r.eof() {
break
}
s.handleEscape(s.r.peek(), &s.buf)
s.r.inc()
} else {
s.buf.WriteByte(ch0)
}
}
tok = invalid
return
}
// handleEscape handles the case in scanString when previous char is '\'.
func (*Scanner) handleEscape(b byte, buf *bytes.Buffer) {
/*
\" \' \\ \n \0 \b \Z \r \t ==> escape to one char
\% \_ ==> preserve both char
other ==> remove \
*/
buf.Write(util.UnescapeChar(b))
}
func startWithNumber(s *Scanner) (tok int, pos Pos, lit string) {
if s.identifierDot {
return scanIdentifier(s)
}
pos = s.r.pos()
tok = intLit
ch0 := s.r.readByte()
if ch0 == '0' {
tok = intLit
ch1 := s.r.peek()
switch {
case ch1 >= '0' && ch1 <= '7':
s.r.inc()
s.scanOct()
case ch1 == 'x' || ch1 == 'X':
s.r.inc()
p1 := s.r.pos()
s.scanHex()
p2 := s.r.pos()
// 0x, 0x7fz3 are identifier
if p1 == p2 || isDigit(s.r.peek()) {
s.r.incAsLongAs(isIdentChar)
return identifier, pos, s.r.data(&pos)
}
tok = hexLit
case ch1 == 'b':
s.r.inc()
p1 := s.r.pos()
s.scanBit()
p2 := s.r.pos()
// 0b, 0b123, 0b1ab are identifier
if p1 == p2 || isDigit(s.r.peek()) {
s.r.incAsLongAs(isIdentChar)
return identifier, pos, s.r.data(&pos)
}
tok = bitLit
case ch1 == '.':
return s.scanFloat(&pos)
case ch1 == 'B':
s.r.incAsLongAs(isIdentChar)
return identifier, pos, s.r.data(&pos)
}
}
s.scanDigits()
ch0 = s.r.peek()
if ch0 == '.' || ch0 == 'e' || ch0 == 'E' {
return s.scanFloat(&pos)
}
// Identifiers may begin with a digit but unless quoted may not consist solely of digits.
if !s.r.eof() && isIdentChar(ch0) {
s.r.incAsLongAs(isIdentChar)
return identifier, pos, s.r.data(&pos)
}
lit = s.r.data(&pos)
return
}
func startWithDot(s *Scanner) (tok int, pos Pos, lit string) {
pos = s.r.pos()
s.r.inc()
if s.identifierDot {
return int('.'), pos, "."
}
if isDigit(s.r.peek()) {
tok, p, l := s.scanFloat(&pos)
if tok == identifier {
return invalid, p, l
}
return tok, p, l
}
tok, lit = int('.'), "."
return
}
func (s *Scanner) scanOct() {
s.r.incAsLongAs(func(ch byte) bool {
return ch >= '0' && ch <= '7'
})
}
func (s *Scanner) scanHex() {
s.r.incAsLongAs(func(ch byte) bool {
return ch >= '0' && ch <= '9' ||
ch >= 'a' && ch <= 'f' ||
ch >= 'A' && ch <= 'F'
})
}
func (s *Scanner) scanBit() {
s.r.incAsLongAs(func(ch byte) bool {
return ch == '0' || ch == '1'
})
}
func (s *Scanner) scanFloat(beg *Pos) (tok int, pos Pos, lit string) {
s.r.updatePos(*beg)
// float = D1 . D2 e D3
s.scanDigits()
ch0 := s.r.peek()
if ch0 == '.' {
s.r.inc()
s.scanDigits()
ch0 = s.r.peek()
}
if ch0 == 'e' || ch0 == 'E' {
s.r.inc()
ch0 = s.r.peek()
if ch0 == '-' || ch0 == '+' {
s.r.inc()
}
if isDigit(s.r.peek()) {
s.scanDigits()
tok = floatLit
} else {
// D1 . D2 e XX when XX is not D3, parse the result to an identifier.
// 9e9e = 9e9(float) + e(identifier)
// 9est = 9est(identifier)
s.r.updatePos(*beg)
s.r.incAsLongAs(isIdentChar)
tok = identifier
}
} else {
tok = decLit
}
pos, lit = *beg, s.r.data(beg)
return
}
func (s *Scanner) scanDigits() string {
pos := s.r.pos()
s.r.incAsLongAs(isDigit)
return s.r.data(&pos)
}
// scanVersionDigits scans for `min` to `max` digits (range inclusive) used in
// `/*!12345 ... */` comments.
func (s *Scanner) scanVersionDigits(minv, maxv int) {
pos := s.r.pos()
for i := range maxv {
ch := s.r.peek()
if isDigit(ch) {
s.r.inc()
} else if i < minv {
s.r.updatePos(pos)
return
} else {
break
}
}
}
func (s *Scanner) scanFeatureIDs() (featureIDs []string) {
pos := s.r.pos()
const init, expectChar, obtainChar = 0, 1, 2
state := init
var b strings.Builder
for !s.r.eof() {
ch := s.r.peek()
s.r.inc()
switch state {
case init:
if ch == '[' {
state = expectChar
break
}
s.r.updatePos(pos)
return nil
case expectChar:
if isIdentChar(ch) {
b.WriteByte(ch)
state = obtainChar
break
}
s.r.updatePos(pos)
return nil
case obtainChar:
if isIdentChar(ch) {
b.WriteByte(ch)
state = obtainChar
break
} else if ch == ',' {
featureIDs = append(featureIDs, b.String())
b.Reset()
state = expectChar
break
} else if ch == ']' {
featureIDs = append(featureIDs, b.String())
return featureIDs
}
s.r.updatePos(pos)
return nil
}
}
s.r.updatePos(pos)
return nil
}
func (s *Scanner) lastErrorAsWarn() {
if len(s.errs) == 0 {
return
}
s.warns = append(s.warns, s.errs[len(s.errs)-1])
s.errs = s.errs[:len(s.errs)-1]
}
type reader struct {
s string
p Pos
l int
}
var eof = Pos{-1, -1, -1}
func (r *reader) eof() bool {
return r.p.Offset >= r.l
}
// peek() peeks a rune from underlying reader.
// if reader meets EOF, it will return 0. to distinguish from
// the real 0, the caller should call r.eof() again to check.
func (r *reader) peek() byte {
if r.eof() {
return 0
}
return r.s[r.p.Offset]
}
// inc increase the position offset of the reader.
// peek must be called before calling inc!
func (r *reader) inc() {
if r.s[r.p.Offset] == '\n' {
r.p.Line++
r.p.Col = 0
}
r.p.Offset++
r.p.Col++
}
func (r *reader) incN(n int) {
for range n {
r.inc()
}
}
func (r *reader) readByte() (ch byte) {
ch = r.peek()
if r.eof() {
return
}
r.inc()
return
}
func (r *reader) pos() Pos {
return r.p
}
func (r *reader) updatePos(pos Pos) {
r.p = pos
}
func (r *reader) data(from *Pos) string {
return r.s[from.Offset:r.p.Offset]
}
func (r *reader) incAsLongAs(fn func(b byte) bool) byte {
for {
ch := r.peek()
if !fn(ch) {
return ch
}
if r.eof() {
return 0
}
r.inc()
}
}
// skipRune skip mb character, return true indicate something has been skipped.
func (r *reader) skipRune(enc charset.Encoding) bool {
if r.s[r.p.Offset] <= unicode.MaxASCII {
return false
}
c := enc.MbLen(r.s[r.p.Offset:])
r.incN(c)
return c > 0
}
// Copyright 2016 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package parser
func isLetter(ch byte) bool {
return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')
}
func isDigit(ch byte) bool {
return ch >= '0' && ch <= '9'
}
func isIdentChar(ch byte) bool {
return isLetter(ch) || isDigit(ch) || ch == '_' || ch == '$' || isIdentExtend(ch)
}
func isIdentExtend(ch byte) bool {
return ch >= 0x80
}
// See https://dev.mysql.com/doc/refman/5.7/en/identifiers.html
func isInCorrectIdentifierName(name string) bool {
if len(name) == 0 {
return true
}
if name[len(name)-1] == ' ' {
return true
}
return false
}
// Initialize a lookup table for isUserVarChar
var isUserVarCharTable [256]bool
func init() {
for i := range 256 {
ch := byte(i)
isUserVarCharTable[i] = isLetter(ch) || isDigit(ch) || ch == '_' || ch == '$' || ch == '.' || isIdentExtend(ch)
}
}
func isUserVarChar(ch byte) bool {
return isUserVarCharTable[ch]
}
type trieNode struct {
childs [256]*trieNode
token int
fn func(s *Scanner) (int, Pos, string)
}
var ruleTable trieNode
func initTokenByte(c byte, tok int) {
if ruleTable.childs[c] == nil {
ruleTable.childs[c] = &trieNode{}
}
ruleTable.childs[c].token = tok
}
func initTokenString(str string, tok int) {
node := &ruleTable
for _, c := range str {
if node.childs[c] == nil {
node.childs[c] = &trieNode{}
}
node = node.childs[c]
}
node.token = tok
}
func initTokenFunc(str string, fn func(s *Scanner) (int, Pos, string)) {
for i := range len(str) {
c := str[i]
if ruleTable.childs[c] == nil {
ruleTable.childs[c] = &trieNode{}
}
ruleTable.childs[c].fn = fn
}
}
func init() {
// invalid is a special token defined in parser.y, when parser meet
// this token, it will throw an error.
// set root trie node's token to invalid, so when input match nothing
// in the trie, invalid will be the default return token.
ruleTable.token = invalid
initTokenByte('/', int('/'))
initTokenByte('+', int('+'))
initTokenByte('>', int('>'))
initTokenByte('<', int('<'))
initTokenByte('(', int('('))
initTokenByte(')', int(')'))
initTokenByte('[', int('['))
initTokenByte(']', int(']'))
initTokenByte(';', int(';'))
initTokenByte(',', int(','))
initTokenByte('&', int('&'))
initTokenByte('%', int('%'))
initTokenByte(':', int(':'))
initTokenByte('|', int('|'))
initTokenByte('!', int('!'))
initTokenByte('^', int('^'))
initTokenByte('~', int('~'))
initTokenByte('\\', int('\\'))
initTokenByte('?', paramMarker)
initTokenByte('=', eq)
initTokenByte('{', int('{'))
initTokenByte('}', int('}'))
initTokenString("||", pipes)
initTokenString("&&", andand)
initTokenString("&^", andnot)
initTokenString(":=", assignmentEq)
initTokenString("<=>", nulleq)
initTokenString(">=", ge)
initTokenString("<=", le)
initTokenString("!=", neq)
initTokenString("<>", neqSynonym)
initTokenString("<<", lsh)
initTokenString(">>", rsh)
initTokenString("\\N", null)
initTokenFunc("@", startWithAt)
initTokenFunc("/", startWithSlash)
initTokenFunc("*", startWithStar)
initTokenFunc("-", startWithDash)
initTokenFunc("#", startWithSharp)
initTokenFunc("Xx", startWithXx)
initTokenFunc("Nn", startWithNn)
initTokenFunc("Bb", startWithBb)
initTokenFunc(".", startWithDot)
initTokenFunc("_$ACDEFGHIJKLMOPQRSTUVWYZacdefghijklmopqrstuvwyz", scanIdentifier)
initTokenFunc("`", scanQuotedIdent)
initTokenFunc("0123456789", startWithNumber)
initTokenFunc("'\"", startString)
}
// isInTokenMap indicates whether the target string is contained in tokenMap.
func isInTokenMap(target string) bool {
_, ok := tokenMap[target]
return ok
}
// tokenMap is a map of known identifiers to the parser token ID.
// Please try to keep the map in alphabetical order.
var tokenMap = map[string]int{
"ACCOUNT": account,
"ACTION": action,
"ADD": add,
"ADDDATE": addDate,
"ADD_COLUMNAR_REPLICA_ON_DEMAND": addColumnarReplicaOnDemand,
"ADMIN": admin,
"ADVISE": advise,
"AFFINITY": affinity,
"AFTER": after,
"AGAINST": against,
"AGO": ago,
"ALGORITHM": algorithm,
"ALL": all,
"ALTER": alter,
"ALWAYS": always,
"ANALYZE": analyze,
"AND": and,
"ANY": any,
"APPROX_COUNT_DISTINCT": approxCountDistinct,
"APPROX_PERCENTILE": approxPercentile,
"ARRAY": array,
"AS": as,
"ASC": asc,
"ASCII": ascii,
"APPLY": apply,
"ATTRIBUTE": attribute,
"ATTRIBUTES": attributes,
"BATCH": batch,
"BACKGROUND": background,
"STATS_OPTIONS": statsOptions,
"STATS_SAMPLE_RATE": statsSampleRate,
"STATS_COL_CHOICE": statsColChoice,
"STATS_COL_LIST": statsColList,
"AUTO_ID_CACHE": autoIdCache,
"AUTO_INCREMENT": autoIncrement,
"AUTO_RANDOM": autoRandom,
"AUTO_RANDOM_BASE": autoRandomBase,
"AUTOEXTEND_SIZE": autoextendSize,
"AVG_ROW_LENGTH": avgRowLength,
"AVG": avg,
"BACKEND": backend,
"BACKUP": backup,
"BACKUPS": backups,
"BDR": bdr,
"BEGIN": begin,
"BETWEEN": between,
"BERNOULLI": bernoulli,
"BIGINT": bigIntType,
"BINARY": binaryType,
"BINDING": binding,
"BINDING_CACHE": bindingCache,
"BINDINGS": bindings,
"BINLOG": binlog,
"BIT_AND": bitAnd,
"BIT_OR": bitOr,
"BIT_XOR": bitXor,
"BIT": bitType,
"BLOB": blobType,
"BLOCK": block,
"BOOL": boolType,
"BOOLEAN": booleanType,
"BOTH": both,
"BOUND": bound,
"BR": br,
"BRIEF": briefType,
"BTREE": btree,
"BUCKETS": buckets,
"BUILTINS": builtins,
"BURSTABLE": burstable,
"BY": by,
"BYTE": byteType,
"CACHE": cache,
"CALIBRATE": calibrate,
"CALL": call,
"CANCEL": cancel,
"CAPTURE": capture,
"CARDINALITY": cardinality,
"CASCADE": cascade,
"CASCADED": cascaded,
"CASE": caseKwd,
"CAST": cast,
"CAUSAL": causal,
"CHAIN": chain,
"CHANGE": change,
"CHAR": charType,
"CHARACTER": character,
"CHARSET": charsetKwd,
"CHECK": check,
"CHECKPOINT": checkpoint,
"CHECKSUM": checksum,
"CIPHER": cipher,
"CLEANUP": cleanup,
"CLIENT": client,
"CLIENT_ERRORS_SUMMARY": clientErrorsSummary,
"CLOSE": close,
"CLUSTER": cluster,
"CLUSTERED": clustered,
"CMSKETCH": cmSketch,
"COALESCE": coalesce,
"COLLATE": collate,
"COLLATION": collation,
"COLUMN_FORMAT": columnFormat,
"COLUMN_STATS_USAGE": columnStatsUsage,
"COLUMN": column,
"COLUMNAR": columnar,
"COLUMNS": columns,
"COMMENT": comment,
"COMMIT": commit,
"COMMITTED": committed,
"COMPACT": compact,
"COMPRESS": compress,
"COMPRESSED": compressed,
"COMPRESSION": compression,
"CONCURRENCY": concurrency,
"CONFIG": config,
"CONNECTION": connection,
"CONSISTENCY": consistency,
"CONSISTENT": consistent,
"CONSTRAINT": constraint,
"CONSTRAINTS": constraints,
"CONTEXT": context,
"CONTINUE": continueKwd,
"CONVERT": convert,
"COOLDOWN": cooldown,
"COPY": copyKwd,
"CORRELATION": correlation,
"CPU": cpu,
"CREATE": create,
"CROSS": cross,
"CSV_BACKSLASH_ESCAPE": csvBackslashEscape,
"CSV_DELIMITER": csvDelimiter,
"CSV_HEADER": csvHeader,
"CSV_NOT_NULL": csvNotNull,
"CSV_NULL": csvNull,
"CSV_SEPARATOR": csvSeparator,
"CSV_TRIM_LAST_SEPARATORS": csvTrimLastSeparators,
"WAIT_TIFLASH_READY": waitTiflashReady,
"WITH_SYS_TABLE": withSysTable,
"IGNORE_STATS": ignoreStats,
"LOAD_STATS": loadStats,
"CHECKSUM_CONCURRENCY": checksumConcurrency,
"COMPRESSION_LEVEL": compressionLevel,
"COMPRESSION_TYPE": compressionType,
"ENCRYPTION_METHOD": encryptionMethod,
"ENCRYPTION_KEYFILE": encryptionKeyFile,
"CURDATE": curDate,
"CURRENT_DATE": currentDate,
"CURRENT_ROLE": currentRole,
"CURRENT_TIME": currentTime,
"CURRENT_TIMESTAMP": currentTs,
"CURRENT_USER": currentUser,
"CURRENT": current,
"CURSOR": cursor,
"CURTIME": curTime,
"CYCLE": cycle,
"DATA": data,
"DATABASE": database,
"DATABASES": databases,
"DATE_ADD": dateAdd,
"DATE_SUB": dateSub,
"DATE": dateType,
"DATETIME": datetimeType,
"DAY_HOUR": dayHour,
"DAY_MICROSECOND": dayMicrosecond,
"DAY_MINUTE": dayMinute,
"DAY_SECOND": daySecond,
"DAY": day,
"DDL": ddl,
"DEALLOCATE": deallocate,
"DEC": decimalType,
"DECIMAL": decimalType,
"DECLARE": declare,
"DEFAULT": defaultKwd,
"DEFINED": defined,
"DEFINER": definer,
"DELAY_KEY_WRITE": delayKeyWrite,
"DELAYED": delayed,
"DELETE": deleteKwd,
"DEPENDENCY": dependency,
"DEPTH": depth,
"DESC": desc,
"DESCRIBE": describe,
"DIGEST": digest,
"DIRECTORY": directory,
"DISABLE": disable,
"DISABLED": disabled,
"DISCARD": discard,
"DISK": disk,
"DISTINCT": distinct,
"DISTINCTROW": distinct,
"DISTRIBUTE": distribute,
"DISTRIBUTION": distribution,
"DISTRIBUTIONS": distributions,
"DIV": div,
"DO": do,
"DOT": dotType,
"DOUBLE": doubleType,
"DROP": drop,
"DRY": dry,
"DRYRUN": dryRun,
"DUAL": dual,
"DUMP": dump,
"DUPLICATE": duplicate,
"DURATION": timeDuration,
"DYNAMIC": dynamic,
"ELSE": elseKwd,
"ELSEIF": elseIfKwd,
"ENABLE": enable,
"ENABLED": enabled,
"ENCLOSED": enclosed,
"ENCRYPTION": encryption,
"END": end,
"END_TIME": endTime,
"ENFORCED": enforced,
"ENGINE": engine,
"ENGINES": engines,
"ENGINE_ATTRIBUTE": engine_attribute,
"SECONDARY_ENGINE_ATTRIBUTE": secondaryEngineAttribute,
"ENUM": enum,
"ERROR": errorKwd,
"ERRORS": identSQLErrors,
"ESCAPE": escape,
"ESCAPED": escaped,
"EVENT": event,
"EVENTS": events,
"EVOLVE": evolve,
"EXACT": exact,
"EXEC_ELAPSED": execElapsed,
"EXCEPT": except,
"EXCHANGE": exchange,
"EXCLUSIVE": exclusive,
"EXECUTE": execute,
"EXISTS": exists,
"EXIT": exit,
"EXPANSION": expansion,
"EXPIRE": expire,
"EXPLAIN": explain,
"EXPR_PUSHDOWN_BLACKLIST": exprPushdownBlacklist,
"EXTENDED": extended,
"EXPLORE": explore,
"EXTRACT": extract,
"FALSE": falseKwd,
"FAULTS": faultsSym,
"FETCH": fetch,
"FIELDS": fields,
"FILE": file,
"FIRST": first,
"FIXED": fixed,
"FLASHBACK": flashback,
"FLOAT": floatType,
"FLOAT4": float4Type,
"FLOAT8": float8Type,
"FLUSH": flush,
"FOLLOWER": follower,
"FOLLOWERS": followers,
"FOLLOWER_CONSTRAINTS": followerConstraints,
"FOLLOWING": following,
"FOR": forKwd,
"FORCE": force,
"FOREIGN": foreign,
"FORMAT": format,
"FOUND": found,
"FROM": from,
"FULL": full,
"FULL_BACKUP_STORAGE": fullBackupStorage,
"FULLTEXT": fulltext,
"FUNCTION": function,
"GC_TTL": gcTTL,
"GENERAL": general,
"GENERATED": generated,
"GET_FORMAT": getFormat,
"GLOBAL": global,
"GRANT": grant,
"GRANTS": grants,
"GROUP_CONCAT": groupConcat,
"GROUP": group,
"HASH": hash,
"HANDLER": handler,
"HAVING": having,
"HELP": help,
"HIGH_PRIORITY": highPriority,
"HISTORY": history,
"HISTOGRAM": histogram,
"HNSW": hnsw,
"HOSTS": hosts,
"HOUR_MICROSECOND": hourMicrosecond,
"HOUR_MINUTE": hourMinute,
"HOUR_SECOND": hourSecond,
"HOUR": hour,
"IDENTIFIED": identified,
"IETF_QUOTES": ietfQuotes,
"IF": ifKwd,
"IGNORE": ignore,
"ILIKE": ilike,
"IMPORT": importKwd,
"IMPORTS": imports,
"IN": in,
"INCREMENT": increment,
"INCREMENTAL": incremental,
"INDEX": index,
"INDEXES": indexes,
"INFILE": infile,
"INNER": inner,
"INOUT": inout,
"INPLACE": inplace,
"INSERT_METHOD": insertMethod,
"INSERT": insert,
"INSTANCE": instance,
"INSTANT": instant,
"INT": intType,
"INT1": int1Type,
"INT2": int2Type,
"INT3": int3Type,
"INT4": int4Type,
"INT8": int8Type,
"INTEGER": integerType,
"INTERNAL": internal,
"INTERSECT": intersect,
"INTERVAL": interval,
"INTO": into,
"INVERTED": inverted,
"INVISIBLE": invisible,
"INVOKER": invoker,
"ITERATE": iterate,
"IO": io,
"RU_PER_SEC": ruRate,
"PRIORITY": priority,
"HIGH": high,
"MEDIUM": medium,
"LOW": low,
"IO_READ_BANDWIDTH": ioReadBandwidth,
"IO_WRITE_BANDWIDTH": ioWriteBandwidth,
"IPC": ipc,
"IS": is,
"ISOLATION": isolation,
"ISSUER": issuer,
"JOB": job,
"JOBS": jobs,
"JOIN": join,
"JSON_ARRAYAGG": jsonArrayagg,
"JSON_OBJECTAGG": jsonObjectAgg,
"JSON_SUM_CRC32": jsonSumCrc32,
"JSON": jsonType,
"KEY_BLOCK_SIZE": keyBlockSize,
"KEY": key,
"KEYS": keys,
"KILL": kill,
"LABELS": labels,
"LANGUAGE": language,
"LAST_BACKUP": lastBackup,
"LAST": last,
"LASTVAL": lastval,
"LATERAL": lateral,
"LEADER": leader,
"LEADER_CONSTRAINTS": leaderConstraints,
"LEADING": leading,
"LEARNER": learner,
"LEARNER_CONSTRAINTS": learnerConstraints,
"LEARNERS": learners,
"LEAVE": leave,
"LEFT": left,
"LESS": less,
"LEVEL": level,
"LIKE": like,
"LIMIT": limit,
"LITE": lite,
"LINEAR": linear,
"LINES": lines,
"LIST": list,
"LOAD": load,
"LOCAL": local,
"LOCALTIME": localTime,
"LOCALTIMESTAMP": localTs,
"LOCATION": location,
"LOCK": lock,
"LOCKED": locked,
"LOG": log,
"LOGS": logs,
"LONG": long,
"LONGBLOB": longblobType,
"LONGTEXT": longtextType,
"LOW_PRIORITY": lowPriority,
"MASTER": master,
"MASKING": masking,
"MATCH": match,
"MAX_CONNECTIONS_PER_HOUR": maxConnectionsPerHour,
"MAX_IDXNUM": max_idxnum,
"MAX_MINUTES": max_minutes,
"MAX_QUERIES_PER_HOUR": maxQueriesPerHour,
"MAX_ROWS": maxRows,
"MAX_UPDATES_PER_HOUR": maxUpdatesPerHour,
"MAX_USER_CONNECTIONS": maxUserConnections,
"MAX": max,
"MAXVALUE": maxValue,
"MB": mb,
"MEDIUMBLOB": mediumblobType,
"MEDIUMINT": mediumIntType,
"MEDIUMTEXT": mediumtextType,
"MEMORY": memory,
"MEMBER": member,
"MERGE": merge,
"METADATA": metadata,
"MICROSECOND": microsecond,
"MIDDLEINT": middleIntType,
"MIN_ROWS": minRows,
"MIN": min,
"MINUTE_MICROSECOND": minuteMicrosecond,
"MINUTE_SECOND": minuteSecond,
"MINUTE": minute,
"MINVALUE": minValue,
"MOD": mod,
"MODE": mode,
"MODIFY": modify,
"MONITOR": monitor,
"MONTH": month,
"NAMES": names,
"NATIONAL": national,
"NATURAL": natural,
"NCHAR": ncharType,
"NEVER": never,
"NEXT_ROW_ID": next_row_id,
"NEXT": next,
"NEXTVAL": nextval,
"NO_WRITE_TO_BINLOG": noWriteToBinLog,
"NO": no,
"NOCACHE": nocache,
"NOCYCLE": nocycle,
"NODE_ID": nodeID,
"NODE_STATE": nodeState,
"NODEGROUP": nodegroup,
"NOMAXVALUE": nomaxvalue,
"NOMINVALUE": nominvalue,
"NONCLUSTERED": nonclustered,
"NONE": none,
"NOT": not,
"NOW": now,
"NOWAIT": nowait,
"NULL": null,
"NULLS": nulls,
"NUMERIC": numericType,
"NVARCHAR": nvarcharType,
"OF": of,
"OFF": off,
"OFFSET": offset,
"OLTP_READ_ONLY": oltpReadOnly,
"OLTP_READ_WRITE": oltpReadWrite,
"OLTP_WRITE_ONLY": oltpWriteOnly,
"TPCH_10": tpch10,
"ON_DUPLICATE": onDuplicate,
"ON": on,
"ONLINE": online,
"ONLY": only,
"OPEN": open,
"OPT_RULE_BLACKLIST": optRuleBlacklist,
"OPTIMISTIC": optimistic,
"OPTIMIZE": optimize,
"OPTION": option,
"OPTIONAL": optional,
"OPTIONALLY": optionally,
"OR": or,
"ORDER": order,
"OUT": out,
"OUTER": outer,
"OUTFILE": outfile,
"PACK_KEYS": packKeys,
"PAGE": pageSym,
"PAGE_CHECKSUM": pageChecksum,
"PAGE_COMPRESSED": pageCompressed,
"PAGE_COMPRESSION_LEVEL": pageCompressionLevel,
"PARSER": parser,
"PARTIAL": partial,
"PARTITION": partition,
"PARTITIONING": partitioning,
"PARTITIONS": partitions,
"PASSWORD": password,
"PAUSE": pause,
"PERCENT": percent,
"PER_DB": per_db,
"PER_TABLE": per_table,
"PESSIMISTIC": pessimistic,
"PLACEMENT": placement,
"PLAN": plan,
"PLAN_CACHE": planCache,
"PLUGINS": plugins,
"POINT": point,
"POLICIES": policies,
"POLICY": policy,
"POSITION": position,
"PRE_SPLIT_REGIONS": preSplitRegions,
"PRECEDING": preceding,
"PREDICATE": predicate,
"PRECISION": precisionType,
"PREPARE": prepare,
"PRESERVE": preserve,
"PRIMARY": primary,
"PRIMARY_REGION": primaryRegion,
"PRIVILEGES": privileges,
"PROCEDURE": procedure,
"PROCESS": process,
"PROCESSED_KEYS": processedKeys,
"PROCESSLIST": processlist,
"PROFILE": profile,
"PROFILES": profiles,
"PROXY": proxy,
"PURGE": purge,
"QUARTER": quarter,
"QUERIES": queries,
"QUERY": query,
"QUERY_LIMIT": queryLimit,
"QUICK": quick,
"RANGE": rangeKwd,
"RATE_LIMIT": rateLimit,
"RAW": raw,
"READ": read,
"READ_ONLY": readOnly,
"REAL": realType,
"REBUILD": rebuild,
"RECENT": recent,
"RECOMMEND": recommend,
"RECOVER": recover,
"RECURSIVE": recursive,
"REDUNDANT": redundant,
"REFERENCES": references,
"REFRESH": refresh,
"REGEXP": regexpKwd,
"REGION": region,
"REGIONS": regions,
"RELEASE": release,
"RELOAD": reload,
"REMOVE": remove,
"RENAME": rename,
"REORGANIZE": reorganize,
"REPAIR": repair,
"REPEAT": repeat,
"REPEATABLE": repeatable,
"REPLACE": replace,
"REPLAY": replay,
"REPLAYER": replayer,
"REPLICA": replica,
"REPLICAS": replicas,
"REPLICATION": replication,
"RU": ru,
"RULE": rule,
"REQUIRE": require,
"REQUIRED": required,
"RESET": reset,
"RESOURCE": resource,
"RESPECT": respect,
"RESTART": restart,
"RESTORE": restore,
"RESTORES": restores,
"RESTORED_TS": restoredTS,
"RESTRICT": restrict,
"RETURNING": returning,
"REVERSE": reverse,
"REVOKE": revoke,
"RIGHT": right,
"RLIKE": rlike,
"ROLE": role,
"ROLLBACK": rollback,
"ROLLUP": rollup,
"ROUTINE": routine,
"ROW_COUNT": rowCount,
"ROW_FORMAT": rowFormat,
"ROW": row,
"ROWS": rows,
"RTREE": rtree,
"HYPO": hypo,
"RESUME": resume,
"RUN": run,
"RUNNING": running,
"S3": s3,
"NDVRATE": ndvRate,
"SAMPLES": samples,
"SAMPLERATE": sampleRate,
"SAN": san,
"SAVEPOINT": savepoint,
"SCHEDULE": schedule,
"SCHEMA": database,
"SCHEMAS": databases,
"SECOND_MICROSECOND": secondMicrosecond,
"SECOND": second,
"SECONDARY": secondary,
"SECONDARY_ENGINE": secondaryEngine,
"SECONDARY_LOAD": secondaryLoad,
"SECONDARY_UNLOAD": secondaryUnload,
"SECURITY": security,
"SELECT": selectKwd,
"SEND_CREDENTIALS_TO_TIKV": sendCredentialsToTiKV,
"SEPARATOR": separator,
"SEQUENCE": sequence,
"SERIAL": serial,
"SERIALIZABLE": serializable,
"SESSION": session,
"SESSION_STATES": sessionStates,
"SET": set,
"SETVAL": setval,
"SHARD_ROW_ID_BITS": shardRowIDBits,
"SHARE": share,
"SHARED": shared,
"SHOW": show,
"SHUTDOWN": shutdown,
"SIGNED": signed,
"SIMILAR": similar,
"SIMPLE": simple,
"SKIP": skip,
"SKIP_SCHEMA_FILES": skipSchemaFiles,
"SLAVE": slave,
"SLOW": slow,
"SMALLINT": smallIntType,
"SNAPSHOT": snapshot,
"SOME": some,
"SOURCE": source,
"SPATIAL": spatial,
"SPEED": speed,
"SPLIT": split,
"SQL_BIG_RESULT": sqlBigResult,
"SQL_BUFFER_RESULT": sqlBufferResult,
"SQL_CACHE": sqlCache,
"SQL_CALC_FOUND_ROWS": sqlCalcFoundRows,
"SQL_NO_CACHE": sqlNoCache,
"SQL_SMALL_RESULT": sqlSmallResult,
"SQL_TSI_DAY": sqlTsiDay,
"SQL_TSI_HOUR": sqlTsiHour,
"SQL_TSI_MINUTE": sqlTsiMinute,
"SQL_TSI_MONTH": sqlTsiMonth,
"SQL_TSI_QUARTER": sqlTsiQuarter,
"SQL_TSI_SECOND": sqlTsiSecond,
"SQL_TSI_WEEK": sqlTsiWeek,
"SQL_TSI_YEAR": sqlTsiYear,
"SQL": sql,
"SQLEXCEPTION": sqlexception,
"SQLSTATE": sqlstate,
"SQLWARNING": sqlwarning,
"SSL": ssl,
"STALENESS": staleness,
"START": start,
"START_TIME": startTime,
"START_TS": startTS,
"STARTING": starting,
"STATISTICS": statistics,
"STATS_AUTO_RECALC": statsAutoRecalc,
"STATS_BUCKETS": statsBuckets,
"STATS_DELTA": statsDelta,
"STATS_EXTENDED": statsExtended,
"STATS_HEALTHY": statsHealthy,
"STATS_HISTOGRAMS": statsHistograms,
"STATS_TOPN": statsTopN,
"STATS_META": statsMeta,
"STATS_LOCKED": statsLocked,
"HISTOGRAMS_IN_FLIGHT": histogramsInFlight,
"STATS_PERSISTENT": statsPersistent,
"STATS_SAMPLE_PAGES": statsSamplePages,
"STATS": stats,
"STATUS": status,
"STD": stddevPop,
"STDDEV_POP": stddevPop,
"STDDEV_SAMP": stddevSamp,
"STDDEV": stddevPop,
"STOP": stop,
"STORAGE": storage,
"STORED": stored,
"STRAIGHT_JOIN": straightJoin,
"STRICT": strict,
"STRICT_FORMAT": strictFormat,
"STRONG": strong,
"SUBDATE": subDate,
"SUBJECT": subject,
"SUBPARTITION": subpartition,
"SUBPARTITIONS": subpartitions,
"SUBSTR": substring,
"SUBSTRING": substring,
"SUM": sum,
"SUPER": super,
"SURVIVAL_PREFERENCES": survivalPreferences,
"SWAPS": swaps,
"SWITCHES": switchesSym,
"SWITCH_GROUP": switchGroup,
"SYSTEM": system,
"SYSTEM_TIME": systemTime,
"TARGET": target,
"TASK_TYPES": taskTypes,
"TABLE_CHECKSUM": tableChecksum,
"TABLE": tableKwd,
"TABLES": tables,
"TABLESAMPLE": tableSample,
"TABLESPACE": tablespace,
"TEMPORARY": temporary,
"TEMPTABLE": temptable,
"TERMINATED": terminated,
"TEXT": textType,
"THAN": than,
"THEN": then,
"TIDB": tidb,
"TIDB_CURRENT_TSO": tidbCurrentTSO,
"TIDB_JSON": tidbJson,
"TIFLASH": tiFlash,
"TIKV_IMPORTER": tikvImporter,
"TIME": timeType,
"TIMESTAMP": timestampType,
"TIMESTAMPADD": timestampAdd,
"TIMESTAMPDIFF": timestampDiff,
"TIMEOUT": timeout,
"TINYBLOB": tinyblobType,
"TINYINT": tinyIntType,
"TINYTEXT": tinytextType,
"TLS": tls,
"TO": to,
"TOKEN_ISSUER": tokenIssuer,
"TOKUDB_DEFAULT": tokudbDefault,
"TOKUDB_FAST": tokudbFast,
"TOKUDB_LZMA": tokudbLzma,
"TOKUDB_QUICKLZ": tokudbQuickLZ,
"TOKUDB_SMALL": tokudbSmall,
"TOKUDB_SNAPPY": tokudbSnappy,
"TOKUDB_UNCOMPRESSED": tokudbUncompressed,
"TOKUDB_ZLIB": tokudbZlib,
"TOKUDB_ZSTD": tokudbZstd,
"TOP": top,
"TOPN": topn,
"TPCC": tpcc,
"TRACE": trace,
"TRADITIONAL": traditional,
"TRAFFIC": traffic,
"TRAILING": trailing,
"TRANSACTION": transaction,
"TRANSACTIONAL": transactional,
"TRIGGER": trigger,
"TRIGGERS": triggers,
"TRIM": trim,
"TRUE": trueKwd,
"TRUNCATE": truncate,
"TRUE_CARD_COST": trueCardCost,
"TSO": tsoType,
"TTL": ttl,
"TTL_ENABLE": ttlEnable,
"TTL_JOB_INTERVAL": ttlJobInterval,
"TYPE": tp,
"UNBOUNDED": unbounded,
"UNCOMMITTED": uncommitted,
"UNDEFINED": undefined,
"UNICODE": unicodeSym,
"UNION": union,
"UNIQUE": unique,
"UNKNOWN": unknown,
"UNLOCK": unlock,
"UNLIMITED": unlimited,
"MODERATED": moderated,
"UNSET": unset,
"UNSIGNED": unsigned,
"UNTIL": until,
"UNTIL_TS": untilTS,
"UPDATE": update,
"USAGE": usage,
"USE": use,
"USER": user,
"USING": using,
"UTC_DATE": utcDate,
"UTC_TIME": utcTime,
"UTC_TIMESTAMP": utcTimestamp,
"UTILIZATION_LIMIT": utilizationLimit,
"VALIDATION": validation,
"VALUE": value,
"VALUES": values,
"VAR_POP": varPop,
"VAR_SAMP": varSamp,
"VARBINARY": varbinaryType,
"VARCHAR": varcharType,
"VARCHARACTER": varcharacter,
"VARIABLES": variables,
"VARIANCE": varPop,
"VARYING": varying,
"VECTOR": vectorType,
"VERBOSE": verboseType,
"VOTER": voter,
"VOTER_CONSTRAINTS": voterConstraints,
"VOTERS": voters,
"VIEW": view,
"VIRTUAL": virtual,
"VISIBLE": visible,
"WARNINGS": warnings,
"WATCH": watch,
"WEEK": week,
"WEIGHT_STRING": weightString,
"WHEN": when,
"WHERE": where,
"WHILE": while,
"WIDTH": width,
"WITH": with,
"WITHOUT": without,
"WRITE": write,
"WORKLOAD": workload,
"X509": x509,
"XOR": xor,
"YEAR_MONTH": yearMonth,
"YEAR": yearType,
"ZEROFILL": zerofill,
"WAIT": wait,
"FAILED_LOGIN_ATTEMPTS": failedLoginAttempts,
"PASSWORD_LOCK_TIME": passwordLockTime,
"REUSE": reuse,
}
// See https://dev.mysql.com/doc/refman/8.0/en/function-resolution.html for details.
// ADDDATE, SESSION_USER, SUBDATE, and SYSTEM_USER are exceptions because they are actually recognized as
// identifiers even in `create table adddate (a int)`.
var btFuncTokenMap = map[string]int{
"BIT_AND": builtinBitAnd,
"BIT_OR": builtinBitOr,
"BIT_XOR": builtinBitXor,
"CAST": builtinCast,
"COUNT": builtinCount,
"APPROX_COUNT_DISTINCT": builtinApproxCountDistinct,
"APPROX_PERCENTILE": builtinApproxPercentile,
"CURDATE": builtinCurDate,
"CURTIME": builtinCurTime,
"DATE_ADD": builtinDateAdd,
"DATE_SUB": builtinDateSub,
"EXTRACT": builtinExtract,
"GROUP_CONCAT": builtinGroupConcat,
"MAX": builtinMax,
"MID": builtinSubstring,
"MIN": builtinMin,
"NOW": builtinNow,
"POSITION": builtinPosition,
"STD": builtinStddevPop,
"STDDEV": builtinStddevPop,
"STDDEV_POP": builtinStddevPop,
"STDDEV_SAMP": builtinStddevSamp,
"SUBSTR": builtinSubstring,
"SUBSTRING": builtinSubstring,
"SUM": builtinSum,
"SYSDATE": builtinSysDate,
"TRANSLATE": builtinTranslate,
"TRIM": builtinTrim,
"VARIANCE": builtinVarPop,
"VAR_POP": builtinVarPop,
"VAR_SAMP": builtinVarSamp,
}
var windowFuncTokenMap = map[string]int{
"CUME_DIST": cumeDist,
"DENSE_RANK": denseRank,
"FIRST_VALUE": firstValue,
"GROUPS": groups,
"LAG": lag,
"LAST_VALUE": lastValue,
"LEAD": lead,
"NTH_VALUE": nthValue,
"NTILE": ntile,
"OVER": over,
"PERCENT_RANK": percentRank,
"RANK": rank,
"ROW_NUMBER": rowNumber,
"WINDOW": window,
}
// aliases are strings directly map to another string and use the same token.
var aliases = map[string]string{
"SCHEMA": "DATABASE",
"SCHEMAS": "DATABASES",
"DEC": "DECIMAL",
"SUBSTR": "SUBSTRING",
}
// hintedTokens is a set of tokens which recognizes a hint.
// According to https://dev.mysql.com/doc/refman/8.0/en/optimizer-hints.html,
// only SELECT, INSERT, REPLACE, UPDATE and DELETE accept optimizer hints.
// additionally we support CREATE and PARTITION for hints at table creation.
var hintedTokens = map[int]struct{}{
selectKwd: {},
insert: {},
replace: {},
update: {},
deleteKwd: {},
create: {},
partition: {},
}
var hintTokenMap = map[string]int{
// MySQL 8.0 hint names
"JOIN_FIXED_ORDER": hintJoinFixedOrder,
"JOIN_ORDER": hintJoinOrder,
"JOIN_PREFIX": hintJoinPrefix,
"JOIN_SUFFIX": hintJoinSuffix,
"BKA": hintBKA,
"NO_BKA": hintNoBKA,
"BNL": hintBNL,
"NO_BNL": hintNoBNL,
"HASH_JOIN": hintHashJoin,
"HASH_JOIN_BUILD": hintHashJoinBuild,
"HASH_JOIN_PROBE": hintHashJoinProbe,
"NO_HASH_JOIN": hintNoHashJoin,
"MERGE": hintMerge,
"NO_MERGE": hintNoMerge,
"INDEX_MERGE": hintIndexMerge,
"NO_INDEX_MERGE": hintNoIndexMerge,
"MRR": hintMRR,
"NO_MRR": hintNoMRR,
"NO_ICP": hintNoICP,
"NO_RANGE_OPTIMIZATION": hintNoRangeOptimization,
"SKIP_SCAN": hintSkipScan,
"NO_SKIP_SCAN": hintNoSkipScan,
"SEMIJOIN": hintSemijoin,
"NO_SEMIJOIN": hintNoSemijoin,
"MAX_EXECUTION_TIME": hintMaxExecutionTime,
"SET_VAR": hintSetVar,
"RESOURCE_GROUP": hintResourceGroup,
"QB_NAME": hintQBName,
"HYPO_INDEX": hintHypoIndex,
// TiDB hint names
"AGG_TO_COP": hintAggToCop,
"LIMIT_TO_COP": hintLimitToCop,
"IGNORE_PLAN_CACHE": hintIgnorePlanCache,
"WRITE_SLOW_LOG": hintWriteSlowLog,
"HASH_AGG": hintHashAgg,
"MPP_1PHASE_AGG": hintMpp1PhaseAgg,
"MPP_2PHASE_AGG": hintMpp2PhaseAgg,
"IGNORE_INDEX": hintIgnoreIndex,
"INL_HASH_JOIN": hintInlHashJoin,
"INDEX_HASH_JOIN": hintIndexHashJoin,
"NO_INDEX_HASH_JOIN": hintNoIndexHashJoin,
"INL_JOIN": hintInlJoin,
"INDEX_JOIN": hintIndexJoin,
"NO_INDEX_JOIN": hintNoIndexJoin,
"INL_MERGE_JOIN": hintInlMergeJoin,
"INDEX_MERGE_JOIN": hintIndexMergeJoin,
"NO_INDEX_MERGE_JOIN": hintNoIndexMergeJoin,
"MEMORY_QUOTA": hintMemoryQuota,
"NO_SWAP_JOIN_INPUTS": hintNoSwapJoinInputs,
"QUERY_TYPE": hintQueryType,
"READ_CONSISTENT_REPLICA": hintReadConsistentReplica,
"READ_FROM_STORAGE": hintReadFromStorage,
"BROADCAST_JOIN": hintBCJoin,
"SHUFFLE_JOIN": hintShuffleJoin,
"MERGE_JOIN": hintSMJoin,
"NO_MERGE_JOIN": hintNoSMJoin,
"STREAM_AGG": hintStreamAgg,
"SWAP_JOIN_INPUTS": hintSwapJoinInputs,
"USE_INDEX_MERGE": hintUseIndexMerge,
"USE_INDEX": hintUseIndex,
"ORDER_INDEX": hintOrderIndex,
"NO_ORDER_INDEX": hintNoOrderIndex,
"INDEX_LOOKUP_PUSHDOWN": hintIndexLookUpPushDown,
"NO_INDEX_LOOKUP_PUSHDOWN": hintNoIndexLookUpPushDown,
"USE_PLAN_CACHE": hintUsePlanCache,
"USE_TOJA": hintUseToja,
"TIME_RANGE": hintTimeRange,
"USE_CASCADES": hintUseCascades,
"NTH_PLAN": hintNthPlan,
"FORCE_INDEX": hintForceIndex,
"STRAIGHT_JOIN": hintStraightJoin,
"LEADING": hintLeading,
"SEMI_JOIN_REWRITE": hintSemiJoinRewrite,
"NO_DECORRELATE": hintNoDecorrelate,
// TiDB hint aliases
"TIDB_HJ": hintHashJoin,
"TIDB_INLJ": hintInlJoin,
"TIDB_SMJ": hintSMJoin,
// Other keywords
"OLAP": hintOLAP,
"OLTP": hintOLTP,
"TIKV": hintTiKV,
"TIFLASH": hintTiFlash,
"PARTITION": hintPartition,
"FALSE": hintFalse,
"TRUE": hintTrue,
"MB": hintMB,
"GB": hintGB,
"DUPSWEEDOUT": hintDupsWeedOut,
"FIRSTMATCH": hintFirstMatch,
"LOOSESCAN": hintLooseScan,
"MATERIALIZATION": hintMaterialization,
}
func (s *Scanner) isTokenIdentifier(lit string, offset int) int {
// An identifier before or after '.' means it is part of a qualified identifier.
// We do not parse it as keyword.
if s.r.peek() == '.' {
return 0
}
for idx := offset - 1; idx >= 0; idx-- {
if s.r.s[idx] == ' ' {
continue
} else if s.r.s[idx] == '.' {
return 0
}
break
}
buf := &s.buf
buf.Reset()
buf.Grow(len(lit))
data := buf.Bytes()[:len(lit)]
for i := range len(lit) {
c := lit[i]
if c >= 'a' && c <= 'z' {
data[i] = c + 'A' - 'a'
} else {
data[i] = c
}
}
checkBtFuncToken := s.r.peek() == '('
if !checkBtFuncToken && s.sqlMode.HasIgnoreSpaceMode() {
s.skipWhitespace()
checkBtFuncToken = s.r.peek() == '('
}
if checkBtFuncToken {
if tok := btFuncTokenMap[string(data)]; tok != 0 {
return tok
}
}
tok, ok := tokenMap[string(data)]
if !ok && s.supportWindowFunc {
tok = windowFuncTokenMap[string(data)]
}
return tok
}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package mysql
import "unicode"
// CharsetNameToID maps charset name to its default collation ID.
func CharsetNameToID(charset string) uint8 {
// Use quick path for TiDB to avoid access CharsetIDs map
// "SHOW CHARACTER SET;" to see all the supported character sets.
if charset == "utf8mb4" {
return UTF8MB4DefaultCollationID
} else if charset == "binary" {
return BinaryDefaultCollationID
} else if charset == "utf8" {
return UTF8DefaultCollationID
} else if charset == "ascii" {
return ASCIIDefaultCollationID
} else if charset == "latin1" {
return Latin1DefaultCollationID
}
return CharsetIDs[charset]
}
// CharsetIDs maps charset name to its default collation ID.
var CharsetIDs = map[string]uint8{
"big5": 1,
"dec8": 3,
"cp850": 4,
"hp8": 6,
"koi8r": 7,
"latin1": Latin1DefaultCollationID,
"latin2": 9,
"swe7": 10,
"ascii": ASCIIDefaultCollationID,
"ujis": 12,
"sjis": 13,
"hebrew": 16,
"tis620": 18,
"euckr": 19,
"koi8u": 22,
"gb2312": 24,
"greek": 25,
"cp1250": 26,
"gbk": 28,
"latin5": 30,
"armscii8": 32,
"utf8": UTF8DefaultCollationID,
"ucs2": 35,
"cp866": 36,
"keybcs2": 37,
"macce": 38,
"macroman": 39,
"cp852": 40,
"latin7": 41,
"utf8mb4": UTF8MB4DefaultCollationID,
"cp1251": 51,
"utf16": 54,
"utf16le": 56,
"cp1256": 57,
"cp1257": 59,
"utf32": 60,
"binary": BinaryDefaultCollationID,
"geostd8": 92,
"cp932": 95,
"eucjpms": 97,
"gb18030": GB18030DefaultCollationID,
}
// Collations maps MySQL collation ID to its name.
var Collations = map[uint16]string{
1: "big5_chinese_ci",
2: "latin2_czech_cs",
3: "dec8_swedish_ci",
4: "cp850_general_ci",
5: "latin1_german1_ci",
6: "hp8_english_ci",
7: "koi8r_general_ci",
8: "latin1_swedish_ci",
9: "latin2_general_ci",
10: "swe7_swedish_ci",
11: "ascii_general_ci",
12: "ujis_japanese_ci",
13: "sjis_japanese_ci",
14: "cp1251_bulgarian_ci",
15: "latin1_danish_ci",
16: "hebrew_general_ci",
18: "tis620_thai_ci",
19: "euckr_korean_ci",
20: "latin7_estonian_cs",
21: "latin2_hungarian_ci",
22: "koi8u_general_ci",
23: "cp1251_ukrainian_ci",
24: "gb2312_chinese_ci",
25: "greek_general_ci",
26: "cp1250_general_ci",
27: "latin2_croatian_ci",
28: "gbk_chinese_ci",
29: "cp1257_lithuanian_ci",
30: "latin5_turkish_ci",
31: "latin1_german2_ci",
32: "armscii8_general_ci",
33: "utf8_general_ci",
34: "cp1250_czech_cs",
35: "ucs2_general_ci",
36: "cp866_general_ci",
37: "keybcs2_general_ci",
38: "macce_general_ci",
39: "macroman_general_ci",
40: "cp852_general_ci",
41: "latin7_general_ci",
42: "latin7_general_cs",
43: "macce_bin",
44: "cp1250_croatian_ci",
45: "utf8mb4_general_ci",
46: "utf8mb4_bin",
47: "latin1_bin",
48: "latin1_general_ci",
49: "latin1_general_cs",
50: "cp1251_bin",
51: "cp1251_general_ci",
52: "cp1251_general_cs",
53: "macroman_bin",
54: "utf16_general_ci",
55: "utf16_bin",
56: "utf16le_general_ci",
57: "cp1256_general_ci",
58: "cp1257_bin",
59: "cp1257_general_ci",
60: "utf32_general_ci",
61: "utf32_bin",
62: "utf16le_bin",
63: "binary",
64: "armscii8_bin",
65: "ascii_bin",
66: "cp1250_bin",
67: "cp1256_bin",
68: "cp866_bin",
69: "dec8_bin",
70: "greek_bin",
71: "hebrew_bin",
72: "hp8_bin",
73: "keybcs2_bin",
74: "koi8r_bin",
75: "koi8u_bin",
77: "latin2_bin",
78: "latin5_bin",
79: "latin7_bin",
80: "cp850_bin",
81: "cp852_bin",
82: "swe7_bin",
83: "utf8_bin",
84: "big5_bin",
85: "euckr_bin",
86: "gb2312_bin",
87: "gbk_bin",
88: "sjis_bin",
89: "tis620_bin",
90: "ucs2_bin",
91: "ujis_bin",
92: "geostd8_general_ci",
93: "geostd8_bin",
94: "latin1_spanish_ci",
95: "cp932_japanese_ci",
96: "cp932_bin",
97: "eucjpms_japanese_ci",
98: "eucjpms_bin",
99: "cp1250_polish_ci",
101: "utf16_unicode_ci",
102: "utf16_icelandic_ci",
103: "utf16_latvian_ci",
104: "utf16_romanian_ci",
105: "utf16_slovenian_ci",
106: "utf16_polish_ci",
107: "utf16_estonian_ci",
108: "utf16_spanish_ci",
109: "utf16_swedish_ci",
110: "utf16_turkish_ci",
111: "utf16_czech_ci",
112: "utf16_danish_ci",
113: "utf16_lithuanian_ci",
114: "utf16_slovak_ci",
115: "utf16_spanish2_ci",
116: "utf16_roman_ci",
117: "utf16_persian_ci",
118: "utf16_esperanto_ci",
119: "utf16_hungarian_ci",
120: "utf16_sinhala_ci",
121: "utf16_german2_ci",
122: "utf16_croatian_ci",
123: "utf16_unicode_520_ci",
124: "utf16_vietnamese_ci",
128: "ucs2_unicode_ci",
129: "ucs2_icelandic_ci",
130: "ucs2_latvian_ci",
131: "ucs2_romanian_ci",
132: "ucs2_slovenian_ci",
133: "ucs2_polish_ci",
134: "ucs2_estonian_ci",
135: "ucs2_spanish_ci",
136: "ucs2_swedish_ci",
137: "ucs2_turkish_ci",
138: "ucs2_czech_ci",
139: "ucs2_danish_ci",
140: "ucs2_lithuanian_ci",
141: "ucs2_slovak_ci",
142: "ucs2_spanish2_ci",
143: "ucs2_roman_ci",
144: "ucs2_persian_ci",
145: "ucs2_esperanto_ci",
146: "ucs2_hungarian_ci",
147: "ucs2_sinhala_ci",
148: "ucs2_german2_ci",
149: "ucs2_croatian_ci",
150: "ucs2_unicode_520_ci",
151: "ucs2_vietnamese_ci",
159: "ucs2_general_mysql500_ci",
160: "utf32_unicode_ci",
161: "utf32_icelandic_ci",
162: "utf32_latvian_ci",
163: "utf32_romanian_ci",
164: "utf32_slovenian_ci",
165: "utf32_polish_ci",
166: "utf32_estonian_ci",
167: "utf32_spanish_ci",
168: "utf32_swedish_ci",
169: "utf32_turkish_ci",
170: "utf32_czech_ci",
171: "utf32_danish_ci",
172: "utf32_lithuanian_ci",
173: "utf32_slovak_ci",
174: "utf32_spanish2_ci",
175: "utf32_roman_ci",
176: "utf32_persian_ci",
177: "utf32_esperanto_ci",
178: "utf32_hungarian_ci",
179: "utf32_sinhala_ci",
180: "utf32_german2_ci",
181: "utf32_croatian_ci",
182: "utf32_unicode_520_ci",
183: "utf32_vietnamese_ci",
192: "utf8_unicode_ci",
193: "utf8_icelandic_ci",
194: "utf8_latvian_ci",
195: "utf8_romanian_ci",
196: "utf8_slovenian_ci",
197: "utf8_polish_ci",
198: "utf8_estonian_ci",
199: "utf8_spanish_ci",
200: "utf8_swedish_ci",
201: "utf8_turkish_ci",
202: "utf8_czech_ci",
203: "utf8_danish_ci",
204: "utf8_lithuanian_ci",
205: "utf8_slovak_ci",
206: "utf8_spanish2_ci",
207: "utf8_roman_ci",
208: "utf8_persian_ci",
209: "utf8_esperanto_ci",
210: "utf8_hungarian_ci",
211: "utf8_sinhala_ci",
212: "utf8_german2_ci",
213: "utf8_croatian_ci",
214: "utf8_unicode_520_ci",
215: "utf8_vietnamese_ci",
223: "utf8_general_mysql500_ci",
224: "utf8mb4_unicode_ci",
225: "utf8mb4_icelandic_ci",
226: "utf8mb4_latvian_ci",
227: "utf8mb4_romanian_ci",
228: "utf8mb4_slovenian_ci",
229: "utf8mb4_polish_ci",
230: "utf8mb4_estonian_ci",
231: "utf8mb4_spanish_ci",
232: "utf8mb4_swedish_ci",
233: "utf8mb4_turkish_ci",
234: "utf8mb4_czech_ci",
235: "utf8mb4_danish_ci",
236: "utf8mb4_lithuanian_ci",
237: "utf8mb4_slovak_ci",
238: "utf8mb4_spanish2_ci",
239: "utf8mb4_roman_ci",
240: "utf8mb4_persian_ci",
241: "utf8mb4_esperanto_ci",
242: "utf8mb4_hungarian_ci",
243: "utf8mb4_sinhala_ci",
244: "utf8mb4_german2_ci",
245: "utf8mb4_croatian_ci",
246: "utf8mb4_unicode_520_ci",
247: "utf8mb4_vietnamese_ci",
248: "gb18030_chinese_ci",
249: "gb18030_bin",
255: "utf8mb4_0900_ai_ci",
309: "utf8mb4_0900_bin",
}
// CollationNames maps MySQL collation name to its ID
var CollationNames = map[string]uint16{
"big5_chinese_ci": 1,
"latin2_czech_cs": 2,
"dec8_swedish_ci": 3,
"cp850_general_ci": 4,
"latin1_german1_ci": 5,
"hp8_english_ci": 6,
"koi8r_general_ci": 7,
"latin1_swedish_ci": 8,
"latin2_general_ci": 9,
"swe7_swedish_ci": 10,
"ascii_general_ci": 11,
"ujis_japanese_ci": 12,
"sjis_japanese_ci": 13,
"cp1251_bulgarian_ci": 14,
"latin1_danish_ci": 15,
"hebrew_general_ci": 16,
"tis620_thai_ci": 18,
"euckr_korean_ci": 19,
"latin7_estonian_cs": 20,
"latin2_hungarian_ci": 21,
"koi8u_general_ci": 22,
"cp1251_ukrainian_ci": 23,
"gb2312_chinese_ci": 24,
"greek_general_ci": 25,
"cp1250_general_ci": 26,
"latin2_croatian_ci": 27,
"gbk_chinese_ci": 28,
"cp1257_lithuanian_ci": 29,
"latin5_turkish_ci": 30,
"latin1_german2_ci": 31,
"armscii8_general_ci": 32,
"utf8_general_ci": 33,
"cp1250_czech_cs": 34,
"ucs2_general_ci": 35,
"cp866_general_ci": 36,
"keybcs2_general_ci": 37,
"macce_general_ci": 38,
"macroman_general_ci": 39,
"cp852_general_ci": 40,
"latin7_general_ci": 41,
"latin7_general_cs": 42,
"macce_bin": 43,
"cp1250_croatian_ci": 44,
"utf8mb4_general_ci": 45,
"utf8mb4_bin": 46,
"latin1_bin": 47,
"latin1_general_ci": 48,
"latin1_general_cs": 49,
"cp1251_bin": 50,
"cp1251_general_ci": 51,
"cp1251_general_cs": 52,
"macroman_bin": 53,
"utf16_general_ci": 54,
"utf16_bin": 55,
"utf16le_general_ci": 56,
"cp1256_general_ci": 57,
"cp1257_bin": 58,
"cp1257_general_ci": 59,
"utf32_general_ci": 60,
"utf32_bin": 61,
"utf16le_bin": 62,
"binary": 63,
"armscii8_bin": 64,
"ascii_bin": 65,
"cp1250_bin": 66,
"cp1256_bin": 67,
"cp866_bin": 68,
"dec8_bin": 69,
"greek_bin": 70,
"hebrew_bin": 71,
"hp8_bin": 72,
"keybcs2_bin": 73,
"koi8r_bin": 74,
"koi8u_bin": 75,
"latin2_bin": 77,
"latin5_bin": 78,
"latin7_bin": 79,
"cp850_bin": 80,
"cp852_bin": 81,
"swe7_bin": 82,
"utf8_bin": 83,
"big5_bin": 84,
"euckr_bin": 85,
"gb2312_bin": 86,
"gbk_bin": 87,
"sjis_bin": 88,
"tis620_bin": 89,
"ucs2_bin": 90,
"ujis_bin": 91,
"geostd8_general_ci": 92,
"geostd8_bin": 93,
"latin1_spanish_ci": 94,
"cp932_japanese_ci": 95,
"cp932_bin": 96,
"eucjpms_japanese_ci": 97,
"eucjpms_bin": 98,
"cp1250_polish_ci": 99,
"utf16_unicode_ci": 101,
"utf16_icelandic_ci": 102,
"utf16_latvian_ci": 103,
"utf16_romanian_ci": 104,
"utf16_slovenian_ci": 105,
"utf16_polish_ci": 106,
"utf16_estonian_ci": 107,
"utf16_spanish_ci": 108,
"utf16_swedish_ci": 109,
"utf16_turkish_ci": 110,
"utf16_czech_ci": 111,
"utf16_danish_ci": 112,
"utf16_lithuanian_ci": 113,
"utf16_slovak_ci": 114,
"utf16_spanish2_ci": 115,
"utf16_roman_ci": 116,
"utf16_persian_ci": 117,
"utf16_esperanto_ci": 118,
"utf16_hungarian_ci": 119,
"utf16_sinhala_ci": 120,
"utf16_german2_ci": 121,
"utf16_croatian_ci": 122,
"utf16_unicode_520_ci": 123,
"utf16_vietnamese_ci": 124,
"ucs2_unicode_ci": 128,
"ucs2_icelandic_ci": 129,
"ucs2_latvian_ci": 130,
"ucs2_romanian_ci": 131,
"ucs2_slovenian_ci": 132,
"ucs2_polish_ci": 133,
"ucs2_estonian_ci": 134,
"ucs2_spanish_ci": 135,
"ucs2_swedish_ci": 136,
"ucs2_turkish_ci": 137,
"ucs2_czech_ci": 138,
"ucs2_danish_ci": 139,
"ucs2_lithuanian_ci": 140,
"ucs2_slovak_ci": 141,
"ucs2_spanish2_ci": 142,
"ucs2_roman_ci": 143,
"ucs2_persian_ci": 144,
"ucs2_esperanto_ci": 145,
"ucs2_hungarian_ci": 146,
"ucs2_sinhala_ci": 147,
"ucs2_german2_ci": 148,
"ucs2_croatian_ci": 149,
"ucs2_unicode_520_ci": 150,
"ucs2_vietnamese_ci": 151,
"ucs2_general_mysql500_ci": 159,
"utf32_unicode_ci": 160,
"utf32_icelandic_ci": 161,
"utf32_latvian_ci": 162,
"utf32_romanian_ci": 163,
"utf32_slovenian_ci": 164,
"utf32_polish_ci": 165,
"utf32_estonian_ci": 166,
"utf32_spanish_ci": 167,
"utf32_swedish_ci": 168,
"utf32_turkish_ci": 169,
"utf32_czech_ci": 170,
"utf32_danish_ci": 171,
"utf32_lithuanian_ci": 172,
"utf32_slovak_ci": 173,
"utf32_spanish2_ci": 174,
"utf32_roman_ci": 175,
"utf32_persian_ci": 176,
"utf32_esperanto_ci": 177,
"utf32_hungarian_ci": 178,
"utf32_sinhala_ci": 179,
"utf32_german2_ci": 180,
"utf32_croatian_ci": 181,
"utf32_unicode_520_ci": 182,
"utf32_vietnamese_ci": 183,
"utf8_unicode_ci": 192,
"utf8_icelandic_ci": 193,
"utf8_latvian_ci": 194,
"utf8_romanian_ci": 195,
"utf8_slovenian_ci": 196,
"utf8_polish_ci": 197,
"utf8_estonian_ci": 198,
"utf8_spanish_ci": 199,
"utf8_swedish_ci": 200,
"utf8_turkish_ci": 201,
"utf8_czech_ci": 202,
"utf8_danish_ci": 203,
"utf8_lithuanian_ci": 204,
"utf8_slovak_ci": 205,
"utf8_spanish2_ci": 206,
"utf8_roman_ci": 207,
"utf8_persian_ci": 208,
"utf8_esperanto_ci": 209,
"utf8_hungarian_ci": 210,
"utf8_sinhala_ci": 211,
"utf8_german2_ci": 212,
"utf8_croatian_ci": 213,
"utf8_unicode_520_ci": 214,
"utf8_vietnamese_ci": 215,
"utf8_general_mysql500_ci": 223,
"utf8mb4_unicode_ci": 224,
"utf8mb4_icelandic_ci": 225,
"utf8mb4_latvian_ci": 226,
"utf8mb4_romanian_ci": 227,
"utf8mb4_slovenian_ci": 228,
"utf8mb4_polish_ci": 229,
"utf8mb4_estonian_ci": 230,
"utf8mb4_spanish_ci": 231,
"utf8mb4_swedish_ci": 232,
"utf8mb4_turkish_ci": 233,
"utf8mb4_czech_ci": 234,
"utf8mb4_danish_ci": 235,
"utf8mb4_lithuanian_ci": 236,
"utf8mb4_slovak_ci": 237,
"utf8mb4_spanish2_ci": 238,
"utf8mb4_roman_ci": 239,
"utf8mb4_persian_ci": 240,
"utf8mb4_esperanto_ci": 241,
"utf8mb4_hungarian_ci": 242,
"utf8mb4_sinhala_ci": 243,
"utf8mb4_german2_ci": 244,
"utf8mb4_croatian_ci": 245,
"utf8mb4_unicode_520_ci": 246,
"utf8mb4_vietnamese_ci": 247,
"gb18030_chinese_ci": 248,
"gb18030_bin": 249,
"utf8mb4_0900_ai_ci": 255,
"utf8mb4_0900_bin": 309,
}
// MySQL collation information.
const (
UTF8Charset = "utf8"
UTF8MB4Charset = "utf8mb4"
DefaultCharset = UTF8MB4Charset
// DefaultCollationID is utf8mb4_bin(46)
DefaultCollationID = 46
Latin1DefaultCollationID = 47
ASCIIDefaultCollationID = 65
UTF8DefaultCollationID = 83
UTF8MB4DefaultCollationID = 46
BinaryDefaultCollationID = 63
GB18030DefaultCollationID = 248
UTF8MB4DefaultCollation = "utf8mb4_bin"
DefaultCollationName = UTF8MB4DefaultCollation
UTF8MB4GeneralCICollation = "utf8mb4_general_ci"
// MaxBytesOfCharacter, is the max bytes length of a character,
// refer to RFC3629, in UTF-8, characters from the U+0000..U+10FFFF range
// (the UTF-16 accessible range) are encoded using sequences of 1 to 4 octets.
MaxBytesOfCharacter = 4
)
// IsUTF8Charset checks if charset is utf8, utf8mb4.
func IsUTF8Charset(charset string) bool {
return charset == UTF8Charset || charset == UTF8MB4Charset
}
// RangeGraph defines valid unicode characters to use in column names. It strictly follows MySQL's definition.
// See #3994.
var RangeGraph = []*unicode.RangeTable{
// _MY_PNT
unicode.No,
unicode.Mn,
unicode.Me,
unicode.Pc,
unicode.Pd,
unicode.Pd,
unicode.Ps,
unicode.Pe,
unicode.Pi,
unicode.Pf,
unicode.Po,
unicode.Sm,
unicode.Sc,
unicode.Sk,
unicode.So,
// _MY_U
unicode.Lu,
unicode.Lt,
unicode.Nl,
// _MY_L
unicode.Ll,
unicode.Lm,
unicode.Lo,
unicode.Nl,
unicode.Mn,
unicode.Mc,
unicode.Me,
// _MY_NMR
unicode.Nd,
unicode.Nl,
unicode.No,
}
// Copyright 2017 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package mysql
import (
"fmt"
"strings"
"github.com/coreos/go-semver/semver"
"github.com/pingcap/errors"
"github.com/pingcap/tidb/pkg/parser/format"
)
func newInvalidModeErr(s string) error {
return NewErr(ErrWrongValueForVar, "sql_mode", s)
}
const (
mysqlCompatibilityVersion = "8.0.11"
// VersionSeparator NOTE: DON'T MODIFY THIS VALUE.
// We don't store TiDB server version directly inside PD, but stores a concatenated
// one with MySQL compatibility version, with this fixed then we can parse TiDB
// version from ServerVersion.
VersionSeparator = "-TiDB-"
// tidbXReleaseVersionPrefix is used in `select tidb_version()` output of nextgen.
tidbXReleaseVersionPrefix = "CLOUD."
legacyTiDBReleaseVersionPlaceholder = "v8.4.0-this-is-a-placeholder"
// tidbXPlaceholderReleaseVersion is the default release version for nextgen when no
// release version is injected during build, such as when running in IDE.
tidbXPlaceholderReleaseVersion = "v26.3.0-this-is-a-placeholder"
// TiDBXVerMinYear is set to 2025 just for sanity check.
// our first release of next-gen since 2025
TiDBXVerMinYear = 2025
// TiDBXVerMaxYear is set to 2099 just for sanity check, we don't expect the
// year part of release version to be larger than this.
// enough for now.
TiDBXVerMaxYear = 2099
)
// Version information.
var (
// TiDBReleaseVersion is initialized by (git describe --tags) in Makefile.
TiDBReleaseVersion = legacyTiDBReleaseVersionPlaceholder
// ServerVersion is the version information of this tidb-server in MySQL's format.
ServerVersion = fmt.Sprintf("%s%s%s", mysqlCompatibilityVersion, VersionSeparator, TiDBReleaseVersion)
)
// NormalizeTiDBReleaseVersionForNextGen rewrites the legacy placeholder into a nextgen
// placeholder that follows `v[2-digit-year].[month].[fix-version]`.
// pkg/parser is Golang project, it cannot use kerneltype pkg to conditionally
// compile different code for next-gen and classic, so we have to rewrite the
// placeholder value in this function.
func NormalizeTiDBReleaseVersionForNextGen(releaseVersion string) string {
// the version is not set if we run next-gen tidb from IDE.
if releaseVersion == legacyTiDBReleaseVersionPlaceholder {
return tidbXPlaceholderReleaseVersion
}
return releaseVersion
}
// BuildTiDBXReleaseVersion converts mysql.TiDBReleaseVersion into the nextgen visible
// version format `CLOUD.<4-digit-year-2-digit-month>.<fix-version><optional-pre-release>`.
func BuildTiDBXReleaseVersion(releaseVersion string) (string, error) {
if !strings.HasPrefix(releaseVersion, "v") {
return "", errors.Errorf("invalid TiDB release version %q, should start with 'v'", releaseVersion)
}
rawVer := strings.TrimPrefix(releaseVersion, "v")
ver, err := semver.NewVersion(rawVer)
if err != nil {
return "", errors.Errorf("invalid TiDB release version %q, expect a semantic version", releaseVersion)
}
year := 2000 + ver.Major
if year < TiDBXVerMinYear || year > TiDBXVerMaxYear || ver.Minor < 1 || ver.Minor > 12 {
return "", errors.Errorf("invalid TiDB release version %q, the semantic version part should be in [2-digit-year].[month].[fix-version]-[xxx] format", releaseVersion)
}
preRelease := string(ver.PreRelease)
if preRelease != "" {
preRelease = "-" + preRelease
}
return fmt.Sprintf("%s%d%02d.%d%s", tidbXReleaseVersionPrefix, year, ver.Minor, ver.Patch, preRelease), nil
}
// BuildTiDBXServerVersion converts mysql.TiDBReleaseVersion into MySQL server version
// format `8.0.11-TiDB-CLOUD.<4-digit-year-2-digit-month>.<fix-version>`.
func BuildTiDBXServerVersion(releaseVersion string) (string, error) {
tidbXReleaseVersion, err := BuildTiDBXReleaseVersion(releaseVersion)
if err != nil {
return "", err
}
return fmt.Sprintf("%s%s%s", mysqlCompatibilityVersion, VersionSeparator, tidbXReleaseVersion), nil
}
// Header information.
const (
OKHeader byte = 0x00
ErrHeader byte = 0xff
EOFHeader byte = 0xfe
LocalInFileHeader byte = 0xfb
)
// AuthSwitchRequest is a protocol feature.
const AuthSwitchRequest byte = 0xfe
// Server information.
const (
ServerStatusInTrans uint16 = 0x0001
ServerStatusAutocommit uint16 = 0x0002
ServerMoreResultsExists uint16 = 0x0008
ServerStatusNoGoodIndexUsed uint16 = 0x0010
ServerStatusNoIndexUsed uint16 = 0x0020
ServerStatusCursorExists uint16 = 0x0040
ServerStatusLastRowSend uint16 = 0x0080
ServerStatusDBDropped uint16 = 0x0100
ServerStatusNoBackslashEscaped uint16 = 0x0200
ServerStatusMetadataChanged uint16 = 0x0400
ServerStatusWasSlow uint16 = 0x0800
ServerPSOutParams uint16 = 0x1000
)
// HasCursorExistsFlag return true if cursor exists indicated by server status.
func HasCursorExistsFlag(serverStatus uint16) bool {
return serverStatus&ServerStatusCursorExists > 0
}
// Identifier length limitations.
// See https://dev.mysql.com/doc/refman/5.7/en/identifiers.html
const (
// MaxPayloadLen is the max packet payload length.
MaxPayloadLen = 1<<24 - 1
// MaxTableNameLength is max length of table name identifier.
MaxTableNameLength = 64
// MaxDatabaseNameLength is max length of database name identifier.
MaxDatabaseNameLength = 64
// MaxColumnNameLength is max length of column name identifier.
MaxColumnNameLength = 64
// MaxKeyParts is max length of key parts.
MaxKeyParts = 16
// MaxIndexIdentifierLen is max length of index identifier.
MaxIndexIdentifierLen = 64
// MaxForeignKeyIdentifierLen is max length of foreign key identifier.
MaxForeignKeyIdentifierLen = 64
// MaxConstraintIdentifierLen is max length of constrain identifier.
MaxConstraintIdentifierLen = 64
// MaxViewIdentifierLen is max length of view identifier.
MaxViewIdentifierLen = 64
// MaxAliasIdentifierLen is max length of alias identifier.
MaxAliasIdentifierLen = 256
// MaxUserDefinedVariableLen is max length of user-defined variable.
MaxUserDefinedVariableLen = 64
)
// ErrTextLength error text length limit.
const ErrTextLength = 80
// Command information.
const (
ComSleep byte = iota
ComQuit
ComInitDB
ComQuery
ComFieldList
ComCreateDB
ComDropDB
ComRefresh
ComShutdown
ComStatistics
ComProcessInfo
ComConnect
ComProcessKill
ComDebug
ComPing
ComTime
ComDelayedInsert
ComChangeUser
ComBinlogDump
ComTableDump
ComConnectOut
ComRegisterSlave
ComStmtPrepare
ComStmtExecute
ComStmtSendLongData
ComStmtClose
ComStmtReset
ComSetOption
ComStmtFetch
ComDaemon
ComBinlogDumpGtid
ComResetConnection
ComEnd
)
// Client information. https://dev.mysql.com/doc/dev/mysql-server/latest/group__group__cs__capabilities__flags.html
const (
ClientLongPassword uint32 = 1 << iota // CLIENT_LONG_PASSWORD
ClientFoundRows // CLIENT_FOUND_ROWS
ClientLongFlag // CLIENT_LONG_FLAG
ClientConnectWithDB // CLIENT_CONNECT_WITH_DB
ClientNoSchema // CLIENT_NO_SCHEMA
ClientCompress // CLIENT_COMPRESS
ClientODBC // CLIENT_ODBC
ClientLocalFiles // CLIENT_LOCAL_FILES
ClientIgnoreSpace // CLIENT_IGNORE_SPACE
ClientProtocol41 // CLIENT_PROTOCOL_41
ClientInteractive // CLIENT_INTERACTIVE
ClientSSL // CLIENT_SSL
ClientIgnoreSigpipe // CLIENT_IGNORE_SIGPIPE
ClientTransactions // CLIENT_TRANSACTIONS
ClientReserved // Deprecated: CLIENT_RESERVED
ClientSecureConnection // Deprecated: CLIENT_SECURE_CONNECTION
ClientMultiStatements // CLIENT_MULTI_STATEMENTS
ClientMultiResults // CLIENT_MULTI_RESULTS
ClientPSMultiResults // CLIENT_PS_MULTI_RESULTS
ClientPluginAuth // CLIENT_PLUGIN_AUTH
ClientConnectAtts // CLIENT_CONNECT_ATTRS
ClientPluginAuthLenencClientData // CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA
ClientHandleExpiredPasswords // CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS, Not supported: https://dev.mysql.com/doc/dev/mysql-server/latest/page_protocol_basic_expired_passwords.html
ClientSessionTrack // CLIENT_SESSION_TRACK, Not supported: https://github.com/pingcap/tidb/issues/35309
ClientDeprecateEOF // CLIENT_DEPRECATE_EOF
ClientOptionalResultsetMetadata // CLIENT_OPTIONAL_RESULTSET_METADATA, Not supported: https://dev.mysql.com/doc/c-api/8.0/en/c-api-optional-metadata.html
ClientZstdCompressionAlgorithm // CLIENT_ZSTD_COMPRESSION_ALGORITHM
// 1 << 27 == CLIENT_QUERY_ATTRIBUTES
// 1 << 28 == MULTI_FACTOR_AUTHENTICATION
// 1 << 29 == CLIENT_CAPABILITY_EXTENSION
// 1 << 30 == CLIENT_SSL_VERIFY_SERVER_CERT
// 1 << 31 == CLIENT_REMEMBER_OPTIONS
)
// Cache type information.
const (
TypeNoCache byte = 0xff
)
// Auth name information.
const (
AuthNativePassword = "mysql_native_password" // #nosec G101
AuthCachingSha2Password = "caching_sha2_password" // #nosec G101
AuthTiDBSM3Password = "tidb_sm3_password" // #nosec G101
AuthMySQLClearPassword = "mysql_clear_password"
AuthSocket = "auth_socket"
AuthTiDBSessionToken = "tidb_session_token"
AuthTiDBAuthToken = "tidb_auth_token"
AuthLDAPSimple = "authentication_ldap_simple"
AuthLDAPSASL = "authentication_ldap_sasl"
)
// System database and tables that mostly inherited from MySQL.
const (
// SystemDB is the name of system database.
SystemDB = "mysql"
// SysDB is the name of `sys` schema, which is a set of objects to help users to interpret data collected
// in `information_schema`.
SysDB = "sys"
// GlobalPrivTable is the table in system db contains global scope privilege info.
GlobalPrivTable = "global_priv"
// UserTable is the table in system db contains user info.
UserTable = "User"
// DBTable is the table in system db contains db scope privilege info.
DBTable = "DB"
// TablePrivTable is the table in system db contains table scope privilege info.
TablePrivTable = "Tables_priv"
// ColumnPrivTable is the table in system db contains column scope privilege info.
ColumnPrivTable = "Columns_priv"
// GlobalVariablesTable is the table contains global system variables.
GlobalVariablesTable = "GLOBAL_VARIABLES"
// GlobalStatusTable is the table contains global status variables.
GlobalStatusTable = "GLOBAL_STATUS"
// TiDBTable is the table contains tidb info.
TiDBTable = "tidb"
// RoleEdgeTable is the table contains role relation info
RoleEdgeTable = "role_edges"
// DefaultRoleTable is the table contain default active role info
DefaultRoleTable = "default_roles"
// PasswordHistoryTable is the table in system db contains password history.
PasswordHistoryTable = "password_history"
// WorkloadSchema is the name of workload repository database.
WorkloadSchema = "workload_schema"
)
// MySQL type maximum length.
const (
// NotFixedDec For arguments that have no fixed number of decimals, the decimals value is set to 31,
// which is 1 more than the maximum number of decimals permitted for the DECIMAL, FLOAT, and DOUBLE data types.
NotFixedDec = 31
MaxIntWidth = 20
MaxRealWidth = 23
MaxFloatingTypeScale = 30
MaxFloatingTypeWidth = 255
MaxDecimalScale = 30
MaxDecimalWidth = 65
MaxDateWidth = 10 // YYYY-MM-DD.
MaxDatetimeWidthNoFsp = 19 // YYYY-MM-DD HH:MM:SS
MaxDatetimeWidthWithFsp = 26 // YYYY-MM-DD HH:MM:SS[.fraction]
MaxDatetimeFullWidth = 29 // YYYY-MM-DD HH:MM:SS.###### AM
MaxDurationWidthNoFsp = 10 // HH:MM:SS
MaxDurationWidthWithFsp = 17 // HH:MM:SS[.fraction] -838:59:59.000000 to 838:59:59.000000
MaxBlobWidth = 16777216
MaxLongBlobWidth = 4294967295
MaxBitDisplayWidth = 64
MaxFloatPrecisionLength = 24
MaxDoublePrecisionLength = 53
)
// MySQL max type field length.
const (
MaxFieldCharLength = 255
MaxFieldVarCharLength = 65535
)
// MaxTypeSetMembers is the number of set members.
const MaxTypeSetMembers = 64
// PWDHashLen is the length of mysql_native_password's hash.
const PWDHashLen = 40 // excluding the '*'
// SHAPWDHashLen is the length of sha256_password's hash.
const SHAPWDHashLen = 70
// SM3PWDHashLen is the length of tidb_sm3_password's hash.
const SM3PWDHashLen = 70
// Command2Str is the command information to command name.
var Command2Str = map[byte]string{
ComSleep: "Sleep",
ComQuit: "Quit",
ComInitDB: "Init DB",
ComQuery: "Query",
ComFieldList: "Field List",
ComCreateDB: "Create DB",
ComDropDB: "Drop DB",
ComRefresh: "Refresh",
ComShutdown: "Shutdown",
ComStatistics: "Statistics",
ComProcessInfo: "Processlist",
ComConnect: "Connect",
ComProcessKill: "Kill",
ComDebug: "Debug",
ComPing: "Ping",
ComTime: "Time",
ComDelayedInsert: "Delayed Insert",
ComChangeUser: "Change User",
ComBinlogDump: "Binlog Dump",
ComTableDump: "Table Dump",
ComConnectOut: "Connect out",
ComRegisterSlave: "Register Slave",
ComStmtPrepare: "Prepare",
ComStmtExecute: "Execute",
ComStmtSendLongData: "Long Data",
ComStmtClose: "Close stmt",
ComStmtReset: "Reset stmt",
ComSetOption: "Set option",
ComStmtFetch: "Fetch",
ComDaemon: "Daemon",
ComBinlogDumpGtid: "Binlog Dump",
ComResetConnection: "Reset connect",
}
// DefaultSQLMode for GLOBAL_VARIABLES
const DefaultSQLMode = "ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
// DefaultLengthOfMysqlTypes is the map for default physical length of MySQL data types.
// See http://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html
var DefaultLengthOfMysqlTypes = map[byte]int{
TypeYear: 1,
TypeDate: 3,
TypeDuration: 3,
TypeDatetime: 8,
TypeTimestamp: 4,
TypeTiny: 1,
TypeShort: 2,
TypeInt24: 3,
TypeLong: 4,
TypeLonglong: 8,
TypeFloat: 4,
TypeDouble: 8,
TypeEnum: 2,
TypeString: 1,
TypeSet: 8,
}
// DefaultLengthOfTimeFraction is the map for default physical length of time fractions.
var DefaultLengthOfTimeFraction = map[int]int{
0: 0,
1: 1,
2: 1,
3: 2,
4: 2,
5: 3,
6: 3,
}
// DefaultAuthPlugins are the supported default authentication plugins.
var DefaultAuthPlugins = []string{
AuthNativePassword,
AuthCachingSha2Password,
AuthTiDBSM3Password,
AuthLDAPSASL,
AuthLDAPSimple,
AuthSocket,
AuthTiDBSessionToken,
AuthTiDBAuthToken,
AuthMySQLClearPassword,
}
// SQLMode is the type for MySQL sql_mode.
// See https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html
type SQLMode int64
// HasNoZeroDateMode detects if 'NO_ZERO_DATE' mode is set in SQLMode
func (m SQLMode) HasNoZeroDateMode() bool {
return m&ModeNoZeroDate == ModeNoZeroDate
}
// HasNoZeroInDateMode detects if 'NO_ZERO_IN_DATE' mode is set in SQLMode
func (m SQLMode) HasNoZeroInDateMode() bool {
return m&ModeNoZeroInDate == ModeNoZeroInDate
}
// HasErrorForDivisionByZeroMode detects if 'ERROR_FOR_DIVISION_BY_ZERO' mode is set in SQLMode
func (m SQLMode) HasErrorForDivisionByZeroMode() bool {
return m&ModeErrorForDivisionByZero == ModeErrorForDivisionByZero
}
// HasOnlyFullGroupBy detects if 'ONLY_FULL_GROUP_BY' mode is set in SQLMode
func (m SQLMode) HasOnlyFullGroupBy() bool {
return m&ModeOnlyFullGroupBy == ModeOnlyFullGroupBy
}
// HasStrictMode detects if 'STRICT_TRANS_TABLES' or 'STRICT_ALL_TABLES' mode is set in SQLMode
func (m SQLMode) HasStrictMode() bool {
return m&ModeStrictTransTables == ModeStrictTransTables || m&ModeStrictAllTables == ModeStrictAllTables
}
// HasPipesAsConcatMode detects if 'PIPES_AS_CONCAT' mode is set in SQLMode
func (m SQLMode) HasPipesAsConcatMode() bool {
return m&ModePipesAsConcat == ModePipesAsConcat
}
// HasNoUnsignedSubtractionMode detects if 'NO_UNSIGNED_SUBTRACTION' mode is set in SQLMode
func (m SQLMode) HasNoUnsignedSubtractionMode() bool {
return m&ModeNoUnsignedSubtraction == ModeNoUnsignedSubtraction
}
// HasHighNotPrecedenceMode detects if 'HIGH_NOT_PRECEDENCE' mode is set in SQLMode
func (m SQLMode) HasHighNotPrecedenceMode() bool {
return m&ModeHighNotPrecedence == ModeHighNotPrecedence
}
// HasANSIQuotesMode detects if 'ANSI_QUOTES' mode is set in SQLMode
func (m SQLMode) HasANSIQuotesMode() bool {
return m&ModeANSIQuotes == ModeANSIQuotes
}
// HasRealAsFloatMode detects if 'REAL_AS_FLOAT' mode is set in SQLMode
func (m SQLMode) HasRealAsFloatMode() bool {
return m&ModeRealAsFloat == ModeRealAsFloat
}
// HasPadCharToFullLengthMode detects if 'PAD_CHAR_TO_FULL_LENGTH' mode is set in SQLMode
func (m SQLMode) HasPadCharToFullLengthMode() bool {
return m&ModePadCharToFullLength == ModePadCharToFullLength
}
// HasNoBackslashEscapesMode detects if 'NO_BACKSLASH_ESCAPES' mode is set in SQLMode
func (m SQLMode) HasNoBackslashEscapesMode() bool {
return m&ModeNoBackslashEscapes == ModeNoBackslashEscapes
}
// HasIgnoreSpaceMode detects if 'IGNORE_SPACE' mode is set in SQLMode
func (m SQLMode) HasIgnoreSpaceMode() bool {
return m&ModeIgnoreSpace == ModeIgnoreSpace
}
// HasNoAutoCreateUserMode detects if 'NO_AUTO_CREATE_USER' mode is set in SQLMode
func (m SQLMode) HasNoAutoCreateUserMode() bool {
return m&ModeNoAutoCreateUser == ModeNoAutoCreateUser
}
// HasAllowInvalidDatesMode detects if 'ALLOW_INVALID_DATES' mode is set in SQLMode
func (m SQLMode) HasAllowInvalidDatesMode() bool {
return m&ModeAllowInvalidDates == ModeAllowInvalidDates
}
// DelSQLMode delete sql mode from ori
func DelSQLMode(ori SQLMode, del SQLMode) SQLMode {
return ori & (^del)
}
// SetSQLMode add sql mode to ori
func SetSQLMode(ori SQLMode, add SQLMode) SQLMode {
return ori | add
}
// consts for sql modes.
// see https://dev.mysql.com/doc/internals/en/query-event.html#q-sql-mode-code
const (
ModeRealAsFloat SQLMode = 1 << iota
ModePipesAsConcat
ModeANSIQuotes
ModeIgnoreSpace
ModeNotUsed
ModeOnlyFullGroupBy
ModeNoUnsignedSubtraction
ModeNoDirInCreate
ModePostgreSQL
ModeOracle
ModeMsSQL
ModeDb2
ModeMaxdb
ModeNoKeyOptions
ModeNoTableOptions
ModeNoFieldOptions
ModeMySQL323
ModeMySQL40
ModeANSI
ModeNoAutoValueOnZero
ModeNoBackslashEscapes
ModeStrictTransTables
ModeStrictAllTables
ModeNoZeroInDate
ModeNoZeroDate
ModeInvalidDates
ModeErrorForDivisionByZero
ModeTraditional
ModeNoAutoCreateUser
ModeHighNotPrecedence
ModeNoEngineSubstitution
ModePadCharToFullLength
ModeAllowInvalidDates
ModeNone = 0
)
// FormatSQLModeStr re-format 'SQL_MODE' variable.
func FormatSQLModeStr(s string) string {
s = strings.ToUpper(strings.TrimRight(s, " "))
parts := strings.Split(s, ",")
var nonEmptyParts []string
existParts := make(map[string]string)
for _, part := range parts {
if len(part) == 0 {
continue
}
if modeParts, ok := CombinationSQLMode[part]; ok {
for _, modePart := range modeParts {
if _, exist := existParts[modePart]; !exist {
nonEmptyParts = append(nonEmptyParts, modePart)
existParts[modePart] = modePart
}
}
}
if _, exist := existParts[part]; !exist {
nonEmptyParts = append(nonEmptyParts, part)
existParts[part] = part
}
}
return strings.Join(nonEmptyParts, ",")
}
// GetSQLMode gets the sql mode for string literal. SQL_mode is a list of different modes separated by commas.
// The input string must be formatted by 'FormatSQLModeStr'
func GetSQLMode(s string) (SQLMode, error) {
strs := strings.Split(s, ",")
var sqlMode SQLMode
for i, length := 0, len(strs); i < length; i++ {
mode, ok := Str2SQLMode[strs[i]]
if !ok && strs[i] != "" {
return sqlMode, newInvalidModeErr(strs[i])
}
sqlMode = sqlMode | mode
}
return sqlMode, nil
}
// Str2SQLMode is the string represent of sql_mode to sql_mode map.
var Str2SQLMode = map[string]SQLMode{
"REAL_AS_FLOAT": ModeRealAsFloat,
"PIPES_AS_CONCAT": ModePipesAsConcat,
"ANSI_QUOTES": ModeANSIQuotes,
"IGNORE_SPACE": ModeIgnoreSpace,
"NOT_USED": ModeNotUsed,
"ONLY_FULL_GROUP_BY": ModeOnlyFullGroupBy,
"NO_UNSIGNED_SUBTRACTION": ModeNoUnsignedSubtraction,
"NO_DIR_IN_CREATE": ModeNoDirInCreate,
"POSTGRESQL": ModePostgreSQL,
"ORACLE": ModeOracle,
"MSSQL": ModeMsSQL,
"DB2": ModeDb2,
"MAXDB": ModeMaxdb,
"NO_KEY_OPTIONS": ModeNoKeyOptions,
"NO_TABLE_OPTIONS": ModeNoTableOptions,
"NO_FIELD_OPTIONS": ModeNoFieldOptions,
"MYSQL323": ModeMySQL323,
"MYSQL40": ModeMySQL40,
"ANSI": ModeANSI,
"NO_AUTO_VALUE_ON_ZERO": ModeNoAutoValueOnZero,
"NO_BACKSLASH_ESCAPES": ModeNoBackslashEscapes,
"STRICT_TRANS_TABLES": ModeStrictTransTables,
"STRICT_ALL_TABLES": ModeStrictAllTables,
"NO_ZERO_IN_DATE": ModeNoZeroInDate,
"NO_ZERO_DATE": ModeNoZeroDate,
"INVALID_DATES": ModeInvalidDates,
"ERROR_FOR_DIVISION_BY_ZERO": ModeErrorForDivisionByZero,
"TRADITIONAL": ModeTraditional,
"NO_AUTO_CREATE_USER": ModeNoAutoCreateUser,
"HIGH_NOT_PRECEDENCE": ModeHighNotPrecedence,
"NO_ENGINE_SUBSTITUTION": ModeNoEngineSubstitution,
"PAD_CHAR_TO_FULL_LENGTH": ModePadCharToFullLength,
"ALLOW_INVALID_DATES": ModeAllowInvalidDates,
}
// CombinationSQLMode is the special modes that provided as shorthand for combinations of mode values.
// See https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-combo.
var CombinationSQLMode = map[string][]string{
"ANSI": {"REAL_AS_FLOAT", "PIPES_AS_CONCAT", "ANSI_QUOTES", "IGNORE_SPACE", "ONLY_FULL_GROUP_BY"},
"DB2": {"PIPES_AS_CONCAT", "ANSI_QUOTES", "IGNORE_SPACE", "NO_KEY_OPTIONS", "NO_TABLE_OPTIONS", "NO_FIELD_OPTIONS"},
"MAXDB": {"PIPES_AS_CONCAT", "ANSI_QUOTES", "IGNORE_SPACE", "NO_KEY_OPTIONS", "NO_TABLE_OPTIONS", "NO_FIELD_OPTIONS", "NO_AUTO_CREATE_USER"},
"MSSQL": {"PIPES_AS_CONCAT", "ANSI_QUOTES", "IGNORE_SPACE", "NO_KEY_OPTIONS", "NO_TABLE_OPTIONS", "NO_FIELD_OPTIONS"},
"MYSQL323": {"MYSQL323", "HIGH_NOT_PRECEDENCE"},
"MYSQL40": {"MYSQL40", "HIGH_NOT_PRECEDENCE"},
"ORACLE": {"PIPES_AS_CONCAT", "ANSI_QUOTES", "IGNORE_SPACE", "NO_KEY_OPTIONS", "NO_TABLE_OPTIONS", "NO_FIELD_OPTIONS", "NO_AUTO_CREATE_USER"},
"POSTGRESQL": {"PIPES_AS_CONCAT", "ANSI_QUOTES", "IGNORE_SPACE", "NO_KEY_OPTIONS", "NO_TABLE_OPTIONS", "NO_FIELD_OPTIONS"},
"TRADITIONAL": {"STRICT_TRANS_TABLES", "STRICT_ALL_TABLES", "NO_ZERO_IN_DATE", "NO_ZERO_DATE", "ERROR_FOR_DIVISION_BY_ZERO", "NO_AUTO_CREATE_USER", "NO_ENGINE_SUBSTITUTION"},
}
// PriorityEnum is defined for Priority const values.
type PriorityEnum int
// Priority const values.
// See https://dev.mysql.com/doc/refman/5.7/en/insert.html
const (
NoPriority PriorityEnum = iota
LowPriority
HighPriority
DelayedPriority
)
// Priority2Str is used to convert the statement priority to string.
var Priority2Str = map[PriorityEnum]string{
NoPriority: "NO_PRIORITY",
LowPriority: "LOW_PRIORITY",
HighPriority: "HIGH_PRIORITY",
DelayedPriority: "DELAYED",
}
// Str2Priority is used to convert a string to a priority.
func Str2Priority(val string) PriorityEnum {
val = strings.ToUpper(val)
switch val {
case "NO_PRIORITY":
return NoPriority
case "HIGH_PRIORITY":
return HighPriority
case "LOW_PRIORITY":
return LowPriority
case "DELAYED":
return DelayedPriority
default:
return NoPriority
}
}
// Restore implements Node interface.
func (n *PriorityEnum) Restore(ctx *format.RestoreCtx) error {
switch *n {
case NoPriority:
return nil
case LowPriority:
ctx.WriteKeyWord("LOW_PRIORITY")
case HighPriority:
ctx.WriteKeyWord("HIGH_PRIORITY")
case DelayedPriority:
ctx.WriteKeyWord("DELAYED")
default:
return errors.Errorf("undefined PriorityEnum Type[%d]", *n)
}
return nil
}
const (
// PrimaryKeyName defines primary key name.
PrimaryKeyName = "PRIMARY"
// DefaultDecimal defines the default decimal value when the value out of range.
DefaultDecimal = "99999999999999999999999999999999999999999999999999999999999999999"
// PartitionCountLimit is limit of the number of partitions in a table.
// Reference linking https://dev.mysql.com/doc/refman/5.7/en/partitioning-limitations.html.
PartitionCountLimit = 8192
)
// This is enum_cursor_type in MySQL
const (
CursorTypeReadOnly = 1 << iota
CursorTypeForUpdate
CursorTypeScrollable
)
// ZlibCompressDefaultLevel is the zlib compression level for the compressed protocol
const ZlibCompressDefaultLevel = 6
const (
// CompressionNone is no compression in use
CompressionNone = iota
// CompressionZlib is zlib/deflate
CompressionZlib
// CompressionZstd is Facebook's Zstandard
CompressionZstd
)
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package mysql
// ErrMessage is a error message with the format specifier.
type ErrMessage struct {
Raw string
RedactArgPos []int
}
// Message creates a error message with the format specifier.
func Message(message string, redactArgs []int) *ErrMessage {
return &ErrMessage{Raw: message, RedactArgPos: redactArgs}
}
// MySQLErrName maps error code to MySQL error messages.
var MySQLErrName = map[uint16]*ErrMessage{
ErrHashchk: Message("hashchk", nil),
ErrNisamchk: Message("isamchk", nil),
ErrNo: Message("NO", nil),
ErrYes: Message("YES", nil),
ErrCantCreateFile: Message("Can't create file '%-.200s' (errno: %d - %s)", nil),
ErrCantCreateTable: Message("Can't create table '%-.200s' (errno: %d)", nil),
ErrCantCreateDB: Message("Can't create database '%-.192s' (errno: %d)", nil),
ErrDBCreateExists: Message("Can't create database '%-.192s'; database exists", nil),
ErrDBDropExists: Message("Can't drop database '%-.192s'; database doesn't exist", nil),
ErrDBDropDelete: Message("Error dropping database (can't delete '%-.192s', errno: %d)", nil),
ErrDBDropRmdir: Message("Error dropping database (can't rmdir '%-.192s', errno: %d)", nil),
ErrCantDeleteFile: Message("Error on delete of '%-.192s' (errno: %d - %s)", nil),
ErrCantFindSystemRec: Message("Can't read record in system table", nil),
ErrCantGetStat: Message("Can't get status of '%-.200s' (errno: %d - %s)", nil),
ErrCantGetWd: Message("Can't get working directory (errno: %d - %s)", nil),
ErrCantLock: Message("Can't lock file (errno: %d - %s)", nil),
ErrCantOpenFile: Message("Can't open file: '%-.200s' (errno: %d - %s)", nil),
ErrFileNotFound: Message("Can't find file: '%-.200s' (errno: %d - %s)", nil),
ErrCantReadDir: Message("Can't read dir of '%-.192s' (errno: %d - %s)", nil),
ErrCantSetWd: Message("Can't change dir to '%-.192s' (errno: %d - %s)", nil),
ErrCheckread: Message("Record has changed since last read in table '%-.192s'", nil),
ErrDiskFull: Message("Disk full (%s); waiting for someone to free some space... (errno: %d - %s)", nil),
ErrDupKey: Message("Can't write; duplicate key in table '%-.192s'", nil),
ErrErrorOnClose: Message("Error on close of '%-.192s' (errno: %d - %s)", nil),
ErrErrorOnRead: Message("Error reading file '%-.200s' (errno: %d - %s)", nil),
ErrErrorOnRename: Message("Error on rename of '%-.210s' to '%-.210s' (errno: %d - %s)", nil),
ErrErrorOnWrite: Message("Error writing file '%-.200s' (errno: %d - %s)", nil),
ErrFileUsed: Message("'%-.192s' is locked against change", nil),
ErrFilsortAbort: Message("Sort aborted", nil),
ErrFormNotFound: Message("View '%-.192s' doesn't exist for '%-.192s'", nil),
ErrGetErrno: Message("Got error %d from storage engine", nil),
ErrIllegalHa: Message("Table storage engine for '%-.192s' doesn't have this option", nil),
ErrKeyNotFound: Message("Can't find record in '%-.192s'", nil),
ErrNotFormFile: Message("Incorrect information in file: '%-.200s'", nil),
ErrNotKeyFile: Message("Incorrect key file for table '%-.200s'; try to repair it", nil),
ErrOldKeyFile: Message("Old key file for table '%-.192s'; repair it!", nil),
ErrOpenAsReadonly: Message("Table '%-.192s' is read only", nil),
ErrOutofMemory: Message("Out of memory; restart server and try again (needed %d bytes)", nil),
ErrOutOfSortMemory: Message("Out of sort memory, consider increasing server sort buffer size", nil),
ErrUnexpectedEOF: Message("Unexpected EOF found when reading file '%-.192s' (errno: %d - %s)", nil),
ErrConCount: Message("Too many connections", nil),
ErrOutOfResources: Message("Out of memory; check if mysqld or some other process uses all available memory; if not, you may have to use 'ulimit' to allow mysqld to use more memory or you can add more swap space", nil),
ErrBadHost: Message("Can't get hostname for your address", nil),
ErrHandshake: Message("Bad handshake", nil),
ErrDBaccessDenied: Message("Access denied for user '%-.48s'@'%-.64s' to database '%-.192s'", nil),
ErrAccessDenied: Message("Access denied for user '%-.48s'@'%-.64s' (using password: %s)", nil),
ErrNoDB: Message("No database selected", nil),
ErrUnknownCom: Message("Unknown command", nil),
ErrBadNull: Message("Column '%-.192s' cannot be null", nil),
ErrBadDB: Message("Unknown database '%-.192s'", nil),
ErrTableExists: Message("Table '%-.192s' already exists", nil),
ErrBadTable: Message("Unknown table '%-.100s'", nil),
ErrNonUniq: Message("Column '%-.192s' in %-.192s is ambiguous", nil),
ErrServerShutdown: Message("Server shutdown in progress", nil),
ErrBadField: Message("Unknown column '%-.192s' in '%-.192s'", nil),
ErrFieldNotInGroupBy: Message("Expression #%d of %s is not in GROUP BY clause and contains nonaggregated column '%s' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by", nil),
ErrWrongGroupField: Message("Can't group on '%-.192s'", nil),
ErrWrongSumSelect: Message("Statement has sum functions and columns in same statement", nil),
ErrWrongValueCount: Message("Column count doesn't match value count", nil),
ErrTooLongIdent: Message("Identifier name '%-.100s' is too long", nil),
ErrDupFieldName: Message("Duplicate column name '%-.192s'", nil),
ErrDupKeyName: Message("Duplicate key name '%-.192s'", nil),
ErrDupEntry: Message("Duplicate entry '%-.64s' for key '%-.192s'", nil),
ErrWrongFieldSpec: Message("Incorrect column specifier for column '%-.192s'", nil),
ErrParse: Message("%s %s", nil),
ErrEmptyQuery: Message("Query was empty", nil),
ErrNonuniqTable: Message("Not unique table/alias: '%-.192s'", nil),
ErrInvalidDefault: Message("Invalid default value for '%-.192s'", nil),
ErrMultiplePriKey: Message("Multiple primary key defined", nil),
ErrTooManyKeys: Message("Too many keys specified; max %d keys allowed", nil),
ErrTooManyKeyParts: Message("Too many key parts specified; max %d parts allowed", nil),
ErrTooLongKey: Message("Specified key was too long (%d bytes); max key length is %d bytes", nil),
ErrKeyColumnDoesNotExits: Message("Key column '%-.192s' doesn't exist in table", nil),
ErrBlobUsedAsKey: Message("BLOB column '%-.192s' can't be used in key specification with the used table type", nil),
ErrJSONVacuousPath: Message("The path expression '$' is not allowed in this context.", nil),
ErrJSONBadOneOrAllArg: Message("The oneOrAll argument to %s may take these values: 'one' or 'all'.", nil),
ErrTooBigFieldlength: Message("Column length too big for column '%-.192s' (max = %d); use BLOB or TEXT instead", nil),
ErrWrongAutoKey: Message("Incorrect table definition; there can be only one auto column and it must be defined as a key", nil),
ErrReady: Message("%s: ready for connections.\nVersion: '%s' socket: '%s' port: %d", nil),
ErrNormalShutdown: Message("%s: Normal shutdown\n", nil),
ErrGotSignal: Message("%s: Got signal %d. Aborting!\n", nil),
ErrShutdownComplete: Message("%s: Shutdown complete\n", nil),
ErrForcingClose: Message("%s: Forcing close of thread %d user: '%-.48s'\n", nil),
ErrIpsock: Message("Can't create IP socket", nil),
ErrNoSuchIndex: Message("Table '%-.192s' has no index like the one used in CREATE INDEX; recreate the table", nil),
ErrWrongFieldTerminators: Message("Field separator argument is not what is expected; check the manual", nil),
ErrBlobsAndNoTerminated: Message("You can't use fixed rowlength with BLOBs; please use 'fields terminated by'", nil),
ErrTextFileNotReadable: Message("The file '%-.128s' must be in the database directory or be readable by all", nil),
ErrFileExists: Message("File '%-.200s' already exists", nil),
ErrLoadInfo: Message("Records: %d Deleted: %d Skipped: %d Warnings: %d", nil),
ErrAlterInfo: Message("Records: %d Duplicates: %d", nil),
ErrWrongSubKey: Message("Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys", nil),
ErrCantRemoveAllFields: Message("You can't delete all columns with ALTER TABLE; use DROP TABLE instead", nil),
ErrCantDropFieldOrKey: Message("Can't DROP '%-.192s'; check that column/key exists", nil),
ErrInsertInfo: Message("Records: %d Duplicates: %d Warnings: %d", nil),
ErrUpdateTableUsed: Message("You can't specify target table '%-.192s' for update in FROM clause", nil),
ErrNoSuchThread: Message("Unknown thread id: %d", nil),
ErrKillDenied: Message("You are not owner of thread %d", nil),
ErrNoTablesUsed: Message("No tables used", nil),
ErrTooBigSet: Message("Too many strings for column %-.192s and SET", nil),
ErrNoUniqueLogFile: Message("Can't generate a unique log-filename %-.200s.(1-999)\n", nil),
ErrTableNotLockedForWrite: Message("Table '%-.192s' was locked with a READ lock and can't be updated", nil),
ErrTableNotLocked: Message("Table '%-.192s' was not locked with LOCK TABLES", nil),
ErrBlobCantHaveDefault: Message("BLOB/TEXT/JSON column '%-.192s' can't have a default value", nil),
ErrWrongDBName: Message("Incorrect database name '%-.100s'", nil),
ErrWrongTableName: Message("Incorrect table name '%-.100s'", nil),
ErrTooBigSelect: Message("The SELECT would examine more than MAXJOINSIZE rows; check your WHERE and use SET SQLBIGSELECTS=1 or SET MAXJOINSIZE=# if the SELECT is okay", nil),
ErrUnknown: Message("Unknown error", nil),
ErrUnknownProcedure: Message("Unknown procedure '%-.192s'", nil),
ErrWrongParamcountToProcedure: Message("Incorrect parameter count to procedure '%-.192s'", nil),
ErrWrongParametersToProcedure: Message("Incorrect parameters to procedure '%-.192s'", nil),
ErrUnknownTable: Message("Unknown table '%-.192s' in %-.32s", nil),
ErrFieldSpecifiedTwice: Message("Column '%-.192s' specified twice", nil),
ErrInvalidGroupFuncUse: Message("Invalid use of group function", nil),
ErrUnsupportedExtension: Message("Table '%-.192s' uses an extension that doesn't exist in this MySQL version", nil),
ErrTableMustHaveColumns: Message("A table must have at least 1 column", nil),
ErrRecordFileFull: Message("The table '%-.192s' is full", nil),
ErrUnknownCharacterSet: Message("Unknown character set: '%-.64s'", nil),
ErrTooManyTables: Message("Too many tables; MySQL can only use %d tables in a join", nil),
ErrTooManyFields: Message("Too many columns", nil),
ErrTooBigRowsize: Message("Row size too large. The maximum row size for the used table type, not counting BLOBs, is %d. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs", nil),
ErrStackOverrun: Message("Thread stack overrun: Used: %d of a %d stack. Use 'mysqld --threadStack=#' to specify a bigger stack if needed", nil),
ErrWrongOuterJoin: Message("Cross dependency found in OUTER JOIN; examine your ON conditions", nil),
ErrNullColumnInIndex: Message("Table handler doesn't support NULL in given index. Please change column '%-.192s' to be NOT NULL or use another handler", nil),
ErrCantFindUdf: Message("Can't load function '%-.192s'", nil),
ErrCantInitializeUdf: Message("Can't initialize function '%-.192s'; %-.80s", nil),
ErrUdfNoPaths: Message("No paths allowed for shared library", nil),
ErrUdfExists: Message("Function '%-.192s' already exists", nil),
ErrCantOpenLibrary: Message("Can't open shared library '%-.192s' (errno: %d %-.128s)", nil),
ErrCantFindDlEntry: Message("Can't find symbol '%-.128s' in library", nil),
ErrFunctionNotDefined: Message("Function '%-.192s' is not defined", nil),
ErrHostIsBlocked: Message("Host '%-.64s' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'", nil),
ErrHostNotPrivileged: Message("Host '%-.64s' is not allowed to connect to this MySQL server", nil),
ErrPasswordAnonymousUser: Message("You are using MySQL as an anonymous user and anonymous users are not allowed to change passwords", nil),
ErrPasswordNotAllowed: Message("You must have privileges to update tables in the mysql database to be able to change passwords for others", nil),
ErrPasswordNoMatch: Message("Can't find any matching row in the user table", nil),
ErrUpdateInfo: Message("Rows matched: %d Changed: %d Warnings: %d", nil),
ErrCantCreateThread: Message("Can't create a new thread (errno %d); if you are not out of available memory, you can consult the manual for a possible OS-dependent bug", nil),
ErrWrongValueCountOnRow: Message("Column count doesn't match value count at row %d", nil),
ErrCantReopenTable: Message("Can't reopen table: '%-.192s'", nil),
ErrInvalidUseOfNull: Message("Invalid use of NULL value", nil),
ErrRegexp: Message("Got error '%-.64s' from regexp", nil),
ErrMixOfGroupFuncAndFields: Message("Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause", nil),
ErrNonexistingGrant: Message("There is no such grant defined for user '%-.48s' on host '%-.64s'", nil),
ErrTableaccessDenied: Message("%-.128s command denied to user '%-.48s'@'%-.64s' for table '%-.64s'", nil),
ErrColumnaccessDenied: Message("%-.16s command denied to user '%-.48s'@'%-.64s' for column '%-.192s' in table '%-.192s'", nil),
ErrIllegalGrantForTable: Message("Illegal GRANT/REVOKE command; please consult the manual to see which privileges can be used", nil),
ErrGrantWrongHostOrUser: Message("The host or user argument to GRANT is too long", nil),
ErrNoSuchTable: Message("Table '%-.192s.%-.192s' doesn't exist", nil),
ErrNonexistingTableGrant: Message("There is no such grant defined for user '%-.48s' on host '%-.64s' on table '%-.192s'", nil),
ErrNotAllowedCommand: Message("The used command is not allowed with this MySQL version", nil),
ErrSyntax: Message("You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use", nil),
ErrDelayedCantChangeLock: Message("Delayed insert thread couldn't get requested lock for table %-.192s", nil),
ErrTooManyDelayedThreads: Message("Too many delayed threads in use", nil),
ErrAbortingConnection: Message("Aborted connection %d to db: '%-.192s' user: '%-.48s' (%-.64s)", nil),
ErrNetPacketTooLarge: Message("Got a packet bigger than 'max_allowed_packet' bytes", nil),
ErrNetReadErrorFromPipe: Message("Got a read error from the connection pipe", nil),
ErrNetFcntl: Message("Got an error from fcntl()", nil),
ErrNetPacketsOutOfOrder: Message("Got packets out of order", nil),
ErrNetUncompress: Message("Couldn't uncompress communication packet", nil),
ErrNetRead: Message("Got an error reading communication packets", nil),
ErrNetReadInterrupted: Message("Got timeout reading communication packets", nil),
ErrNetErrorOnWrite: Message("Got an error writing communication packets", nil),
ErrNetWriteInterrupted: Message("Got timeout writing communication packets", nil),
ErrTooLongString: Message("Result string is longer than 'maxAllowedPacket' bytes", nil),
ErrTableCantHandleBlob: Message("The used table type doesn't support BLOB/TEXT columns", nil),
ErrTableCantHandleAutoIncrement: Message("The used table type doesn't support AUTOINCREMENT columns", nil),
ErrDelayedInsertTableLocked: Message("INSERT DELAYED can't be used with table '%-.192s' because it is locked with LOCK TABLES", nil),
ErrWrongColumnName: Message("Incorrect column name '%-.100s'", nil),
ErrWrongKeyColumn: Message("The used storage engine can't index column '%-.192s'", nil),
ErrWrongMrgTable: Message("Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist", nil),
ErrDupUnique: Message("Can't write, because of unique constraint, to table '%-.192s'", nil),
ErrBlobKeyWithoutLength: Message("BLOB/TEXT column '%-.192s' used in key specification without a key length", nil),
ErrPrimaryCantHaveNull: Message("All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead", nil),
ErrTooManyRows: Message("Result consisted of more than one row", nil),
ErrRequiresPrimaryKey: Message("This table type requires a primary key", nil),
ErrNoRaidCompiled: Message("This version of MySQL is not compiled with RAID support", nil),
ErrUpdateWithoutKeyInSafeMode: Message("You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column", nil),
ErrKeyDoesNotExist: Message("Key '%-.192s' doesn't exist in table '%-.192s'", nil),
ErrCheckNoSuchTable: Message("Can't open table", nil),
ErrCheckNotImplemented: Message("The storage engine for the table doesn't support %s", nil),
ErrCantDoThisDuringAnTransaction: Message("You are not allowed to execute this command in a transaction", nil),
ErrErrorDuringCommit: Message("Got error %d during COMMIT", nil),
ErrErrorDuringRollback: Message("Got error %d during ROLLBACK", nil),
ErrErrorDuringFlushLogs: Message("Got error %d during FLUSHLOGS", nil),
ErrErrorDuringCheckpoint: Message("Got error %d during CHECKPOINT", nil),
ErrNewAbortingConnection: Message("Aborted connection %d to db: '%-.192s' user: '%-.48s' host: '%-.64s' (%-.64s)", nil),
ErrDumpNotImplemented: Message("The storage engine for the table does not support binary table dump", nil),
ErrFlushMasterBinlogClosed: Message("Binlog closed, cannot RESET MASTER", nil),
ErrIndexRebuild: Message("Failed rebuilding the index of dumped table '%-.192s'", nil),
ErrMaster: Message("Error from master: '%-.64s'", nil),
ErrMasterNetRead: Message("Net error reading from master", nil),
ErrMasterNetWrite: Message("Net error writing to master", nil),
ErrFtMatchingKeyNotFound: Message("Can't find FULLTEXT index matching the column list", nil),
ErrLockOrActiveTransaction: Message("Can't execute the given command because you have active locked tables or an active transaction", nil),
ErrUnknownSystemVariable: Message("Unknown system variable '%-.64s'", nil),
ErrCrashedOnUsage: Message("Table '%-.192s' is marked as crashed and should be repaired", nil),
ErrCrashedOnRepair: Message("Table '%-.192s' is marked as crashed and last (automatic?) repair failed", nil),
ErrWarningNotCompleteRollback: Message("Some non-transactional changed tables couldn't be rolled back", nil),
ErrTransCacheFull: Message("Multi-statement transaction required more than 'maxBinlogCacheSize' bytes of storage; increase this mysqld variable and try again", nil),
ErrSlaveMustStop: Message("This operation cannot be performed with a running slave; run STOP SLAVE first", nil),
ErrSlaveNotRunning: Message("This operation requires a running slave; configure slave and do START SLAVE", nil),
ErrBadSlave: Message("The server is not configured as slave; fix in config file or with CHANGE MASTER TO", nil),
ErrMasterInfo: Message("Could not initialize master info structure; more error messages can be found in the MySQL error log", nil),
ErrSlaveThread: Message("Could not create slave thread; check system resources", nil),
ErrTooManyUserConnections: Message("User %-.64s already has more than 'maxUserConnections' active connections", nil),
ErrSetConstantsOnly: Message("You may only use constant expressions with SET", nil),
ErrLockWaitTimeout: Message("Lock wait timeout exceeded; try restarting transaction", nil),
ErrLockTableFull: Message("The total number of locks exceeds the lock table size", nil),
ErrReadOnlyTransaction: Message("Update locks cannot be acquired during a READ UNCOMMITTED transaction", nil),
ErrDropDBWithReadLock: Message("DROP DATABASE not allowed while thread is holding global read lock", nil),
ErrCreateDBWithReadLock: Message("CREATE DATABASE not allowed while thread is holding global read lock", nil),
ErrWrongArguments: Message("Incorrect arguments to %s", nil),
ErrNoPermissionToCreateUser: Message("'%-.48s'@'%-.64s' is not allowed to create new users", nil),
ErrUnionTablesInDifferentDir: Message("Incorrect table definition; all MERGE tables must be in the same database", nil),
ErrLockDeadlock: Message("Deadlock found when trying to get lock; try restarting transaction", nil),
ErrTableCantHandleFt: Message("The used table type doesn't support FULLTEXT indexes", nil),
ErrCannotAddForeign: Message("Cannot add foreign key constraint", nil),
ErrNoReferencedRow: Message("Cannot add or update a child row: a foreign key constraint fails", nil),
ErrRowIsReferenced: Message("Cannot delete or update a parent row: a foreign key constraint fails", nil),
ErrConnectToMaster: Message("Error connecting to master: %-.128s", nil),
ErrQueryOnMaster: Message("Error running query on master: %-.128s", nil),
ErrErrorWhenExecutingCommand: Message("Error when executing command %s: %-.128s", nil),
ErrWrongUsage: Message("Incorrect usage of %s and %s", nil),
ErrWrongNumberOfColumnsInSelect: Message("The used SELECT statements have a different number of columns", nil),
ErrCantUpdateWithReadlock: Message("Can't execute the query because you have a conflicting read lock", nil),
ErrMixingNotAllowed: Message("Mixing of transactional and non-transactional tables is disabled", nil),
ErrDupArgument: Message("Option '%s' used twice in statement", nil),
ErrUserLimitReached: Message("User '%-.64s' has exceeded the '%s' resource (current value: %d)", nil),
ErrSpecificAccessDenied: Message("Access denied; you need (at least one of) the %-.128s privilege(s) for this operation", nil),
ErrLocalVariable: Message("Variable '%-.64s' is a SESSION variable and can't be used with SET GLOBAL", nil),
ErrGlobalVariable: Message("Variable '%-.64s' is a GLOBAL variable and should be set with SET GLOBAL", nil),
ErrNoDefault: Message("Variable '%-.64s' doesn't have a default value", nil),
ErrWrongValueForVar: Message("Variable '%-.64s' can't be set to the value of '%-.200s'", nil),
ErrWrongTypeForVar: Message("Incorrect argument type to variable '%-.64s'", nil),
ErrVarCantBeRead: Message("Variable '%-.64s' can only be set, not read", nil),
ErrCantUseOptionHere: Message("Incorrect usage/placement of '%s'", nil),
ErrNotSupportedYet: Message("This version of TiDB doesn't yet support '%s'", nil),
ErrMasterFatalErrorReadingBinlog: Message("Got fatal error %d from master when reading data from binary log: '%-.320s'", nil),
ErrSlaveIgnoredTable: Message("Slave SQL thread ignored the query because of replicate-*-table rules", nil),
ErrIncorrectGlobalLocalVar: Message("Variable '%-.192s' is a %s variable", nil),
ErrWrongFkDef: Message("Incorrect foreign key definition for '%-.192s': %s", nil),
ErrKeyRefDoNotMatchTableRef: Message("Key reference and table reference don't match", nil),
ErrOperandColumns: Message("Operand should contain %d column(s)", nil),
ErrSubqueryNo1Row: Message("Subquery returns more than 1 row", nil),
ErrUnknownStmtHandler: Message("Unknown prepared statement handler %s given to %s", nil),
ErrCorruptHelpDB: Message("Help database is corrupt or does not exist", nil),
ErrCyclicReference: Message("Cyclic reference on subqueries", nil),
ErrAutoConvert: Message("Converting column '%s' from %s to %s", nil),
ErrIllegalReference: Message("Reference '%-.64s' not supported (%s)", nil),
ErrDerivedMustHaveAlias: Message("Every derived table must have its own alias", nil),
ErrSelectReduced: Message("Select %d was reduced during optimization", nil),
ErrTablenameNotAllowedHere: Message("Table '%s' from one of the %ss cannot be used in %s", nil),
ErrNotSupportedAuthMode: Message("Client does not support authentication protocol requested by server; consider upgrading MySQL client", nil),
ErrSpatialCantHaveNull: Message("All parts of a SPATIAL index must be NOT NULL", nil),
ErrCollationCharsetMismatch: Message("COLLATION '%s' is not valid for CHARACTER SET '%s'", nil),
ErrSlaveWasRunning: Message("Slave is already running", nil),
ErrSlaveWasNotRunning: Message("Slave already has been stopped", nil),
ErrTooBigForUncompress: Message("Uncompressed data size too large; the maximum size is %d (probably, length of uncompressed data was corrupted)", nil),
ErrZlibZMem: Message("ZLIB: Not enough memory", nil),
ErrZlibZBuf: Message("ZLIB: Not enough room in the output buffer (probably, length of uncompressed data was corrupted)", nil),
ErrZlibZData: Message("ZLIB: Input data corrupted", nil),
ErrCutValueGroupConcat: Message("Some rows were cut by GROUPCONCAT(%s)", nil),
ErrWarnTooFewRecords: Message("Row %d doesn't contain data for all columns", nil),
ErrWarnTooManyRecords: Message("Row %d was truncated; it contained more data than there were input columns", nil),
ErrWarnNullToNotnull: Message("Column set to default value; NULL supplied to NOT NULL column '%s' at row %d", nil),
ErrWarnDataOutOfRange: Message("Out of range value for column '%s' at row %d", nil),
WarnDataTruncated: Message("Data truncated for column '%s' at row %d", nil),
ErrWarnUsingOtherHandler: Message("Using storage engine %s for table '%s'", nil),
ErrCantAggregate2collations: Message("Illegal mix of collations (%s,%s) and (%s,%s) for operation '%s'", nil),
ErrDropUser: Message("Cannot drop one or more of the requested users", nil),
ErrRevokeGrants: Message("Can't revoke all privileges for one or more of the requested users", nil),
ErrCantAggregate3collations: Message("Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'", nil),
ErrCantAggregateNcollations: Message("Illegal mix of collations for operation '%s'", nil),
ErrVariableIsNotStruct: Message("Variable '%-.64s' is not a variable component (can't be used as XXXX.variableName)", nil),
ErrUnknownCollation: Message("Unknown collation: '%-.64s'", nil),
ErrSlaveIgnoredSslParams: Message("SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later if MySQL slave with SSL is started", nil),
ErrServerIsInSecureAuthMode: Message("Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format", nil),
ErrWarnFieldResolved: Message("Field or reference '%-.192s%s%-.192s%s%-.192s' of SELECT #%d was resolved in SELECT #%d", nil),
ErrBadSlaveUntilCond: Message("Incorrect parameter or combination of parameters for START SLAVE UNTIL", nil),
ErrMissingSkipSlave: Message("It is recommended to use --skip-slave-start when doing step-by-step replication with START SLAVE UNTIL; otherwise, you will get problems if you get an unexpected slave's mysqld restart", nil),
ErrUntilCondIgnored: Message("SQL thread is not to be started so UNTIL options are ignored", nil),
ErrWrongNameForIndex: Message("Incorrect index name '%-.100s'", nil),
ErrWrongNameForCatalog: Message("Incorrect catalog name '%-.100s'", nil),
ErrWarnQcResize: Message("Query cache failed to set size %d; new query cache size is %d", nil),
ErrBadFtColumn: Message("Column '%-.192s' cannot be part of FULLTEXT index", nil),
ErrUnknownKeyCache: Message("Unknown key cache '%-.100s'", nil),
ErrWarnHostnameWontWork: Message("MySQL is started in --skip-name-resolve mode; you must restart it without this switch for this grant to work", nil),
ErrUnknownStorageEngine: Message("Unknown storage engine '%s'", nil),
ErrWarnDeprecatedSyntax: Message("'%s' is deprecated and will be removed in a future release. Please use %s instead", nil),
ErrNonUpdatableTable: Message("The target table %-.100s of the %s is not updatable", nil),
ErrFeatureDisabled: Message("The '%s' feature is disabled; you need MySQL built with '%s' to have it working", nil),
ErrOptionPreventsStatement: Message("The MySQL server is running with the %s option so it cannot execute this statement", nil),
ErrDuplicatedValueInType: Message("Column '%-.100s' has duplicated value '%-.64s' in %s", nil),
ErrTruncatedWrongValue: Message("Truncated incorrect %-.64s value: '%-.128s'", nil),
ErrTooMuchAutoTimestampCols: Message("Incorrect table definition; there can be only one TIMESTAMP column with CURRENTTIMESTAMP in DEFAULT or ON UPDATE clause", nil),
ErrInvalidOnUpdate: Message("Invalid ON UPDATE clause for '%-.192s' column", nil),
ErrUnsupportedPs: Message("This command is not supported in the prepared statement protocol yet", nil),
ErrGetErrmsg: Message("Got error %d '%-.100s' from %s", nil),
ErrGetTemporaryErrmsg: Message("Got temporary error %d '%-.100s' from %s", nil),
ErrUnknownTimeZone: Message("Unknown or incorrect time zone: '%-.64s'", nil),
ErrWarnInvalidTimestamp: Message("Invalid TIMESTAMP value in column '%s' at row %d", nil),
ErrInvalidCharacterString: Message("Invalid %s character string: '%.64s'", nil),
ErrWarnAllowedPacketOverflowed: Message("Result of %s() was larger than max_allowed_packet (%d) - truncated", nil),
ErrConflictingDeclarations: Message("Conflicting declarations: '%s%s' and '%s%s'", nil),
ErrSpNoRecursiveCreate: Message("Can't create a %s from within another stored routine", nil),
ErrSpAlreadyExists: Message("%s %s already exists", nil),
ErrSpDoesNotExist: Message("%s %s does not exist", nil),
ErrSpDropFailed: Message("Failed to DROP %s %s", nil),
ErrSpStoreFailed: Message("Failed to CREATE %s %s", nil),
ErrSpLilabelMismatch: Message("%s with no matching label: %s", nil),
ErrSpLabelRedefine: Message("Redefining label %s", nil),
ErrSpLabelMismatch: Message("End-label %s without match", nil),
ErrSpUninitVar: Message("Referring to uninitialized variable %s", nil),
ErrSpBadselect: Message("PROCEDURE %s can't return a result set in the given context", nil),
ErrSpBadreturn: Message("RETURN is only allowed in a FUNCTION", nil),
ErrSpBadstatement: Message("%s is not allowed in stored procedures", nil),
ErrUpdateLogDeprecatedIgnored: Message("The update log is deprecated and replaced by the binary log; SET SQLLOGUPDATE has been ignored.", nil),
ErrUpdateLogDeprecatedTranslated: Message("The update log is deprecated and replaced by the binary log; SET SQLLOGUPDATE has been translated to SET SQLLOGBIN.", nil),
ErrQueryInterrupted: Message("Query execution was interrupted", nil),
ErrSpWrongNoOfArgs: Message("Incorrect number of arguments for %s %s; expected %d, got %d", nil),
ErrSpCondMismatch: Message("Undefined CONDITION: %s", nil),
ErrSpNoreturn: Message("No RETURN found in FUNCTION %s", nil),
ErrSpNoreturnend: Message("FUNCTION %s ended without RETURN", nil),
ErrSpBadCursorQuery: Message("Cursor statement must be a SELECT", nil),
ErrSpBadCursorSelect: Message("Cursor SELECT must not have INTO", nil),
ErrSpCursorMismatch: Message("Undefined CURSOR: %s", nil),
ErrSpCursorAlreadyOpen: Message("Cursor is already open", nil),
ErrSpCursorNotOpen: Message("Cursor is not open", nil),
ErrSpUndeclaredVar: Message("Undeclared variable: %s", nil),
ErrSpWrongNoOfFetchArgs: Message("Incorrect number of FETCH variables", nil),
ErrSpFetchNoData: Message("No data - zero rows fetched, selected, or processed", nil),
ErrSpDupParam: Message("Duplicate parameter: %s", nil),
ErrSpDupVar: Message("Duplicate variable: %s", nil),
ErrSpDupCond: Message("Duplicate condition: %s", nil),
ErrSpDupCurs: Message("Duplicate cursor: %s", nil),
ErrSpCantAlter: Message("Failed to ALTER %s %s", nil),
ErrSpSubselectNyi: Message("Subquery value not supported", nil),
ErrStmtNotAllowedInSfOrTrg: Message("%s is not allowed in stored function or trigger", nil),
ErrSpVarcondAfterCurshndlr: Message("Variable or condition declaration after cursor or handler declaration", nil),
ErrSpCursorAfterHandler: Message("Cursor declaration after handler declaration", nil),
ErrSpCaseNotFound: Message("Case not found for CASE statement", nil),
ErrFparserTooBigFile: Message("Configuration file '%-.192s' is too big", nil),
ErrFparserBadHeader: Message("Malformed file type header in file '%-.192s'", nil),
ErrFparserEOFInComment: Message("Unexpected end of file while parsing comment '%-.200s'", nil),
ErrFparserErrorInParameter: Message("Error while parsing parameter '%-.192s' (line: '%-.192s')", nil),
ErrFparserEOFInUnknownParameter: Message("Unexpected end of file while skipping unknown parameter '%-.192s'", nil),
ErrViewNoExplain: Message("EXPLAIN/SHOW can not be issued; lacking privileges for underlying table", nil),
ErrFrmUnknownType: Message("File '%-.192s' has unknown type '%-.64s' in its header", nil),
ErrWrongObject: Message("'%-.192s.%-.192s' is not %s", nil),
ErrNonupdateableColumn: Message("Column '%-.192s' is not updatable", nil),
ErrViewSelectDerived: Message("View's SELECT contains a subquery in the FROM clause", nil),
ErrViewSelectClause: Message("View's SELECT contains a '%s' clause", nil),
ErrViewSelectVariable: Message("View's SELECT contains a variable or parameter", nil),
ErrViewSelectTmptable: Message("View's SELECT refers to a temporary table '%-.192s'", nil),
ErrViewWrongList: Message("View's SELECT and view's field list have different column counts", nil),
ErrWarnViewMerge: Message("View merge algorithm can't be used here for now (assumed undefined algorithm)", nil),
ErrWarnViewWithoutKey: Message("View being updated does not have complete key of underlying table in it", nil),
ErrViewInvalid: Message("View '%-.192s.%-.192s' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them", nil),
ErrSpNoDropSp: Message("Can't drop or alter a %s from within another stored routine", nil),
ErrSpGotoInHndlr: Message("GOTO is not allowed in a stored procedure handler", nil),
ErrTrgAlreadyExists: Message("Trigger already exists", nil),
ErrTrgDoesNotExist: Message("Trigger does not exist", nil),
ErrTrgOnViewOrTempTable: Message("Trigger's '%-.192s' is view or temporary table", nil),
ErrTrgCantChangeRow: Message("Updating of %s row is not allowed in %strigger", nil),
ErrTrgNoSuchRowInTrg: Message("There is no %s row in %s trigger", nil),
ErrNoDefaultForField: Message("Field '%-.192s' doesn't have a default value", nil),
ErrDivisionByZero: Message("Division by 0", nil),
ErrTruncatedWrongValueForField: Message("Incorrect %-.32s value: '%-.128s' for column '%.192s' at row %d", nil),
ErrIllegalValueForType: Message("Illegal %s '%-.192s' value found during parsing", nil),
ErrViewNonupdCheck: Message("CHECK OPTION on non-updatable view '%-.192s.%-.192s'", nil),
ErrViewCheckFailed: Message("CHECK OPTION failed '%-.192s.%-.192s'", nil),
ErrProcaccessDenied: Message("%-.16s command denied to user '%-.48s'@'%-.64s' for routine '%-.192s'", nil),
ErrRelayLogFail: Message("Failed purging old relay logs: %s", nil),
ErrPasswdLength: Message("Password hash should be a %d-digit hexadecimal number", nil),
ErrUnknownTargetBinlog: Message("Target log not found in binlog index", nil),
ErrIoErrLogIndexRead: Message("I/O error reading log index file", nil),
ErrBinlogPurgeProhibited: Message("Server configuration does not permit binlog purge", nil),
ErrFseekFail: Message("Failed on fseek()", nil),
ErrBinlogPurgeFatalErr: Message("Fatal error during log purge", nil),
ErrLogInUse: Message("A purgeable log is in use, will not purge", nil),
ErrLogPurgeUnknownErr: Message("Unknown error during log purge", nil),
ErrRelayLogInit: Message("Failed initializing relay log position: %s", nil),
ErrNoBinaryLogging: Message("You are not using binary logging", nil),
ErrReservedSyntax: Message("The '%-.64s' syntax is reserved for purposes internal to the MySQL server", nil),
ErrWsasFailed: Message("WSAStartup Failed", nil),
ErrDiffGroupsProc: Message("Can't handle procedures with different groups yet", nil),
ErrNoGroupForProc: Message("Select must have a group with this procedure", nil),
ErrOrderWithProc: Message("Can't use ORDER clause with this procedure", nil),
ErrLoggingProhibitChangingOf: Message("Binary logging and replication forbid changing the global server %s", nil),
ErrNoFileMapping: Message("Can't map file: %-.200s, errno: %d", nil),
ErrWrongMagic: Message("Wrong magic in %-.64s", nil),
ErrPsManyParam: Message("Prepared statement contains too many placeholders", nil),
ErrKeyPart0: Message("Key part '%-.192s' length cannot be 0", nil),
ErrViewChecksum: Message("View text checksum failed", nil),
ErrViewMultiupdate: Message("Can not modify more than one base table through a join view '%-.192s.%-.192s'", nil),
ErrViewNoInsertFieldList: Message("Can not insert into join view '%-.192s.%-.192s' without fields list", nil),
ErrViewDeleteMergeView: Message("Can not delete from join view '%-.192s.%-.192s'", nil),
ErrCannotUser: Message("Operation %s failed for %.256s", nil),
ErrXaerNota: Message("XAERNOTA: Unknown XID", nil),
ErrXaerInval: Message("XAERINVAL: Invalid arguments (or unsupported command)", nil),
ErrXaerRmfail: Message("XAERRMFAIL: The command cannot be executed when global transaction is in the %.64s state", nil),
ErrXaerOutside: Message("XAEROUTSIDE: Some work is done outside global transaction", nil),
ErrXaerRmerr: Message("XAERRMERR: Fatal error occurred in the transaction branch - check your data for consistency", nil),
ErrXaRbrollback: Message("XARBROLLBACK: Transaction branch was rolled back", nil),
ErrNonexistingProcGrant: Message("There is no such grant defined for user '%-.48s' on host '%-.64s' on routine '%-.192s'", nil),
ErrProcAutoGrantFail: Message("Failed to grant EXECUTE and ALTER ROUTINE privileges", nil),
ErrProcAutoRevokeFail: Message("Failed to revoke all privileges to dropped routine", nil),
ErrDataTooLong: Message("Data too long for column '%s' at row %d", nil),
ErrSpBadSQLstate: Message("Bad SQLSTATE: '%s'", nil),
ErrStartup: Message("%s: ready for connections.\nVersion: '%s' socket: '%s' port: %d %s", nil),
ErrLoadFromFixedSizeRowsToVar: Message("Can't load value from file with fixed size rows to variable", nil),
ErrCantCreateUserWithGrant: Message("You are not allowed to create a user with GRANT", nil),
ErrWrongValueForType: Message("Incorrect %-.32s value: '%-.128s' for function %-.32s", nil),
ErrTableDefChanged: Message("Table definition has changed, please retry transaction", nil),
ErrSpDupHandler: Message("Duplicate handler declared in the same block", nil),
ErrSpNotVarArg: Message("OUT or INOUT argument %d for routine %s is not a variable or NEW pseudo-variable in BEFORE trigger", nil),
ErrSpNoRetset: Message("Not allowed to return a result set from a %s", nil),
ErrCantCreateGeometryObject: Message("Cannot get geometry object from data you send to the GEOMETRY field", nil),
ErrFailedRoutineBreakBinlog: Message("A routine failed and has neither NO SQL nor READS SQL DATA in its declaration and binary logging is enabled; if non-transactional tables were updated, the binary log will miss their changes", nil),
ErrBinlogUnsafeRoutine: Message("This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe logBinTrustFunctionCreators variable)", nil),
ErrBinlogCreateRoutineNeedSuper: Message("You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe logBinTrustFunctionCreators variable)", nil),
ErrExecStmtWithOpenCursor: Message("You can't execute a prepared statement which has an open cursor associated with it. Reset the statement to re-execute it.", nil),
ErrStmtHasNoOpenCursor: Message("The statement (%d) has no open cursor.", nil),
ErrCommitNotAllowedInSfOrTrg: Message("Explicit or implicit commit is not allowed in stored function or trigger.", nil),
ErrNoDefaultForViewField: Message("Field of view '%-.192s.%-.192s' underlying table doesn't have a default value", nil),
ErrSpNoRecursion: Message("Recursive stored functions and triggers are not allowed.", nil),
ErrTooBigScale: Message("Too big scale %d specified for column '%-.192s'. Maximum is %d.", nil),
ErrTooBigPrecision: Message("Too-big precision %d specified for '%-.192s'. Maximum is %d.", nil),
ErrMBiggerThanD: Message("For float(M,D), double(M,D) or decimal(M,D), M must be >= D (column '%-.192s').", nil),
ErrWrongLockOfSystemTable: Message("You can't combine write-locking of system tables with other tables or lock types", nil),
ErrConnectToForeignDataSource: Message("Unable to connect to foreign data source: %.64s", nil),
ErrQueryOnForeignDataSource: Message("There was a problem processing the query on the foreign data source. Data source : %-.64s", nil),
ErrForeignDataSourceDoesntExist: Message("The foreign data source you are trying to reference does not exist. Data source : %-.64s", nil),
ErrForeignDataStringInvalidCantCreate: Message("Can't create federated table. The data source connection string '%-.64s' is not in the correct format", nil),
ErrForeignDataStringInvalid: Message("The data source connection string '%-.64s' is not in the correct format", nil),
ErrCantCreateFederatedTable: Message("Can't create federated table. Foreign data src : %-.64s", nil),
ErrTrgInWrongSchema: Message("Trigger in wrong schema", nil),
ErrStackOverrunNeedMore: Message("Thread stack overrun: %d bytes used of a %d byte stack, and %d bytes needed. Use 'mysqld --threadStack=#' to specify a bigger stack.", nil),
ErrTooLongBody: Message("Routine body for '%-.100s' is too long", nil),
ErrWarnCantDropDefaultKeycache: Message("Cannot drop default keycache", nil),
ErrTooBigDisplaywidth: Message("Display width out of range for column '%-.192s' (max = %d)", nil),
ErrXaerDupid: Message("XAERDUPID: The XID already exists", nil),
ErrDatetimeFunctionOverflow: Message("Datetime function: %-.32s field overflow", nil),
ErrCantUpdateUsedTableInSfOrTrg: Message("Can't update table '%-.192s' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.", nil),
ErrViewPreventUpdate: Message("The definition of table '%-.192s' prevents operation %.192s on table '%-.192s'.", nil),
ErrPsNoRecursion: Message("The prepared statement contains a stored routine call that refers to that same statement. It's not allowed to execute a prepared statement in such a recursive manner", nil),
ErrSpCantSetAutocommit: Message("Not allowed to set autocommit from a stored function or trigger", nil),
ErrMalformedDefiner: Message("Definer is not fully qualified", nil),
ErrViewFrmNoUser: Message("View '%-.192s'.'%-.192s' has no definer information (old table format). Current user is used as definer. Please recreate the view!", nil),
ErrViewOtherUser: Message("You need the SUPER privilege for creation view with '%-.192s'@'%-.192s' definer", nil),
ErrNoSuchUser: Message("The user specified as a definer ('%-.64s'@'%-.64s') does not exist", nil),
ErrForbidSchemaChange: Message("Changing schema from '%-.192s' to '%-.192s' is not allowed.", nil),
ErrRowIsReferenced2: Message("Cannot delete or update a parent row: a foreign key constraint fails (%.192s)", nil),
ErrNoReferencedRow2: Message("Cannot add or update a child row: a foreign key constraint fails (%.192s)", nil),
ErrSpBadVarShadow: Message("Variable '%-.64s' must be quoted with `...`, or renamed", nil),
ErrTrgNoDefiner: Message("No definer attribute for trigger '%-.192s'.'%-.192s'. The trigger will be activated under the authorization of the invoker, which may have insufficient privileges. Please recreate the trigger.", nil),
ErrOldFileFormat: Message("'%-.192s' has an old format, you should re-create the '%s' object(s)", nil),
ErrSpRecursionLimit: Message("Recursive limit %d (as set by the maxSpRecursionDepth variable) was exceeded for routine %.192s", nil),
ErrSpProcTableCorrupt: Message("Failed to load routine %-.192s. The table mysql.proc is missing, corrupt, or contains bad data (internal code %d)", nil),
ErrSpWrongName: Message("Incorrect routine name '%-.192s'", nil),
ErrTableNeedsUpgrade: Message("Table upgrade required. Please do \"REPAIR TABLE `%-.32s`\"", nil),
ErrSpNoAggregate: Message("AGGREGATE is not supported for stored functions", nil),
ErrMaxPreparedStmtCountReached: Message("Can't create more than maxPreparedStmtCount statements (current value: %d)", nil),
ErrViewRecursive: Message("`%-.192s`.`%-.192s` contains view recursion", nil),
ErrNonGroupingFieldUsed: Message("Non-grouping field '%-.192s' is used in %-.64s clause", nil),
ErrTableCantHandleSpkeys: Message("The used table type doesn't support SPATIAL indexes", nil),
ErrNoTriggersOnSystemSchema: Message("Triggers can not be created on system tables", nil),
ErrRemovedSpaces: Message("Leading spaces are removed from name '%s'", nil),
ErrAutoincReadFailed: Message("Failed to read auto-increment value from storage engine", nil),
ErrUsername: Message("user name", nil),
ErrHostname: Message("host name", nil),
ErrWrongStringLength: Message("String '%-.70s' is too long for %s (should be no longer than %d)", nil),
ErrNonInsertableTable: Message("The target table %-.100s of the %s is not insertable-into", nil),
ErrAdminWrongMrgTable: Message("Table '%-.64s' is differently defined or of non-MyISAM type or doesn't exist", nil),
ErrTooHighLevelOfNestingForSelect: Message("Too high level of nesting for select", nil),
ErrNameBecomesEmpty: Message("Name '%-.64s' has become ''", nil),
ErrAmbiguousFieldTerm: Message("First character of the FIELDS TERMINATED string is ambiguous; please use non-optional and non-empty FIELDS ENCLOSED BY", nil),
ErrForeignServerExists: Message("The foreign server, %s, you are trying to create already exists.", nil),
ErrForeignServerDoesntExist: Message("The foreign server name you are trying to reference does not exist. Data source : %-.64s", nil),
ErrIllegalHaCreateOption: Message("Table storage engine '%-.64s' does not support the create option '%.64s'", nil),
ErrPartitionRequiresValues: Message("Syntax : %-.64s PARTITIONING requires definition of VALUES %-.64s for each partition", nil),
ErrPartitionWrongValues: Message("Only %-.64s PARTITIONING can use VALUES %-.64s in partition definition", nil),
ErrPartitionMaxvalue: Message("MAXVALUE can only be used in last partition definition", nil),
ErrPartitionSubpartition: Message("Subpartitions can only be hash partitions and by key", nil),
ErrPartitionSubpartMix: Message("Must define subpartitions on all partitions if on one partition", nil),
ErrPartitionWrongNoPart: Message("Wrong number of partitions defined, mismatch with previous setting", nil),
ErrPartitionWrongNoSubpart: Message("Wrong number of subpartitions defined, mismatch with previous setting", nil),
ErrWrongExprInPartitionFunc: Message("Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed", nil),
ErrNoConstExprInRangeOrList: Message("Expression in RANGE/LIST VALUES must be constant", nil),
ErrFieldNotFoundPart: Message("Field in list of fields for partition function not found in table", nil),
ErrListOfFieldsOnlyInHash: Message("List of fields is only allowed in KEY partitions", nil),
ErrInconsistentPartitionInfo: Message("The partition info in the frm file is not consistent with what can be written into the frm file", nil),
ErrPartitionFuncNotAllowed: Message("The %-.192s function returns the wrong type", nil),
ErrPartitionsMustBeDefined: Message("For %-.64s partitions each partition must be defined", nil),
ErrRangeNotIncreasing: Message("VALUES LESS THAN value must be strictly increasing for each partition", nil),
ErrInconsistentTypeOfFunctions: Message("VALUES value must be of same type as partition function", nil),
ErrMultipleDefConstInListPart: Message("Multiple definition of same constant in list partitioning", nil),
ErrPartitionEntry: Message("Partitioning can not be used stand-alone in query", nil),
ErrMixHandler: Message("The mix of handlers in the partitions is not allowed in this version of MySQL", nil),
ErrPartitionNotDefined: Message("For the partitioned engine it is necessary to define all %-.64s", nil),
ErrTooManyPartitions: Message("Too many partitions (including subpartitions) were defined", nil),
ErrSubpartition: Message("It is only possible to mix RANGE/LIST partitioning with HASH/KEY partitioning for subpartitioning", nil),
ErrCantCreateHandlerFile: Message("Failed to create specific handler file", nil),
ErrBlobFieldInPartFunc: Message("A BLOB field is not allowed in partition function", nil),
ErrUniqueKeyNeedAllFieldsInPf: Message("A %-.192s must include all columns in the table's partitioning function", nil),
ErrNoParts: Message("Number of %-.64s = 0 is not an allowed value", nil),
ErrPartitionMgmtOnNonpartitioned: Message("Partition management on a not partitioned table is not possible", nil),
ErrForeignKeyOnPartitioned: Message("Foreign key clause is not yet supported in conjunction with partitioning", nil),
ErrDropPartitionNonExistent: Message("Error in list of partitions to %-.64s", nil),
ErrDropLastPartition: Message("Cannot remove all partitions, use DROP TABLE instead", nil),
ErrCoalesceOnlyOnHashPartition: Message("COALESCE PARTITION can only be used on HASH/KEY partitions", nil),
ErrReorgHashOnlyOnSameNo: Message("REORGANIZE PARTITION can only be used to reorganize partitions not to change their numbers", nil),
ErrReorgNoParam: Message("REORGANIZE PARTITION without parameters can only be used on auto-partitioned tables using HASH PARTITIONs", nil),
ErrOnlyOnRangeListPartition: Message("%-.64s PARTITION can only be used on RANGE/LIST partitions", nil),
ErrAddPartitionSubpart: Message("Trying to Add partition(s) with wrong number of subpartitions", nil),
ErrAddPartitionNoNewPartition: Message("At least one partition must be added", nil),
ErrCoalescePartitionNoPartition: Message("At least one partition must be coalesced", nil),
ErrReorgPartitionNotExist: Message("More partitions to reorganize than there are partitions", nil),
ErrSameNamePartition: Message("Duplicate partition name %-.192s", nil),
ErrNoBinlog: Message("It is not allowed to shut off binlog on this command", nil),
ErrConsecutiveReorgPartitions: Message("When reorganizing a set of partitions they must be in consecutive order", nil),
ErrReorgOutsideRange: Message("Reorganize of range partitions cannot change total ranges except for last partition where it can extend the range", nil),
ErrPartitionFunctionFailure: Message("Partition function not supported in this version for this handler", nil),
ErrPartState: Message("Partition state cannot be defined from CREATE/ALTER TABLE", nil),
ErrLimitedPartRange: Message("The %-.64s handler only supports 32 bit integers in VALUES", nil),
ErrPluginIsNotLoaded: Message("Plugin '%-.192s' is not loaded", nil),
ErrWrongValue: Message("Incorrect %-.32s value: '%-.128s'", nil),
ErrNoPartitionForGivenValue: Message("Table has no partition for value %-.64s", nil),
ErrFilegroupOptionOnlyOnce: Message("It is not allowed to specify %s more than once", nil),
ErrCreateFilegroupFailed: Message("Failed to create %s", nil),
ErrDropFilegroupFailed: Message("Failed to drop %s", nil),
ErrTablespaceAutoExtend: Message("The handler doesn't support autoextend of tablespaces", nil),
ErrWrongSizeNumber: Message("A size parameter was incorrectly specified, either number or on the form 10M", nil),
ErrSizeOverflow: Message("The size number was correct but we don't allow the digit part to be more than 2 billion", nil),
ErrAlterFilegroupFailed: Message("Failed to alter: %s", nil),
ErrBinlogRowLoggingFailed: Message("Writing one row to the row-based binary log failed", nil),
ErrBinlogRowWrongTableDef: Message("Table definition on master and slave does not match: %s", nil),
ErrBinlogRowRbrToSbr: Message("Slave running with --log-slave-updates must use row-based binary logging to be able to replicate row-based binary log events", nil),
ErrEventAlreadyExists: Message("Event '%-.192s' already exists", nil),
ErrEventStoreFailed: Message("Failed to store event %s. Error code %d from storage engine.", nil),
ErrEventDoesNotExist: Message("Unknown event '%-.192s'", nil),
ErrEventCantAlter: Message("Failed to alter event '%-.192s'", nil),
ErrEventDropFailed: Message("Failed to drop %s", nil),
ErrEventIntervalNotPositiveOrTooBig: Message("INTERVAL is either not positive or too big", nil),
ErrEventEndsBeforeStarts: Message("ENDS is either invalid or before STARTS", nil),
ErrEventExecTimeInThePast: Message("Event execution time is in the past. Event has been disabled", nil),
ErrEventOpenTableFailed: Message("Failed to open mysql.event", nil),
ErrEventNeitherMExprNorMAt: Message("No datetime expression provided", nil),
ErrObsoleteColCountDoesntMatchCorrupted: Message("Column count of mysql.%s is wrong. Expected %d, found %d. The table is probably corrupted", nil),
ErrObsoleteCannotLoadFromTable: Message("Cannot load from mysql.%s. The table is probably corrupted", nil),
ErrEventCannotDelete: Message("Failed to delete the event from mysql.event", nil),
ErrEventCompile: Message("Error during compilation of event's body", nil),
ErrEventSameName: Message("Same old and new event name", nil),
ErrEventDataTooLong: Message("Data for column '%s' too long", nil),
ErrDropIndexNeededInForeignKey: Message("Cannot drop index '%-.192s': needed in a foreign key constraint", nil),
ErrWarnDeprecatedSyntaxWithVer: Message("The syntax '%s' is deprecated and will be removed in MySQL %s. Please use %s instead", nil),
ErrCantWriteLockLogTable: Message("You can't write-lock a log table. Only read access is possible", nil),
ErrCantLockLogTable: Message("You can't use locks with log tables.", nil),
ErrForeignDuplicateKeyOldUnused: Message("Upholding foreign key constraints for table '%.192s', entry '%-.192s', key %d would lead to a duplicate entry", nil),
ErrColCountDoesntMatchPleaseUpdate: Message("Column count of mysql.%s is wrong. Expected %d, found %d. Created with MySQL %d, now running %d. Please use mysqlUpgrade to fix this error.", nil),
ErrTempTablePreventsSwitchOutOfRbr: Message("Cannot switch out of the row-based binary log format when the session has open temporary tables", nil),
ErrStoredFunctionPreventsSwitchBinlogFormat: Message("Cannot change the binary logging format inside a stored function or trigger", nil),
ErrNdbCantSwitchBinlogFormat: Message("The NDB cluster engine does not support changing the binlog format on the fly yet", nil),
ErrPartitionNoTemporary: Message("Cannot create temporary table with partitions", nil),
ErrPartitionConstDomain: Message("Partition constant is out of partition function domain", nil),
ErrPartitionFunctionIsNotAllowed: Message("This partition function is not allowed", nil),
ErrDdlLog: Message("Error in DDL log", nil),
ErrNullInValuesLessThan: Message("Not allowed to use NULL value in VALUES LESS THAN", nil),
ErrWrongPartitionName: Message("Incorrect partition name", nil),
ErrCantChangeTxCharacteristics: Message("Transaction characteristics can't be changed while a transaction is in progress", nil),
ErrDupEntryAutoincrementCase: Message("ALTER TABLE causes autoIncrement resequencing, resulting in duplicate entry '%-.192s' for key '%-.192s'", nil),
ErrEventModifyQueue: Message("Internal scheduler error %d", nil),
ErrEventSetVar: Message("Error during starting/stopping of the scheduler. Error code %d", nil),
ErrPartitionMerge: Message("Engine cannot be used in partitioned tables", nil),
ErrCantActivateLog: Message("Cannot activate '%-.64s' log", nil),
ErrRbrNotAvailable: Message("The server was not built with row-based replication", nil),
ErrBase64Decode: Message("Decoding of base64 string failed", nil),
ErrEventRecursionForbidden: Message("Recursion of EVENT DDL statements is forbidden when body is present", nil),
ErrEventsDB: Message("Cannot proceed because system tables used by Event Scheduler were found damaged at server start", nil),
ErrOnlyIntegersAllowed: Message("Only integers allowed as number here", nil),
ErrUnsuportedLogEngine: Message("This storage engine cannot be used for log tables\"", nil),
ErrBadLogStatement: Message("You cannot '%s' a log table if logging is enabled", nil),
ErrCantRenameLogTable: Message("Cannot rename '%s'. When logging enabled, rename to/from log table must rename two tables: the log table to an archive table and another table back to '%s'", nil),
ErrWrongParamcountToNativeFct: Message("Incorrect parameter count in the call to native function '%-.192s'", nil),
ErrWrongParametersToNativeFct: Message("Incorrect parameters in the call to native function '%-.192s'", nil),
ErrWrongParametersToStoredFct: Message("Incorrect parameters in the call to stored function '%-.192s'", nil),
ErrNativeFctNameCollision: Message("This function '%-.192s' has the same name as a native function", nil),
ErrDupEntryWithKeyName: Message("Duplicate entry '%-.64s' for key '%-.192s'", nil),
ErrBinlogPurgeEmFile: Message("Too many files opened, please execute the command again", nil),
ErrEventCannotCreateInThePast: Message("Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was dropped immediately after creation.", nil),
ErrEventCannotAlterInThePast: Message("Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was not changed. Specify a time in the future.", nil),
ErrSlaveIncident: Message("The incident %s occurred on the master. Message: %-.64s", nil),
ErrNoPartitionForGivenValueSilent: Message("Table has no partition for some existing values", nil),
ErrBinlogUnsafeStatement: Message("Unsafe statement written to the binary log using statement format since BINLOGFORMAT = STATEMENT. %s", nil),
ErrSlaveFatal: Message("Fatal : %s", nil),
ErrSlaveRelayLogReadFailure: Message("Relay log read failure: %s", nil),
ErrSlaveRelayLogWriteFailure: Message("Relay log write failure: %s", nil),
ErrSlaveCreateEventFailure: Message("Failed to create %s", nil),
ErrSlaveMasterComFailure: Message("Master command %s failed: %s", nil),
ErrBinlogLoggingImpossible: Message("Binary logging not possible. Message: %s", nil),
ErrViewNoCreationCtx: Message("View `%-.64s`.`%-.64s` has no creation context", nil),
ErrViewInvalidCreationCtx: Message("Creation context of view `%-.64s`.`%-.64s' is invalid", nil),
ErrSrInvalidCreationCtx: Message("Creation context of stored routine `%-.64s`.`%-.64s` is invalid", nil),
ErrTrgCorruptedFile: Message("Corrupted TRG file for table `%-.64s`.`%-.64s`", nil),
ErrTrgNoCreationCtx: Message("Triggers for table `%-.64s`.`%-.64s` have no creation context", nil),
ErrTrgInvalidCreationCtx: Message("Trigger creation context of table `%-.64s`.`%-.64s` is invalid", nil),
ErrEventInvalidCreationCtx: Message("Creation context of event `%-.64s`.`%-.64s` is invalid", nil),
ErrTrgCantOpenTable: Message("Cannot open table for trigger `%-.64s`.`%-.64s`", nil),
ErrCantCreateSroutine: Message("Cannot create stored routine `%-.64s`. Check warnings", nil),
ErrNeverUsed: Message("Ambiguous slave modes combination. %s", nil),
ErrNoFormatDescriptionEventBeforeBinlogStatement: Message("The BINLOG statement of type `%s` was not preceded by a format description BINLOG statement.", nil),
ErrSlaveCorruptEvent: Message("Corrupted replication event was detected", nil),
ErrLoadDataInvalidColumn: Message("Invalid column reference (%-.64s) in LOAD DATA", nil),
ErrLogPurgeNoFile: Message("Being purged log %s was not found", nil),
ErrXaRbtimeout: Message("XARBTIMEOUT: Transaction branch was rolled back: took too long", nil),
ErrXaRbdeadlock: Message("XARBDEADLOCK: Transaction branch was rolled back: deadlock was detected", nil),
ErrNeedReprepare: Message("Prepared statement needs to be re-prepared", nil),
ErrDelayedNotSupported: Message("DELAYED option not supported for table '%-.192s'", nil),
WarnNoMasterInfo: Message("The master info structure does not exist", nil),
WarnOptionIgnored: Message("<%-.64s> option ignored", nil),
WarnPluginDeleteBuiltin: Message("Built-in plugins cannot be deleted", nil),
WarnPluginBusy: Message("Plugin is busy and will be uninstalled on shutdown", nil),
ErrVariableIsReadonly: Message("%s variable '%s' is read-only. Use SET %s to assign the value", nil),
ErrWarnEngineTransactionRollback: Message("Storage engine %s does not support rollback for this statement. Transaction rolled back and must be restarted", nil),
ErrSlaveHeartbeatFailure: Message("Unexpected master's heartbeat data: %s", nil),
ErrSlaveHeartbeatValueOutOfRange: Message("The requested value for the heartbeat period is either negative or exceeds the maximum allowed (%s seconds).", nil),
ErrNdbReplicationSchema: Message("Bad schema for mysql.ndbReplication table. Message: %-.64s", nil),
ErrConflictFnParse: Message("Error in parsing conflict function. Message: %-.64s", nil),
ErrExceptionsWrite: Message("Write to exceptions table failed. Message: %-.128s\"", nil),
ErrTooLongTableComment: Message("Comment for table '%-.64s' is too long (max = %d)", nil),
ErrTooLongFieldComment: Message("Comment for field '%-.64s' is too long (max = %d)", nil),
ErrFuncInexistentNameCollision: Message("FUNCTION %s does not exist. Check the 'Function Name Parsing and Resolution' section in the Reference Manual", nil),
ErrDatabaseName: Message("Database", nil),
ErrTableName: Message("Table", nil),
ErrPartitionName: Message("Partition", nil),
ErrSubpartitionName: Message("Subpartition", nil),
ErrTemporaryName: Message("Temporary", nil),
ErrRenamedName: Message("Renamed", nil),
ErrTooManyConcurrentTrxs: Message("Too many active concurrent transactions", nil),
WarnNonASCIISeparatorNotImplemented: Message("Non-ASCII separator arguments are not fully supported", nil),
ErrDebugSyncTimeout: Message("debug sync point wait timed out", nil),
ErrDebugSyncHitLimit: Message("debug sync point hit limit reached", nil),
ErrDupSignalSet: Message("Duplicate condition information item '%s'", nil),
ErrSignalWarn: Message("Unhandled user-defined warning condition", nil),
ErrSignalNotFound: Message("Unhandled user-defined not found condition", nil),
ErrSignalException: Message("Unhandled user-defined exception condition", nil),
ErrResignalWithoutActiveHandler: Message("RESIGNAL when handler not active", nil),
ErrSignalBadConditionType: Message("SIGNAL/RESIGNAL can only use a CONDITION defined with SQLSTATE", nil),
WarnCondItemTruncated: Message("Data truncated for condition item '%s'", nil),
ErrCondItemTooLong: Message("Data too long for condition item '%s'", nil),
ErrUnknownLocale: Message("Unknown locale: '%-.64s'", nil),
ErrSlaveIgnoreServerIDs: Message("The requested server id %d clashes with the slave startup option --replicate-same-server-id", nil),
ErrQueryCacheDisabled: Message("Query cache is disabled; restart the server with queryCacheType=1 to enable it", nil),
ErrSameNamePartitionField: Message("Duplicate partition field name '%-.192s'", nil),
ErrPartitionColumnList: Message("Inconsistency in usage of column lists for partitioning", nil),
ErrWrongTypeColumnValue: Message("Partition column values of incorrect type", nil),
ErrTooManyPartitionFuncFields: Message("Too many fields in '%-.192s'", nil),
ErrMaxvalueInValuesIn: Message("Cannot use MAXVALUE as value in VALUES IN", nil),
ErrTooManyValues: Message("Cannot have more than one value for this type of %-.64s partitioning", nil),
ErrRowSinglePartitionField: Message("Row expressions in VALUES IN only allowed for multi-field column partitioning", nil),
ErrFieldTypeNotAllowedAsPartitionField: Message("Field '%-.192s' is of a not allowed type for this type of partitioning", nil),
ErrPartitionFieldsTooLong: Message("The total length of the partitioning fields is too large", nil),
ErrBinlogRowEngineAndStmtEngine: Message("Cannot execute statement: impossible to write to binary log since both row-incapable engines and statement-incapable engines are involved.", nil),
ErrBinlogRowModeAndStmtEngine: Message("Cannot execute statement: impossible to write to binary log since BINLOGFORMAT = ROW and at least one table uses a storage engine limited to statement-based logging.", nil),
ErrBinlogUnsafeAndStmtEngine: Message("Cannot execute statement: impossible to write to binary log since statement is unsafe, storage engine is limited to statement-based logging, and BINLOGFORMAT = MIXED. %s", nil),
ErrBinlogRowInjectionAndStmtEngine: Message("Cannot execute statement: impossible to write to binary log since statement is in row format and at least one table uses a storage engine limited to statement-based logging.", nil),
ErrBinlogStmtModeAndRowEngine: Message("Cannot execute statement: impossible to write to binary log since BINLOGFORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging.%s", nil),
ErrBinlogRowInjectionAndStmtMode: Message("Cannot execute statement: impossible to write to binary log since statement is in row format and BINLOGFORMAT = STATEMENT.", nil),
ErrBinlogMultipleEnginesAndSelfLoggingEngine: Message("Cannot execute statement: impossible to write to binary log since more than one engine is involved and at least one engine is self-logging.", nil),
ErrBinlogUnsafeLimit: Message("The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted.", nil),
ErrBinlogUnsafeInsertDelayed: Message("The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted.", nil),
ErrBinlogUnsafeSystemTable: Message("The statement is unsafe because it uses the general log, slow query log, or performanceSchema table(s). This is unsafe because system tables may differ on slaves.", nil),
ErrBinlogUnsafeAutoincColumns: Message("Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTOINCREMENT column. Inserted values cannot be logged correctly.", nil),
ErrBinlogUnsafeUdf: Message("Statement is unsafe because it uses a UDF which may not return the same value on the slave.", nil),
ErrBinlogUnsafeSystemVariable: Message("Statement is unsafe because it uses a system variable that may have a different value on the slave.", nil),
ErrBinlogUnsafeSystemFunction: Message("Statement is unsafe because it uses a system function that may return a different value on the slave.", nil),
ErrBinlogUnsafeNontransAfterTrans: Message("Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.", nil),
ErrMessageAndStatement: Message("%s Statement: %s", nil),
ErrSlaveConversionFailed: Message("Column %d of table '%-.192s.%-.192s' cannot be converted from type '%-.32s' to type '%-.32s'", nil),
ErrSlaveCantCreateConversion: Message("Can't create conversion table for table '%-.192s.%-.192s'", nil),
ErrInsideTransactionPreventsSwitchBinlogFormat: Message("Cannot modify @@session.binlogFormat inside a transaction", nil),
ErrPathLength: Message("The path specified for %.64s is too long.", nil),
ErrWarnDeprecatedSyntaxNoReplacement: Message("%s is deprecated and will be removed in a future release.%s", nil),
ErrWrongNativeTableStructure: Message("Native table '%-.64s'.'%-.64s' has the wrong structure", nil),
ErrWrongPerfSchemaUsage: Message("Invalid performanceSchema usage.", nil),
ErrWarnISSkippedTable: Message("Table '%s'.'%s' was skipped since its definition is being modified by concurrent DDL statement", nil),
ErrInsideTransactionPreventsSwitchBinlogDirect: Message("Cannot modify @@session.binlogDirectNonTransactionalUpdates inside a transaction", nil),
ErrStoredFunctionPreventsSwitchBinlogDirect: Message("Cannot change the binlog direct flag inside a stored function or trigger", nil),
ErrSpatialMustHaveGeomCol: Message("A SPATIAL index may only contain a geometrical type column", nil),
ErrTooLongIndexComment: Message("Comment for index '%-.64s' is too long (max = %d)", nil),
ErrLockAborted: Message("Wait on a lock was aborted due to a pending exclusive lock", nil),
ErrDataOutOfRange: Message("%s value is out of range in '%s'", nil),
ErrWrongSpvarTypeInLimit: Message("A variable of a non-integer based type in LIMIT clause", nil),
ErrBinlogUnsafeMultipleEnginesAndSelfLoggingEngine: Message("Mixing self-logging and non-self-logging engines in a statement is unsafe.", nil),
ErrBinlogUnsafeMixedStatement: Message("Statement accesses nontransactional table as well as transactional or temporary table, and writes to any of them.", nil),
ErrInsideTransactionPreventsSwitchSQLLogBin: Message("Cannot modify @@session.sqlLogBin inside a transaction", nil),
ErrStoredFunctionPreventsSwitchSQLLogBin: Message("Cannot change the sqlLogBin inside a stored function or trigger", nil),
ErrFailedReadFromParFile: Message("Failed to read from the .par file", nil),
ErrValuesIsNotIntType: Message("VALUES value for partition '%-.64s' must have type INT", nil),
ErrAccessDeniedNoPassword: Message("Access denied for user '%-.48s'@'%-.64s'", nil),
ErrSetPasswordAuthPlugin: Message("SET PASSWORD has no significance for user '%-.48s'@'%-.255s' as authentication plugin does not support it.", nil),
ErrGrantPluginUserExists: Message("GRANT with IDENTIFIED WITH is illegal because the user %-.*s already exists", nil),
ErrTruncateIllegalForeignKey: Message("Cannot truncate a table referenced in a foreign key constraint (%.192s)", nil),
ErrPluginIsPermanent: Message("Plugin '%s' is forcePlusPermanent and can not be unloaded", nil),
ErrSlaveHeartbeatValueOutOfRangeMin: Message("The requested value for the heartbeat period is less than 1 millisecond. The value is reset to 0, meaning that heartbeating will effectively be disabled.", nil),
ErrSlaveHeartbeatValueOutOfRangeMax: Message("The requested value for the heartbeat period exceeds the value of `slaveNetTimeout' seconds. A sensible value for the period should be less than the timeout.", nil),
ErrStmtCacheFull: Message("Multi-row statements required more than 'maxBinlogStmtCacheSize' bytes of storage; increase this mysqld variable and try again", nil),
ErrMultiUpdateKeyConflict: Message("Primary key/partition key update is not allowed since the table is updated both as '%-.192s' and '%-.192s'.", nil),
ErrTableNeedsRebuild: Message("Table rebuild required. Please do \"ALTER TABLE `%-.32s` FORCE\" or dump/reload to fix it!", nil),
WarnOptionBelowLimit: Message("The value of '%s' should be no less than the value of '%s'", nil),
ErrIndexColumnTooLong: Message("Index column size too large. The maximum column size is %d bytes.", nil),
ErrErrorInTriggerBody: Message("Trigger '%-.64s' has an error in its body: '%-.256s'", nil),
ErrErrorInUnknownTriggerBody: Message("Unknown trigger has an error in its body: '%-.256s'", nil),
ErrIndexCorrupt: Message("Index %s is corrupted", nil),
ErrUndoRecordTooBig: Message("Undo log record is too big.", nil),
ErrBinlogUnsafeInsertIgnoreSelect: Message("INSERT IGNORE... SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave.", nil),
ErrBinlogUnsafeInsertSelectUpdate: Message("INSERT... SELECT... ON DUPLICATE KEY UPDATE is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are updated. This order cannot be predicted and may differ on master and the slave.", nil),
ErrBinlogUnsafeReplaceSelect: Message("REPLACE... SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are replaced. This order cannot be predicted and may differ on master and the slave.", nil),
ErrBinlogUnsafeCreateIgnoreSelect: Message("CREATE... IGNORE SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave.", nil),
ErrBinlogUnsafeCreateReplaceSelect: Message("CREATE... REPLACE SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are replaced. This order cannot be predicted and may differ on master and the slave.", nil),
ErrBinlogUnsafeUpdateIgnore: Message("UPDATE IGNORE is unsafe because the order in which rows are updated determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave.", nil),
ErrPluginNoUninstall: Message("Plugin '%s' is marked as not dynamically uninstallable. You have to stop the server to uninstall it.", nil),
ErrPluginNoInstall: Message("Plugin '%s' is marked as not dynamically installable. You have to stop the server to install it.", nil),
ErrBinlogUnsafeWriteAutoincSelect: Message("Statements writing to a table with an auto-increment column after selecting from another table are unsafe because the order in which rows are retrieved determines what (if any) rows will be written. This order cannot be predicted and may differ on master and the slave.", nil),
ErrBinlogUnsafeCreateSelectAutoinc: Message("CREATE TABLE... SELECT... on a table with an auto-increment column is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are inserted. This order cannot be predicted and may differ on master and the slave.", nil),
ErrBinlogUnsafeInsertTwoKeys: Message("INSERT... ON DUPLICATE KEY UPDATE on a table with more than one UNIQUE KEY is unsafe", nil),
ErrTableInFkCheck: Message("Table is being used in foreign key check.", nil),
ErrUnsupportedEngine: Message("Storage engine '%s' does not support system tables. [%s.%s]", nil),
ErrBinlogUnsafeAutoincNotFirst: Message("INSERT into autoincrement field which is not the first part in the composed primary key is unsafe.", nil),
ErrCannotLoadFromTableV2: Message("Cannot load from %s.%s. The table is probably corrupted", nil),
ErrMasterDelayValueOutOfRange: Message("The requested value %d for the master delay exceeds the maximum %d", nil),
ErrOnlyFdAndRbrEventsAllowedInBinlogStatement: Message("Only FormatDescriptionLogEvent and row events are allowed in BINLOG statements (but %s was provided)", nil),
ErrPartitionExchangeDifferentOption: Message("Non matching attribute '%-.64s' between partition and table", nil),
ErrPartitionExchangePartTable: Message("Table to exchange with partition is partitioned: '%-.64s'", nil),
ErrPartitionExchangeTempTable: Message("Table to exchange with partition is temporary: '%-.64s'", nil),
ErrPartitionInsteadOfSubpartition: Message("Subpartitioned table, use subpartition instead of partition", nil),
ErrUnknownPartition: Message("Unknown partition '%-.64s' in table '%-.64s'", nil),
ErrTablesDifferentMetadata: Message("Tables have different definitions", nil),
ErrRowDoesNotMatchPartition: Message("Found a row that does not match the partition", nil),
ErrBinlogCacheSizeGreaterThanMax: Message("Option binlogCacheSize (%d) is greater than maxBinlogCacheSize (%d); setting binlogCacheSize equal to maxBinlogCacheSize.", nil),
ErrWarnIndexNotApplicable: Message("Cannot use %-.64s access on index '%-.64s' due to type or collation conversion on field '%-.64s'", nil),
ErrPartitionExchangeForeignKey: Message("Table to exchange with partition has foreign key references: '%-.64s'", nil),
ErrNoSuchKeyValue: Message("Key value '%-.192s' was not found in table '%-.192s.%-.192s'", nil),
ErrRplInfoDataTooLong: Message("Data for column '%s' too long", nil),
ErrNetworkReadEventChecksumFailure: Message("Replication event checksum verification failed while reading from network.", nil),
ErrBinlogReadEventChecksumFailure: Message("Replication event checksum verification failed while reading from a log file.", nil),
ErrBinlogStmtCacheSizeGreaterThanMax: Message("Option binlogStmtCacheSize (%d) is greater than maxBinlogStmtCacheSize (%d); setting binlogStmtCacheSize equal to maxBinlogStmtCacheSize.", nil),
ErrCantUpdateTableInCreateTableSelect: Message("Can't update table '%-.192s' while '%-.192s' is being created.", nil),
ErrPartitionClauseOnNonpartitioned: Message("PARTITION () clause on non partitioned table", nil),
ErrRowDoesNotMatchGivenPartitionSet: Message("Found a row not matching the given partition set", nil),
ErrNoSuchPartitionunused: Message("partition '%-.64s' doesn't exist", nil),
ErrChangeRplInfoRepositoryFailure: Message("Failure while changing the type of replication repository: %s.", nil),
ErrWarningNotCompleteRollbackWithCreatedTempTable: Message("The creation of some temporary tables could not be rolled back.", nil),
ErrWarningNotCompleteRollbackWithDroppedTempTable: Message("Some temporary tables were dropped, but these operations could not be rolled back.", nil),
ErrMtsFeatureIsNotSupported: Message("%s is not supported in multi-threaded slave mode. %s", nil),
ErrMtsUpdatedDBsGreaterMax: Message("The number of modified databases exceeds the maximum %d; the database names will not be included in the replication event metadata.", nil),
ErrMtsCantParallel: Message("Cannot execute the current event group in the parallel mode. Encountered event %s, relay-log name %s, position %s which prevents execution of this event group in parallel mode. Reason: %s.", nil),
ErrMtsInconsistentData: Message("%s", nil),
ErrFulltextNotSupportedWithPartitioning: Message("FULLTEXT index is not supported for partitioned tables.", nil),
ErrDaInvalidConditionNumber: Message("Invalid condition number", nil),
ErrInsecurePlainText: Message("Sending passwords in plain text without SSL/TLS is extremely insecure.", nil),
ErrInsecureChangeMaster: Message("Storing MySQL user name or password information in the master.info repository is not secure and is therefore not recommended. Please see the MySQL Manual for more about this issue and possible alternatives.", nil),
ErrForeignDuplicateKeyWithChildInfo: Message("Foreign key constraint for table '%.192s', record '%-.192s' would lead to a duplicate entry in table '%.192s', key '%.192s'", nil),
ErrForeignDuplicateKeyWithoutChildInfo: Message("Foreign key constraint for table '%.192s', record '%-.192s' would lead to a duplicate entry in a child table", nil),
ErrSQLthreadWithSecureSlave: Message("Setting authentication options is not possible when only the Slave SQL Thread is being started.", nil),
ErrTableHasNoFt: Message("The table does not have FULLTEXT index to support this query", nil),
ErrVariableNotSettableInSfOrTrigger: Message("The system variable %.200s cannot be set in stored functions or triggers.", nil),
ErrVariableNotSettableInTransaction: Message("The system variable %.200s cannot be set when there is an ongoing transaction.", nil),
ErrGtidNextIsNotInGtidNextList: Message("The system variable @@SESSION.GTIDNEXT has the value %.200s, which is not listed in @@SESSION.GTIDNEXTLIST.", nil),
ErrCantChangeGtidNextInTransactionWhenGtidNextListIsNull: Message("When @@SESSION.GTIDNEXTLIST == NULL, the system variable @@SESSION.GTIDNEXT cannot change inside a transaction.", nil),
ErrSetStatementCannotInvokeFunction: Message("The statement 'SET %.200s' cannot invoke a stored function.", nil),
ErrGtidNextCantBeAutomaticIfGtidNextListIsNonNull: Message("The system variable @@SESSION.GTIDNEXT cannot be 'AUTOMATIC' when @@SESSION.GTIDNEXTLIST is non-NULL.", nil),
ErrSkippingLoggedTransaction: Message("Skipping transaction %.200s because it has already been executed and logged.", nil),
ErrMalformedGtidSetSpecification: Message("Malformed GTID set specification '%.200s'.", nil),
ErrMalformedGtidSetEncoding: Message("Malformed GTID set encoding.", nil),
ErrMalformedGtidSpecification: Message("Malformed GTID specification '%.200s'.", nil),
ErrGnoExhausted: Message("Impossible to generate Global Transaction Identifier: the integer component reached the maximal value. Restart the server with a new serverUuid.", nil),
ErrBadSlaveAutoPosition: Message("Parameters MASTERLOGFILE, MASTERLOGPOS, RELAYLOGFILE and RELAYLOGPOS cannot be set when MASTERAUTOPOSITION is active.", nil),
ErrAutoPositionRequiresGtidModeOn: Message("CHANGE MASTER TO MASTERAUTOPOSITION = 1 can only be executed when @@GLOBAL.GTIDMODE = ON.", nil),
ErrCantDoImplicitCommitInTrxWhenGtidNextIsSet: Message("Cannot execute statements with implicit commit inside a transaction when @@SESSION.GTIDNEXT != AUTOMATIC or @@SESSION.GTIDNEXTLIST != NULL.", nil),
ErrGtidMode2Or3RequiresEnforceGtidConsistencyOn: Message("@@GLOBAL.GTIDMODE = ON or UPGRADESTEP2 requires @@GLOBAL.ENFORCEGTIDCONSISTENCY = 1.", nil),
ErrGtidModeRequiresBinlog: Message("@@GLOBAL.GTIDMODE = ON or UPGRADESTEP1 or UPGRADESTEP2 requires --log-bin and --log-slave-updates.", nil),
ErrCantSetGtidNextToGtidWhenGtidModeIsOff: Message("@@SESSION.GTIDNEXT cannot be set to UUID:NUMBER when @@GLOBAL.GTIDMODE = OFF.", nil),
ErrCantSetGtidNextToAnonymousWhenGtidModeIsOn: Message("@@SESSION.GTIDNEXT cannot be set to ANONYMOUS when @@GLOBAL.GTIDMODE = ON.", nil),
ErrCantSetGtidNextListToNonNullWhenGtidModeIsOff: Message("@@SESSION.GTIDNEXTLIST cannot be set to a non-NULL value when @@GLOBAL.GTIDMODE = OFF.", nil),
ErrFoundGtidEventWhenGtidModeIsOff: Message("Found a GtidLogEvent or PreviousGtidsLogEvent when @@GLOBAL.GTIDMODE = OFF.", nil),
ErrGtidUnsafeNonTransactionalTable: Message("When @@GLOBAL.ENFORCEGTIDCONSISTENCY = 1, updates to non-transactional tables can only be done in either autocommitted statements or single-statement transactions, and never in the same statement as updates to transactional tables.", nil),
ErrGtidUnsafeCreateSelect: Message("CREATE TABLE ... SELECT is forbidden when @@GLOBAL.ENFORCEGTIDCONSISTENCY = 1.", nil),
ErrGtidUnsafeCreateDropTemporaryTableInTransaction: Message("When @@GLOBAL.ENFORCEGTIDCONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1.", nil),
ErrGtidModeCanOnlyChangeOneStepAtATime: Message("The value of @@GLOBAL.GTIDMODE can only change one step at a time: OFF <-> UPGRADESTEP1 <-> UPGRADESTEP2 <-> ON. Also note that this value must be stepped up or down simultaneously on all servers; see the Manual for instructions.", nil),
ErrMasterHasPurgedRequiredGtids: Message("The slave is connecting using CHANGE MASTER TO MASTERAUTOPOSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.", nil),
ErrCantSetGtidNextWhenOwningGtid: Message("@@SESSION.GTIDNEXT cannot be changed by a client that owns a GTID. The client owns %s. Ownership is released on COMMIT or ROLLBACK.", nil),
ErrUnknownExplainFormat: Message("Unknown EXPLAIN format name: '%s'", nil),
ErrCantExecuteInReadOnlyTransaction: Message("Cannot execute statement in a READ ONLY transaction.", nil),
ErrTooLongTablePartitionComment: Message("Comment for table partition '%-.64s' is too long (max = %d)", nil),
ErrSlaveConfiguration: Message("Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log.", nil),
ErrInnodbFtLimit: Message("InnoDB presently supports one FULLTEXT index creation at a time", nil),
ErrInnodbNoFtTempTable: Message("Cannot create FULLTEXT index on temporary InnoDB table", nil),
ErrInnodbFtWrongDocidColumn: Message("Column '%-.192s' is of wrong type for an InnoDB FULLTEXT index", nil),
ErrInnodbFtWrongDocidIndex: Message("Index '%-.192s' is of wrong type for an InnoDB FULLTEXT index", nil),
ErrInnodbOnlineLogTooBig: Message("Creating index '%-.192s' required more than 'innodbOnlineAlterLogMaxSize' bytes of modification log. Please try again.", nil),
ErrUnknownAlterAlgorithm: Message("Unknown ALGORITHM '%s'", nil),
ErrUnknownAlterLock: Message("Unknown LOCK type '%s'", nil),
ErrMtsChangeMasterCantRunWithGaps: Message("CHANGE MASTER cannot be executed when the slave was stopped with an error or killed in MTS mode. Consider using RESET SLAVE or START SLAVE UNTIL.", nil),
ErrMtsRecoveryFailure: Message("Cannot recover after SLAVE errored out in parallel execution mode. Additional error messages can be found in the MySQL error log.", nil),
ErrMtsResetWorkers: Message("Cannot clean up worker info tables. Additional error messages can be found in the MySQL error log.", nil),
ErrColCountDoesntMatchCorruptedV2: Message("Column count of %s.%s is wrong. Expected %d, found %d. The table is probably corrupted", nil),
ErrSlaveSilentRetryTransaction: Message("Slave must silently retry current transaction", nil),
ErrDiscardFkChecksRunning: Message("There is a foreign key check running on table '%-.192s'. Cannot discard the table.", nil),
ErrTableSchemaMismatch: Message("Schema mismatch (%s)", nil),
ErrTableInSystemTablespace: Message("Table '%-.192s' in system tablespace", nil),
ErrIoRead: Message("IO Read : (%d, %s) %s", nil),
ErrIoWrite: Message("IO Write : (%d, %s) %s", nil),
ErrTablespaceMissing: Message("Tablespace is missing for table '%-.192s'", nil),
ErrTablespaceExists: Message("Tablespace for table '%-.192s' exists. Please DISCARD the tablespace before IMPORT.", nil),
ErrTablespaceDiscarded: Message("Tablespace has been discarded for table '%-.192s'", nil),
ErrInternal: Message("Internal : %s", nil),
ErrInnodbImport: Message("ALTER TABLE '%-.192s' IMPORT TABLESPACE failed with error %d : '%s'", nil),
ErrInnodbIndexCorrupt: Message("Index corrupt: %s", nil),
ErrInvalidYearColumnLength: Message("Supports only YEAR or YEAR(4) column", nil),
ErrNotValidPassword: Message("Your password does not satisfy the current policy requirements (%s)", nil),
ErrMustChangePassword: Message("You must SET PASSWORD before executing this statement", nil),
ErrFkNoIndexChild: Message("Failed to add the foreign key constraint. Missing index for constraint '%s' in the foreign table '%s'", nil),
ErrForeignKeyNoIndexInParent: Message("Failed to add the foreign key constraint. Missing index for constraint '%s' in the referenced table '%s'", nil),
ErrFkFailAddSystem: Message("Failed to add the foreign key constraint '%s' to system tables", nil),
ErrForeignKeyCannotOpenParent: Message("Failed to open the referenced table '%s'", nil),
ErrFkIncorrectOption: Message("Failed to add the foreign key constraint on table '%s'. Incorrect options in FOREIGN KEY constraint '%s'", nil),
ErrFkDupName: Message("Duplicate foreign key constraint name '%s'", nil),
ErrPasswordFormat: Message("The password hash doesn't have the expected format. Check if the correct password algorithm is being used with the PASSWORD() function.", nil),
ErrFkColumnCannotDrop: Message("Cannot drop column '%-.192s': needed in a foreign key constraint '%-.192s'", nil),
ErrFkColumnCannotDropChild: Message("Cannot drop column '%-.192s': needed in a foreign key constraint '%-.192s' of table '%-.192s'", nil),
ErrForeignKeyColumnNotNull: Message("Column '%-.192s' cannot be NOT NULL: needed in a foreign key constraint '%-.192s' SET NULL", nil),
ErrDupIndex: Message("Duplicate index '%-.64s' defined on the table '%-.64s.%-.64s'. This is deprecated and will be disallowed in a future release.", nil),
ErrForeignKeyColumnCannotChange: Message("Cannot change column '%-.192s': used in a foreign key constraint '%-.192s'", nil),
ErrForeignKeyColumnCannotChangeChild: Message("Cannot change column '%-.192s': used in a foreign key constraint '%-.192s' of table '%-.192s'", nil),
ErrFkCannotDeleteParent: Message("Cannot delete rows from table which is parent in a foreign key constraint '%-.192s' of table '%-.192s'", nil),
ErrMalformedPacket: Message("Malformed communication packet.", nil),
ErrReadOnlyMode: Message("Running in read-only mode", nil),
ErrGtidNextTypeUndefinedGroup: Message("When @@SESSION.GTIDNEXT is set to a GTID, you must explicitly set it again after a COMMIT or ROLLBACK. If you see this error message in the slave SQL thread, it means that a table in the current transaction is transactional on the master and non-transactional on the slave. In a client connection, it means that you executed SET @@SESSION.GTIDNEXT before a transaction and forgot to set @@SESSION.GTIDNEXT to a different identifier or to 'AUTOMATIC' after COMMIT or ROLLBACK. Current @@SESSION.GTIDNEXT is '%s'.", nil),
ErrVariableNotSettableInSp: Message("The system variable %.200s cannot be set in stored procedures.", nil),
ErrCantSetGtidPurgedWhenGtidModeIsOff: Message("@@GLOBAL.GTIDPURGED can only be set when @@GLOBAL.GTIDMODE = ON.", nil),
ErrCantSetGtidPurgedWhenGtidExecutedIsNotEmpty: Message("@@GLOBAL.GTIDPURGED can only be set when @@GLOBAL.GTIDEXECUTED is empty.", nil),
ErrCantSetGtidPurgedWhenOwnedGtidsIsNotEmpty: Message("@@GLOBAL.GTIDPURGED can only be set when there are no ongoing transactions (not even in other clients).", nil),
ErrGtidPurgedWasChanged: Message("@@GLOBAL.GTIDPURGED was changed from '%s' to '%s'.", nil),
ErrGtidExecutedWasChanged: Message("@@GLOBAL.GTIDEXECUTED was changed from '%s' to '%s'.", nil),
ErrBinlogStmtModeAndNoReplTables: Message("Cannot execute statement: impossible to write to binary log since BINLOGFORMAT = STATEMENT, and both replicated and non replicated tables are written to.", nil),
ErrAlterOperationNotSupported: Message("%s is not supported for this operation. Try %s.", nil),
ErrAlterOperationNotSupportedReason: Message("%s is not supported. Reason: %s. Try %s.", nil),
ErrAlterOperationNotSupportedReasonCopy: Message("COPY algorithm requires a lock", nil),
ErrAlterOperationNotSupportedReasonPartition: Message("Partition specific operations do not yet support LOCK/ALGORITHM", nil),
ErrAlterOperationNotSupportedReasonFkRename: Message("Columns participating in a foreign key are renamed", nil),
ErrAlterOperationNotSupportedReasonColumnType: Message("Cannot change column type INPLACE", nil),
ErrAlterOperationNotSupportedReasonFkCheck: Message("Adding foreign keys needs foreignKeyChecks=OFF", nil),
ErrAlterOperationNotSupportedReasonIgnore: Message("Creating unique indexes with IGNORE requires COPY algorithm to remove duplicate rows", nil),
ErrAlterOperationNotSupportedReasonNopk: Message("Dropping a primary key is not allowed without also adding a new primary key", nil),
ErrAlterOperationNotSupportedReasonAutoinc: Message("Adding an auto-increment column requires a lock", nil),
ErrAlterOperationNotSupportedReasonHiddenFts: Message("Cannot replace hidden FTSDOCID with a user-visible one", nil),
ErrAlterOperationNotSupportedReasonChangeFts: Message("Cannot drop or rename FTSDOCID", nil),
ErrAlterOperationNotSupportedReasonFts: Message("Fulltext index creation requires a lock", nil),
ErrSQLSlaveSkipCounterNotSettableInGtidMode: Message("sqlSlaveSkipCounter can not be set when the server is running with @@GLOBAL.GTIDMODE = ON. Instead, for each transaction that you want to skip, generate an empty transaction with the same GTID as the transaction", nil),
ErrDupUnknownInIndex: Message("Duplicate entry for key '%-.192s'", nil),
ErrIdentCausesTooLongPath: Message("Long database name and identifier for object resulted in path length exceeding %d characters. Path: '%s'.", nil),
ErrAlterOperationNotSupportedReasonNotNull: Message("cannot silently convert NULL values, as required in this SQLMODE", nil),
ErrMustChangePasswordLogin: Message("Your password has expired. To log in you must change it using a client that supports expired passwords.", nil),
ErrRowInWrongPartition: Message("Found a row in wrong partition %s", nil),
ErrGeneratedColumnFunctionIsNotAllowed: Message("Expression of generated column '%s' contains a disallowed function.", nil),
ErrUnsupportedAlterInplaceOnVirtualColumn: Message("INPLACE ADD or DROP of virtual columns cannot be combined with other ALTER TABLE actions.", nil),
ErrWrongFKOptionForGeneratedColumn: Message("Cannot define foreign key with %s clause on a generated column.", nil),
ErrBadGeneratedColumn: Message("The value specified for generated column '%s' in table '%s' is not allowed.", nil),
ErrUnsupportedOnGeneratedColumn: Message("'%s' is not supported for generated columns.", nil),
ErrGeneratedColumnNonPrior: Message("Generated column can refer only to generated columns defined prior to it.", nil),
ErrDependentByGeneratedColumn: Message("Column '%s' has a generated column dependency.", nil),
ErrGeneratedColumnRefAutoInc: Message("Generated column '%s' cannot refer to auto-increment column.", nil),
ErrInvalidFieldSize: Message("Invalid size for column '%s'.", nil),
ErrPasswordExpireAnonymousUser: Message("The password for anonymous user cannot be expired.", nil),
ErrIncorrectType: Message("Incorrect type for argument %s in function %s.", nil),
ErrInvalidJSONData: Message("Invalid JSON data provided to function %s: %s", nil),
ErrInvalidJSONText: Message("Invalid JSON text: %-.192s", nil),
ErrInvalidJSONTextInParam: Message("Invalid JSON text in argument %d to function %s: \"%s\" at position %d.", nil),
ErrInvalidJSONPath: Message("Invalid JSON path expression %s.", nil),
ErrInvalidJSONCharset: Message("Cannot create a JSON value from a string with CHARACTER SET '%s'.", nil),
ErrInvalidTypeForJSON: Message("Invalid data type for JSON data in argument %d to function %s; a JSON string or JSON type is required.", nil),
ErrInvalidJSONPathWildcard: Message("In this situation, path expressions may not contain the * and ** tokens or an array range.", nil),
ErrInvalidJSONContainsPathType: Message("The second argument can only be either 'one' or 'all'.", nil),
ErrJSONUsedAsKey: Message("JSON column '%-.192s' cannot be used in key specification.", nil),
ErrJSONDocumentTooDeep: Message("The JSON document exceeds the maximum depth.", nil),
ErrJSONDocumentNULLKey: Message("JSON documents may not contain NULL member names.", nil),
ErrBadUser: Message("User %s does not exist.", nil),
ErrUserAlreadyExists: Message("User %s already exists.", nil),
ErrInvalidJSONPathArrayCell: Message("A path expression is not a path to a cell in an array.", nil),
ErrInvalidEncryptionOption: Message("Invalid encryption option.", nil),
ErrWindowNoSuchWindow: Message("Window name '%s' is not defined.", nil),
ErrWindowCircularityInWindowGraph: Message("There is a circularity in the window dependency graph.", nil),
ErrWindowNoChildPartitioning: Message("A window which depends on another cannot define partitioning.", nil),
ErrWindowNoInherentFrame: Message("Window '%s' has a frame definition, so cannot be referenced by another window.", nil),
ErrWindowNoRedefineOrderBy: Message("Window '%s' cannot inherit '%s' since both contain an ORDER BY clause.", nil),
ErrWindowFrameStartIllegal: Message("Window '%s': frame start cannot be UNBOUNDED FOLLOWING.", nil),
ErrWindowFrameEndIllegal: Message("Window '%s': frame end cannot be UNBOUNDED PRECEDING.", nil),
ErrWindowFrameIllegal: Message("Window '%s': frame start or end is negative, NULL or of non-integral type", nil),
ErrWindowRangeFrameOrderType: Message("Window '%s' with RANGE N PRECEDING/FOLLOWING frame requires exactly one ORDER BY expression, of numeric or temporal type", nil),
ErrWindowRangeFrameTemporalType: Message("Window '%s' with RANGE frame has ORDER BY expression of datetime type. Only INTERVAL bound value allowed.", nil),
ErrWindowRangeFrameNumericType: Message("Window '%s' with RANGE frame has ORDER BY expression of numeric type, INTERVAL bound value not allowed.", nil),
ErrWindowRangeBoundNotConstant: Message("Window '%s' has a non-constant frame bound.", nil),
ErrWindowDuplicateName: Message("Window '%s' is defined twice.", nil),
ErrWindowIllegalOrderBy: Message("Window '%s': ORDER BY or PARTITION BY uses legacy position indication which is not supported, use expression.", nil),
ErrWindowInvalidWindowFuncUse: Message("You cannot use the window function '%s' in this context.'", nil),
ErrWindowInvalidWindowFuncAliasUse: Message("You cannot use the alias '%s' of an expression containing a window function in this context.'", nil),
ErrWindowNestedWindowFuncUseInWindowSpec: Message("You cannot nest a window function in the specification of window '%s'.", nil),
ErrWindowRowsIntervalUse: Message("Window '%s': INTERVAL can only be used with RANGE frames.", nil),
ErrWindowNoGroupOrderUnused: Message("ASC or DESC with GROUP BY isn't allowed with window functions; put ASC or DESC in ORDER BY", nil),
ErrWindowExplainJson: Message("To get information about window functions use EXPLAIN FORMAT=JSON", nil),
ErrWindowFunctionIgnoresFrame: Message("Window function '%s' ignores the frame clause of window '%s' and aggregates over the whole partition", nil),
ErrRoleNotGranted: Message("%s is not granted to %s", nil),
ErrMaxExecTimeExceeded: Message("Query execution was interrupted, maximum statement execution time exceeded", nil),
ErrLockAcquireFailAndNoWaitSet: Message("Statement aborted because lock(s) could not be acquired immediately and NOWAIT is set.", nil),
ErrDataTruncatedFunctionalIndex: Message("Data truncated for functional index '%s' at row %d", nil),
ErrDataOutOfRangeFunctionalIndex: Message("Value is out of range for functional index '%s' at row %d", nil),
ErrFunctionalIndexOnJsonOrGeometryFunction: Message("Cannot create a functional index on a function that returns a JSON or GEOMETRY value", nil),
ErrFunctionalIndexRefAutoIncrement: Message("Functional index '%s' cannot refer to an auto-increment column", nil),
ErrCannotDropColumnFunctionalIndex: Message("Cannot drop column '%s' because it is used by a functional index. In order to drop the column, you must remove the functional index", nil),
ErrFunctionalIndexPrimaryKey: Message("The primary key cannot be a functional index", nil),
ErrFunctionalIndexOnLob: Message("Cannot create a functional index on an expression that returns a BLOB or TEXT. Please consider using CAST", nil),
ErrFunctionalIndexFunctionIsNotAllowed: Message("Expression of functional index '%s' contains a disallowed function", nil),
ErrFulltextFunctionalIndex: Message("Fulltext functional index is not supported", nil),
ErrSpatialFunctionalIndex: Message("Spatial functional index is not supported", nil),
ErrWrongKeyColumnFunctionalIndex: Message("The used storage engine cannot index the expression '%s'", nil),
ErrFunctionalIndexOnField: Message("Functional index on a column is not supported. Consider using a regular index instead", nil),
ErrFKIncompatibleColumns: Message("Referencing column '%s' and referenced column '%s' in foreign key constraint '%s' are incompatible.", nil),
ErrFunctionalIndexRowValueIsNotAllowed: Message("Expression of functional index '%s' cannot refer to a row value", nil),
ErrDependentByFunctionalIndex: Message("Column '%s' has a functional index dependency and cannot be dropped or renamed", nil),
ErrInvalidJSONType: Message("Invalid JSON type in argument %d to function %s; an %s is required.", nil),
ErrInvalidJsonValueForFuncIndex: Message("Invalid JSON value for CAST for functional index '%s'", nil),
ErrJsonValueOutOfRangeForFuncIndex: Message("Out of range JSON value for CAST for functional index '%s'", nil),
ErrFunctionalIndexDataIsTooLong: Message("Data too long for functional index '%s'", nil),
ErrFunctionalIndexNotApplicable: Message("Cannot use functional index '%s' due to type or collation conversion", nil),
// MariaDB errors.
ErrOnlyOneDefaultPartionAllowed: Message("Only one DEFAULT partition allowed", nil),
ErrWrongPartitionTypeExpectedSystemTime: Message("Wrong partitioning type, expected type: `SYSTEM_TIME`", nil),
ErrSystemVersioningWrongPartitions: Message("Wrong Partitions: must have at least one HISTORY and exactly one last CURRENT", nil),
ErrSequenceRunOut: Message("Sequence '%-.64s.%-.64s' has run out", nil),
ErrSequenceInvalidData: Message("Sequence '%-.64s.%-.64s' values are conflicting", nil),
ErrSequenceAccessFail: Message("Sequence '%-.64s.%-.64s' access error", nil),
ErrNotSequence: Message("'%-.64s.%-.64s' is not a SEQUENCE", nil),
ErrUnknownSequence: Message("Unknown SEQUENCE: '%-.300s'", nil),
ErrWrongInsertIntoSequence: Message("Wrong INSERT into a SEQUENCE. One can only do single table INSERT into a sequence object (like with mysqldump). If you want to change the SEQUENCE, use ALTER SEQUENCE instead.", nil),
ErrSequenceInvalidTableStructure: Message("Sequence '%-.64s.%-.64s' table structure is invalid (%s)", nil),
// TiDB errors.
ErrWarnOptimizerHintInvalidInteger: Message("integer value is out of range in '%s'", nil),
ErrWarnOptimizerHintUnsupportedHint: Message("Optimizer hint %s is not supported by TiDB and is ignored", nil),
ErrWarnOptimizerHintInvalidToken: Message("Cannot use %s '%s' (tok = %d) in an optimizer hint", nil),
ErrWarnMemoryQuotaOverflow: Message("Max value of MEMORY_QUOTA is %d bytes, ignore this invalid limit", nil),
ErrWarnOptimizerHintParseError: Message("Optimizer hint syntax error at %v", nil),
ErrWarnOptimizerHintWrongPos: Message("Optimizer hint can only be followed by certain keywords like SELECT, INSERT, etc.", nil),
}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package mysql
import (
"fmt"
"github.com/pingcap/errors"
)
// Portable analogs of some common call errors.
var (
ErrBadConn = errors.New("connection was bad")
ErrMalformPacket = errors.New("malform packet error")
)
// SQLError records an error information, from executing SQL.
type SQLError struct {
Code uint16
Message string
State string
}
// Error prints errors, with a formatted string.
func (e *SQLError) Error() string {
return fmt.Sprintf("ERROR %d (%s): %s", e.Code, e.State, e.Message)
}
// NewErr generates a SQL error, with an error code and default format specifier defined in MySQLErrName.
func NewErr(errCode uint16, args ...any) *SQLError {
e := &SQLError{Code: errCode}
if s, ok := MySQLState[errCode]; ok {
e.State = s
} else {
e.State = DefaultMySQLState
}
if sqlErr, ok := MySQLErrName[errCode]; ok {
errors.RedactErrorArg(args, sqlErr.RedactArgPos)
e.Message = fmt.Sprintf(sqlErr.Raw, args...)
} else {
e.Message = fmt.Sprint(args...)
}
return e
}
// NewErrf creates a SQL error, with an error code and a format specifier.
func NewErrf(errCode uint16, format string, redactArgPos []int, args ...any) *SQLError {
e := &SQLError{Code: errCode}
if s, ok := MySQLState[errCode]; ok {
e.State = s
} else {
e.State = DefaultMySQLState
}
errors.RedactErrorArg(args, redactArgPos)
e.Message = fmt.Sprintf(format, args...)
return e
}
package mysql
import (
"bytes"
"strconv"
"strings"
"unicode"
)
// LocaleFormatStyle defines the rules for number formatting.
type LocaleFormatStyle struct {
ThousandsSep string // Thousands separator
DecimalPoint string // Decimal point
IsIndianGrouping bool // Special grouping for en_IN, etc. (3,2,2,...)
}
// Formatting style IDs (descriptive names)
const (
styleCommaDot = "CommaDot" // 123,456.78 (en_US)
styleDotComma = "DotComma" // 123.456,78 (de_DE)
styleSpaceComma = "SpaceComma" // 123 456,78 (fr_FR)
styleNoneComma = "NoneComma" // 123456,78 (bg_BG)
styleAposDot = "AposDot" // 123'456.78 (de_CH)
styleAposComma = "AposComma" // 123'456,78 (it_CH)
styleNoneDot = "NoneDot" // 123456.78 (ar_SA)
styleIndian = "Indian" // 1,23,45,67,890.123 (en_IN)
)
// formatStyleMap maps a style ID to its separator definitions.
var formatStyleMap = map[string]LocaleFormatStyle{
// IsIndianGrouping is false by default
styleCommaDot: {ThousandsSep: ",", DecimalPoint: "."},
styleDotComma: {ThousandsSep: ".", DecimalPoint: ","},
styleSpaceComma: {ThousandsSep: " ", DecimalPoint: ","},
styleNoneComma: {ThousandsSep: "", DecimalPoint: ","},
styleAposDot: {ThousandsSep: "'", DecimalPoint: "."},
styleAposComma: {ThousandsSep: "'", DecimalPoint: ","},
styleNoneDot: {ThousandsSep: "", DecimalPoint: "."},
styleIndian: {ThousandsSep: ",", DecimalPoint: ".", IsIndianGrouping: true},
}
// localeToStyleMap maps locale names (lowercase) to their corresponding format style ID.
var localeToStyleMap = map[string]string{
// styleCommaDot (123,456.78): Default/fallback format (e.g., en_US) or where MySQL behavior matches.
"aa_et": styleCommaDot, "af_za": styleCommaDot, "ak_gh": styleCommaDot, "am_et": styleCommaDot, "ar_ae": styleCommaDot, "ar_bh": styleCommaDot,
"ar_dz": styleCommaDot, "ar_eg": styleCommaDot, "ar_in": styleCommaDot, "ar_iq": styleCommaDot, "ar_jo": styleCommaDot, "ar_kw": styleCommaDot,
"ar_lb": styleCommaDot, "ar_ly": styleCommaDot, "ar_ma": styleCommaDot, "ar_om": styleCommaDot, "ar_qa": styleCommaDot, "ar_sd": styleCommaDot,
"ar_ss": styleCommaDot, "ar_sy": styleCommaDot, "ar_tn": styleCommaDot, "ar_ye": styleCommaDot, "az_ir": styleCommaDot, "bi_vu": styleCommaDot,
"bo_cn": styleCommaDot, "bo_in": styleCommaDot, "cy_gb": styleCommaDot, "dv_mv": styleCommaDot, "en_ag": styleCommaDot, "en_au": styleCommaDot,
"en_bw": styleCommaDot, "en_ca": styleCommaDot, "en_gb": styleCommaDot, "en_hk": styleCommaDot, "en_ie": styleCommaDot, "en_il": styleCommaDot,
"en_ng": styleCommaDot, "en_nz": styleCommaDot, "en_ph": styleCommaDot, "en_sg": styleCommaDot, "en_us": styleCommaDot, "en_za": styleCommaDot,
"en_zm": styleCommaDot, "en_zw": styleCommaDot, "es_do": styleCommaDot, "es_gt": styleCommaDot, "es_hn": styleCommaDot, "es_ni": styleCommaDot,
"es_pa": styleCommaDot, "es_pr": styleCommaDot, "es_sv": styleCommaDot, "es_us": styleCommaDot, "fa_ir": styleCommaDot, "ga_ie": styleCommaDot,
"gd_gb": styleCommaDot, "gu_in": styleCommaDot, "gv_gb": styleCommaDot, "ha_ng": styleCommaDot, "he_il": styleCommaDot, "hi_in": styleCommaDot,
"hy_am": styleCommaDot, "ig_ng": styleCommaDot, "ik_ca": styleCommaDot, "iu_ca": styleCommaDot, "ja_jp": styleCommaDot, "km_kh": styleCommaDot,
"kn_in": styleCommaDot, "ko_kr": styleCommaDot, "ks_in": styleCommaDot, "kw_gb": styleCommaDot, "lg_ug": styleCommaDot, "lo_la": styleCommaDot,
"mi_nz": styleCommaDot, "mr_in": styleCommaDot, "ms_my": styleCommaDot, "mt_mt": styleCommaDot, "my_mm": styleCommaDot, "ne_np": styleCommaDot,
"nr_za": styleCommaDot, "om_et": styleCommaDot, "om_ke": styleCommaDot, "pa_in": styleCommaDot, "pa_pk": styleCommaDot, "sa_in": styleCommaDot,
"sd_in": styleCommaDot, "si_lk": styleCommaDot, "sm_ws": styleCommaDot, "so_et": styleCommaDot, "so_ke": styleCommaDot, "so_so": styleCommaDot,
"ss_za": styleCommaDot, "st_za": styleCommaDot, "sw_ke": styleCommaDot, "sw_tz": styleCommaDot, "th_th": styleCommaDot, "ti_et": styleCommaDot,
"tk_tm": styleCommaDot, "tl_ph": styleCommaDot, "tn_za": styleCommaDot, "to_to": styleCommaDot, "ts_za": styleCommaDot, "ug_cn": styleCommaDot,
"ur_in": styleCommaDot, "ur_pk": styleCommaDot, "ve_za": styleCommaDot, "xh_za": styleCommaDot, "yi_us": styleCommaDot, "yo_ng": styleCommaDot,
"zh_cn": styleCommaDot, "zh_hk": styleCommaDot, "zh_sg": styleCommaDot, "zh_tw": styleCommaDot, "zu_za": styleCommaDot,
"an_es": styleCommaDot, "az_az": styleCommaDot, "ca_ad": styleCommaDot, "ca_fr": styleCommaDot, "ca_it": styleCommaDot, "de_it": styleCommaDot,
"en_dk": styleCommaDot, "es_pe": styleCommaDot, "ff_sn": styleCommaDot, "fy_de": styleCommaDot, "fy_nl": styleCommaDot, "ka_ge": styleCommaDot,
"kl_gl": styleCommaDot, "ku_tr": styleCommaDot, "lb_lu": styleCommaDot, "li_be": styleCommaDot, "li_nl": styleCommaDot, "nl_aw": styleCommaDot,
"sc_it": styleCommaDot, "se_no": styleCommaDot, "sq_mk": styleCommaDot, "tg_tj": styleCommaDot, "tr_cy": styleCommaDot, "wa_be": styleCommaDot,
"br_fr": styleCommaDot, "kk_kz": styleCommaDot, "nn_no": styleCommaDot, "oc_fr": styleCommaDot, "uz_uz": styleCommaDot,
"bs_ba": styleCommaDot, "el_cy": styleCommaDot, "es_cu": styleCommaDot, "ln_cd": styleCommaDot, "mg_mg": styleCommaDot, "rw_rw": styleCommaDot, "sr_me": styleCommaDot, "wo_sn": styleCommaDot,
"es_mx": styleCommaDot,
"ce_ru": styleCommaDot, "cv_ru": styleCommaDot, "ht_ht": styleCommaDot, "ia_fr": styleCommaDot, "ky_kg": styleCommaDot, "os_ru": styleCommaDot, "tt_ru": styleCommaDot,
"aa_dj": styleCommaDot, "aa_er": styleCommaDot, "so_dj": styleCommaDot, "ti_er": styleCommaDot,
"ps_af": styleCommaDot,
"kv_ru": styleCommaDot,
"su_id": styleCommaDot,
// styleDotComma (123.456,78): Common in Europe and South America.
"be_by": styleDotComma, "da_dk": styleDotComma, "de_be": styleDotComma, "de_de": styleDotComma, "de_lu": styleDotComma,
"es_ar": styleDotComma, "es_bo": styleDotComma, "es_cl": styleDotComma, "es_co": styleDotComma,
"es_ec": styleDotComma, "es_es": styleDotComma, "es_py": styleDotComma, "es_uy": styleDotComma, "es_ve": styleDotComma,
"fo_fo": styleDotComma, "hu_hu": styleDotComma, "id_id": styleDotComma, "is_is": styleDotComma,
"lt_lt": styleDotComma, "mn_mn": styleDotComma, "ro_ro": styleDotComma, "ru_ua": styleDotComma, "sq_al": styleDotComma,
"tr_tr": styleDotComma, "vi_vn": styleDotComma,
"nb_no": styleDotComma, "uk_ua": styleDotComma,
"no_no": styleDotComma,
// styleSpaceComma (123 456,78): Uses space as thousands separator.
"cs_cz": styleSpaceComma, "es_cr": styleSpaceComma, "et_ee": styleSpaceComma, "fi_fi": styleSpaceComma,
"lv_lv": styleSpaceComma, "mk_mk": styleSpaceComma,
"ru_ru": styleSpaceComma, "sk_sk": styleSpaceComma, "sv_fi": styleSpaceComma, "sv_se": styleSpaceComma,
// styleNoneComma (123456,78): No thousands separator.
"el_gr": styleNoneComma, "gl_es": styleNoneComma, "pt_pt": styleNoneComma, "sl_si": styleNoneComma,
"ca_es": styleNoneComma, "de_at": styleNoneComma, "eu_es": styleNoneComma, "fr_be": styleNoneComma, "hr_hr": styleNoneComma, "it_it": styleNoneComma, "nl_be": styleNoneComma, "nl_nl": styleNoneComma, "pt_br": styleNoneComma,
"fr_ca": styleNoneComma, "fr_fr": styleNoneComma, "fr_lu": styleNoneComma, "pl_pl": styleNoneComma,
"fr_ch": styleNoneComma,
"bg_bg": styleNoneComma,
// styleAposDot (123'456.78): Uses apostrophe as thousands separator.
"de_ch": styleAposDot,
// styleAposComma (123'456,78): Uses apostrophe separator, comma decimal.
"it_ch": styleAposComma,
// styleNoneDot (123456.78): No thousands separator, dot decimal.
"ar_sa": styleNoneDot,
"sr_rs": styleNoneDot,
// styleIndian (1,23,45,67,890.123): Special Indian grouping (3,2,2,...).
"en_in": styleIndian,
"ta_in": styleIndian,
"te_in": styleIndian,
}
// GetLocaleFormatStyle returns the formatting rules and a bool indicating if the locale was found.
func GetLocaleFormatStyle(locale string) (LocaleFormatStyle, bool) {
styleID, ok := localeToStyleMap[strings.ToLower(locale)]
if !ok {
// Not found. Return default style, but also return 'false'.
return formatStyleMap[styleCommaDot], false
}
// Found. Return style and 'true'.
return formatStyleMap[styleID], true
}
// FormatByLocale returns (string, bool, error)
// The bool (found) is true if the locale was found in the map, false otherwise.
func FormatByLocale(number, precision, locale string) (string, bool, error) {
// 'locale' is guaranteed to be non-empty by the caller (builtin_string.go).
style, found := GetLocaleFormatStyle(locale)
// if not found, style is set to default (en_US)
formattedString, err := formatWithStyle(number, precision, style)
return formattedString, found, err
}
// formatWithStandardGrouping applies standard 3-digit grouping (e.g., 1,234,567)
func formatWithStandardGrouping(integerPart string, thousandsSep string) string {
var buffer bytes.Buffer
partLen := len(integerPart)
// Find position of first separator
pos := partLen % 3
if pos == 0 && partLen > 0 {
pos = 3
}
// Write the first group (1-3 digits)
buffer.WriteString(integerPart[:pos])
// Write subsequent 3-digit groups
for ; pos < partLen; pos += 3 {
buffer.WriteString(thousandsSep)
buffer.WriteString(integerPart[pos : pos+3])
}
return buffer.String()
}
// formatWithIndianGrouping applies Indian grouping (e.g., 1,23,45,67,890)
func formatWithIndianGrouping(integerPart string, thousandsSep string) string {
var buffer bytes.Buffer
s := integerPart
l := len(s)
if l <= 3 {
return s // No grouping needed
}
// Get the rightmost 3 digits (e.g., 890)
rightmost3 := s[l-3:]
// Get the remaining digits on the left (e.g., 1234567)
remaining := s[:l-3]
remLen := len(remaining)
// Get the first part (1 or 2 digits) (e.g., 1)
firstPartLen := remLen % 2
if firstPartLen == 0 && remLen > 0 {
firstPartLen = 2
}
if firstPartLen > 0 {
buffer.WriteString(remaining[:firstPartLen])
}
// Loop through the remaining 2-digit groups (e.g., 23, 45, 67)
for pos := firstPartLen; pos < remLen; pos += 2 {
buffer.WriteString(thousandsSep)
buffer.WriteString(remaining[pos : pos+2])
}
// Add the last separator and the rightmost 3 digits
buffer.WriteString(thousandsSep)
buffer.WriteString(rightmost3)
return buffer.String()
}
// formatWithStyle is the generic formatting function.
func formatWithStyle(number string, precision string, style LocaleFormatStyle) (string, error) {
var buffer bytes.Buffer
if unicode.IsDigit(rune(precision[0])) {
for i, v := range precision {
if unicode.IsDigit(v) {
continue
}
precision = precision[:i]
break
}
} else {
precision = "0"
}
if number[0] == '-' && number[1] == '.' {
number = strings.Replace(number, "-", "-0", 1)
} else if number[0] == '.' {
number = strings.Replace(number, ".", "0.", 1)
}
if (number[:1] == "-" && !unicode.IsDigit(rune(number[1]))) ||
(!unicode.IsDigit(rune(number[0])) && number[:1] != "-") {
buffer.WriteString("0")
position, err := strconv.ParseUint(precision, 10, 64)
if err == nil && position > 0 {
// Use style-defined decimal point
buffer.WriteString(style.DecimalPoint)
buffer.WriteString(strings.Repeat("0", int(position)))
}
return buffer.String(), nil
} else if number[:1] == "-" {
buffer.WriteString("-")
number = number[1:]
}
for i, v := range number {
if unicode.IsDigit(v) {
continue
} else if i == 1 && number[1] == '.' {
continue
} else if v == '.' && number[1] != '.' {
continue
}
number = number[:i]
break
}
parts := strings.Split(number, ".")
integerPart := parts[0]
var formattedIntegerPart string
// Apply grouping logic based on the locale style.
if len(style.ThousandsSep) == 0 {
// No separator (e.g., styleNoneComma), just use the integer part
formattedIntegerPart = integerPart
} else if style.IsIndianGrouping {
// Use 3,2,2... grouping for Indian locales.
formattedIntegerPart = formatWithIndianGrouping(integerPart, style.ThousandsSep)
} else {
// Use standard 3-digit grouping.
formattedIntegerPart = formatWithStandardGrouping(integerPart, style.ThousandsSep)
}
buffer.WriteString(formattedIntegerPart)
position, err := strconv.ParseUint(precision, 10, 64)
if err == nil {
if position > 0 {
buffer.WriteString(style.DecimalPoint) // Use style-defined decimal point
if len(parts) == 2 {
if uint64(len(parts[1])) >= position {
buffer.WriteString(parts[1][:position])
} else {
buffer.WriteString(parts[1])
buffer.WriteString(strings.Repeat("0", int(position)-len(parts[1])))
}
} else {
buffer.WriteString(strings.Repeat("0", int(position)))
}
}
}
return buffer.String(), nil
}
// Copyright 2021 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package mysql
import "slices"
// AllPrivilegeLiteral is the string literal for All Privilege.
const AllPrivilegeLiteral = "ALL PRIVILEGES"
// Priv2Str is the map for privilege to string.
var Priv2Str = map[PrivilegeType]string{
CreatePriv: "Create",
SelectPriv: "Select",
InsertPriv: "Insert",
UpdatePriv: "Update",
DeletePriv: "Delete",
ShowDBPriv: "Show Databases",
SuperPriv: "Super",
CreateUserPriv: "Create User",
CreateTablespacePriv: "Create Tablespace",
TriggerPriv: "Trigger",
DropPriv: "Drop",
ProcessPriv: "Process",
GrantPriv: "Grant Option",
ReferencesPriv: "References",
AlterPriv: "Alter",
ExecutePriv: "Execute",
IndexPriv: "Index",
CreateViewPriv: "Create View",
ShowViewPriv: "Show View",
CreateRolePriv: "Create Role",
DropRolePriv: "Drop Role",
CreateTMPTablePriv: "CREATE TEMPORARY TABLES",
LockTablesPriv: "LOCK TABLES",
CreateRoutinePriv: "CREATE ROUTINE",
AlterRoutinePriv: "ALTER ROUTINE",
EventPriv: "EVENT",
ShutdownPriv: "SHUTDOWN",
ReloadPriv: "RELOAD",
FilePriv: "FILE",
ConfigPriv: "CONFIG",
UsagePriv: "USAGE",
ReplicationClientPriv: "REPLICATION CLIENT",
ReplicationSlavePriv: "REPLICATION SLAVE",
AllPriv: AllPrivilegeLiteral,
}
// Priv2SetStr is the map for privilege to string.
var Priv2SetStr = map[PrivilegeType]string{
CreatePriv: "Create",
SelectPriv: "Select",
InsertPriv: "Insert",
UpdatePriv: "Update",
DeletePriv: "Delete",
DropPriv: "Drop",
GrantPriv: "Grant",
ReferencesPriv: "References",
LockTablesPriv: "Lock Tables",
CreateTMPTablePriv: "Create Temporary Tables",
EventPriv: "Event",
CreateRoutinePriv: "Create Routine",
AlterRoutinePriv: "Alter Routine",
AlterPriv: "Alter",
ExecutePriv: "Execute",
IndexPriv: "Index",
CreateViewPriv: "Create View",
ShowViewPriv: "Show View",
CreateRolePriv: "Create Role",
DropRolePriv: "Drop Role",
ShutdownPriv: "Shutdown Role",
TriggerPriv: "Trigger",
}
// SetStr2Priv is the map for privilege set string to privilege type.
var SetStr2Priv = map[string]PrivilegeType{
"Create": CreatePriv,
"Select": SelectPriv,
"Insert": InsertPriv,
"Update": UpdatePriv,
"Delete": DeletePriv,
"Drop": DropPriv,
"Grant": GrantPriv,
"References": ReferencesPriv,
"Lock Tables": LockTablesPriv,
"Create Temporary Tables": CreateTMPTablePriv,
"Event": EventPriv,
"Create Routine": CreateRoutinePriv,
"Alter Routine": AlterRoutinePriv,
"Alter": AlterPriv,
"Execute": ExecutePriv,
"Index": IndexPriv,
"Create View": CreateViewPriv,
"Show View": ShowViewPriv,
"Trigger": TriggerPriv,
}
// Priv2UserCol is the privilege to mysql.user table column name.
var Priv2UserCol = map[PrivilegeType]string{
CreatePriv: "Create_priv",
SelectPriv: "Select_priv",
InsertPriv: "Insert_priv",
UpdatePriv: "Update_priv",
DeletePriv: "Delete_priv",
ShowDBPriv: "Show_db_priv",
SuperPriv: "Super_priv",
CreateUserPriv: "Create_user_priv",
CreateTablespacePriv: "Create_tablespace_priv",
TriggerPriv: "Trigger_priv",
DropPriv: "Drop_priv",
ProcessPriv: "Process_priv",
GrantPriv: "Grant_priv",
ReferencesPriv: "References_priv",
AlterPriv: "Alter_priv",
ExecutePriv: "Execute_priv",
IndexPriv: "Index_priv",
CreateViewPriv: "Create_view_priv",
ShowViewPriv: "Show_view_priv",
CreateRolePriv: "Create_role_priv",
DropRolePriv: "Drop_role_priv",
CreateTMPTablePriv: "Create_tmp_table_priv",
LockTablesPriv: "Lock_tables_priv",
CreateRoutinePriv: "Create_routine_priv",
AlterRoutinePriv: "Alter_routine_priv",
EventPriv: "Event_priv",
ShutdownPriv: "Shutdown_priv",
ReloadPriv: "Reload_priv",
FilePriv: "File_priv",
ConfigPriv: "Config_priv",
ReplicationClientPriv: "Repl_client_priv",
ReplicationSlavePriv: "Repl_slave_priv",
}
// Col2PrivType is the privilege tables column name to privilege type.
var Col2PrivType = map[string]PrivilegeType{
"Create_priv": CreatePriv,
"Select_priv": SelectPriv,
"Insert_priv": InsertPriv,
"Update_priv": UpdatePriv,
"Delete_priv": DeletePriv,
"Show_db_priv": ShowDBPriv,
"Super_priv": SuperPriv,
"Create_user_priv": CreateUserPriv,
"Create_tablespace_priv": CreateTablespacePriv,
"Trigger_priv": TriggerPriv,
"Drop_priv": DropPriv,
"Process_priv": ProcessPriv,
"Grant_priv": GrantPriv,
"References_priv": ReferencesPriv,
"Alter_priv": AlterPriv,
"Execute_priv": ExecutePriv,
"Index_priv": IndexPriv,
"Create_view_priv": CreateViewPriv,
"Show_view_priv": ShowViewPriv,
"Create_role_priv": CreateRolePriv,
"Drop_role_priv": DropRolePriv,
"Create_tmp_table_priv": CreateTMPTablePriv,
"Lock_tables_priv": LockTablesPriv,
"Create_routine_priv": CreateRoutinePriv,
"Alter_routine_priv": AlterRoutinePriv,
"Event_priv": EventPriv,
"Shutdown_priv": ShutdownPriv,
"Reload_priv": ReloadPriv,
"File_priv": FilePriv,
"Config_priv": ConfigPriv,
"Repl_client_priv": ReplicationClientPriv,
"Repl_slave_priv": ReplicationSlavePriv,
}
// PrivilegeType privilege
type PrivilegeType uint64
// NewPrivFromColumn constructs priv from a column name. False means invalid priv column name.
func NewPrivFromColumn(col string) (PrivilegeType, bool) {
p, o := Col2PrivType[col]
return p, o
}
// NewPrivFromSetEnum constructs priv from a set enum. False means invalid priv enum.
func NewPrivFromSetEnum(e string) (PrivilegeType, bool) {
p, o := SetStr2Priv[e]
return p, o
}
// String returns the corresponding identifier in SQLs.
func (p PrivilegeType) String() string {
if s, ok := Priv2Str[p]; ok {
return s
}
return ""
}
// ColumnString returns the corresponding name of columns in mysql.user/mysql.db.
func (p PrivilegeType) ColumnString() string {
if s, ok := Priv2UserCol[p]; ok {
return s
}
return ""
}
// SetString returns the corresponding set enum string in Table_priv/Column_priv of mysql.tables_priv/mysql.columns_priv.
func (p PrivilegeType) SetString() string {
if s, ok := Priv2SetStr[p]; ok {
return s
}
return ""
}
const (
// UsagePriv is a synonym for “no privileges”
UsagePriv PrivilegeType = 1 << iota
// CreatePriv is the privilege to create schema/table.
CreatePriv
// SelectPriv is the privilege to read from table.
SelectPriv
// InsertPriv is the privilege to insert data into table.
InsertPriv
// UpdatePriv is the privilege to update data in table.
UpdatePriv
// DeletePriv is the privilege to delete data from table.
DeletePriv
// ShowDBPriv is the privilege to run show databases statement.
ShowDBPriv
// SuperPriv enables many operations and server behaviors.
SuperPriv
// CreateUserPriv is the privilege to create user.
CreateUserPriv
// TriggerPriv is not checked yet.
TriggerPriv
// DropPriv is the privilege to drop schema/table.
DropPriv
// ProcessPriv pertains to display of information about the threads executing within the server.
ProcessPriv
// GrantPriv is the privilege to grant privilege to user.
GrantPriv
// ReferencesPriv is not checked yet.
ReferencesPriv
// AlterPriv is the privilege to run alter statement.
AlterPriv
// ExecutePriv is the privilege to run execute statement.
ExecutePriv
// IndexPriv is the privilege to create/drop index.
IndexPriv
// CreateViewPriv is the privilege to create view.
CreateViewPriv
// ShowViewPriv is the privilege to show create view.
ShowViewPriv
// CreateRolePriv the privilege to create a role.
CreateRolePriv
// DropRolePriv is the privilege to drop a role.
DropRolePriv
// CreateTMPTablePriv is the privilege to create a local temporary table.
CreateTMPTablePriv
// LockTablesPriv is the privilege to lock tables.
LockTablesPriv
// CreateRoutinePriv is the privilege to create a stored routine.
CreateRoutinePriv
// AlterRoutinePriv is the privilege to alter a stored routine.
AlterRoutinePriv
// EventPriv is the privilege to event.
EventPriv
// ShutdownPriv the privilege to shutdown a server.
ShutdownPriv
// ReloadPriv is the privilege to enable the use of the FLUSH statement.
ReloadPriv
// FilePriv is the privilege to enable the use of LOAD DATA and SELECT ... INTO OUTFILE.
FilePriv
// ConfigPriv is the privilege to enable the use SET CONFIG statements.
ConfigPriv
// CreateTablespacePriv is the privilege to create tablespace.
CreateTablespacePriv
// ReplicationClientPriv is used in MySQL replication
ReplicationClientPriv
// ReplicationSlavePriv is used in MySQL replication
ReplicationSlavePriv
// AllPriv is the privilege for all actions.
AllPriv
/*
* Please add the new priv before AllPriv to keep the values consistent across versions.
*/
// ExtendedPriv is used to successful parse privileges not included above.
// these are dynamic privileges in MySQL 8.0 and other extended privileges like LOAD FROM S3 in Aurora.
ExtendedPriv
)
// AllPrivMask is the mask for PrivilegeType with all bits set to 1.
// If it's passed to RequestVerification, it means any privilege would be OK.
const AllPrivMask = AllPriv - 1
// Privileges is the list of all privileges.
type Privileges []PrivilegeType
// Has checks whether PrivilegeType has the privilege.
func (privs Privileges) Has(p PrivilegeType) bool {
return slices.Contains(privs, p)
}
// AllGlobalPrivs is all the privileges in global scope.
var AllGlobalPrivs = Privileges{SelectPriv, InsertPriv, UpdatePriv, DeletePriv, CreatePriv, DropPriv, ProcessPriv, ReferencesPriv, AlterPriv, ShowDBPriv, SuperPriv, ExecutePriv, IndexPriv, CreateUserPriv, CreateTablespacePriv, TriggerPriv, CreateViewPriv, ShowViewPriv, CreateRolePriv, DropRolePriv, CreateTMPTablePriv, LockTablesPriv, CreateRoutinePriv, AlterRoutinePriv, EventPriv, ShutdownPriv, ReloadPriv, FilePriv, ConfigPriv, ReplicationClientPriv, ReplicationSlavePriv}
// AllDBPrivs is all the privileges in database scope.
var AllDBPrivs = Privileges{SelectPriv, InsertPriv, UpdatePriv, DeletePriv, CreatePriv, DropPriv, ReferencesPriv, LockTablesPriv, CreateTMPTablePriv, EventPriv, CreateRoutinePriv, AlterRoutinePriv, AlterPriv, ExecutePriv, IndexPriv, CreateViewPriv, ShowViewPriv, TriggerPriv}
// AllTablePrivs is all the privileges in table scope.
var AllTablePrivs = Privileges{SelectPriv, InsertPriv, UpdatePriv, DeletePriv, CreatePriv, DropPriv, IndexPriv, ReferencesPriv, AlterPriv, CreateViewPriv, ShowViewPriv, TriggerPriv}
// AllColumnPrivs is all the privileges in column scope.
var AllColumnPrivs = Privileges{SelectPriv, InsertPriv, UpdatePriv, ReferencesPriv}
// StaticGlobalOnlyPrivs is all the privileges only in global scope and different from dynamic privileges.
var StaticGlobalOnlyPrivs = Privileges{ProcessPriv, ShowDBPriv, SuperPriv, CreateUserPriv, CreateTablespacePriv, ShutdownPriv, ReloadPriv, FilePriv, ReplicationClientPriv, ReplicationSlavePriv, ConfigPriv}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package mysql
// MySQL type information.
const (
TypeUnspecified byte = 0
TypeTiny byte = 1 // TINYINT
TypeShort byte = 2 // SMALLINT
TypeLong byte = 3 // INT
TypeFloat byte = 4
TypeDouble byte = 5
TypeNull byte = 6
TypeTimestamp byte = 7
TypeLonglong byte = 8 // BIGINT
TypeInt24 byte = 9 // MEDIUMINT
TypeDate byte = 10
/* TypeDuration original name was TypeTime, renamed to TypeDuration to resolve the conflict with Go type Time.*/
TypeDuration byte = 11
TypeDatetime byte = 12
TypeYear byte = 13
TypeNewDate byte = 14
TypeVarchar byte = 15
TypeBit byte = 16
TypeJSON byte = 0xf5
TypeNewDecimal byte = 0xf6
TypeEnum byte = 0xf7
TypeSet byte = 0xf8
TypeTinyBlob byte = 0xf9
TypeMediumBlob byte = 0xfa
TypeLongBlob byte = 0xfb
TypeBlob byte = 0xfc
TypeVarString byte = 0xfd
TypeString byte = 0xfe /* TypeString is char type */
TypeGeometry byte = 0xff
TypeTiDBVectorFloat32 byte = 0xe1
)
// Flag information.
const (
NotNullFlag uint = 1 << 0 /* Field can't be NULL */
PriKeyFlag uint = 1 << 1 /* Field is part of a primary key */
UniqueKeyFlag uint = 1 << 2 /* Field is part of a unique key */
MultipleKeyFlag uint = 1 << 3 /* Field is part of a key */
BlobFlag uint = 1 << 4 /* Field is a blob */
UnsignedFlag uint = 1 << 5 /* Field is unsigned */
ZerofillFlag uint = 1 << 6 /* Field is zerofill */
BinaryFlag uint = 1 << 7 /* Field is binary */
EnumFlag uint = 1 << 8 /* Field is an enum */
AutoIncrementFlag uint = 1 << 9 /* Field is an auto increment field */
TimestampFlag uint = 1 << 10 /* Field is a timestamp */
SetFlag uint = 1 << 11 /* Field is a set */
NoDefaultValueFlag uint = 1 << 12 /* Field doesn't have a default value */
OnUpdateNowFlag uint = 1 << 13 /* Field is set to NOW on UPDATE */
PartKeyFlag uint = 1 << 14 /* Intern: Part of some keys */
NumFlag uint = 1 << 15 /* Field is a num (for clients) */
GroupFlag uint = 1 << 15 /* Internal: Group field */
UniqueFlag uint = 1 << 16 /* Internal: Used by sql_yacc */
BinCmpFlag uint = 1 << 17 /* Internal: Used by sql_yacc */
ParseToJSONFlag uint = 1 << 18 /* Internal: Used when we want to parse string to JSON in CAST */
IsBooleanFlag uint = 1 << 19 /* Internal: Used for telling boolean literal from integer */
PreventNullInsertFlag uint = 1 << 20 /* Prevent this Field from inserting NULL values */
EnumSetAsIntFlag uint = 1 << 21 /* Internal: Used for inferring enum eval type. */
DropColumnIndexFlag uint = 1 << 22 /* Internal: Used for indicate the column is being dropped with index */
GeneratedColumnFlag uint = 1 << 23 /* Internal: TiFlash will check this flag and add a placeholder for this column */
UnderScoreCharsetFlag uint = 1 << 24 /* Internal: Indicate whether charset is specified by underscore like _latin1'abc' */
)
// TypeInt24 bounds.
const (
MaxUint24 = 1<<24 - 1
MaxInt24 = 1<<23 - 1
MinInt24 = -1 << 23
)
// HasDropColumnWithIndexFlag checks if DropColumnIndexFlag is set.
func HasDropColumnWithIndexFlag(flag uint) bool {
return (flag & DropColumnIndexFlag) > 0
}
// HasNotNullFlag checks if NotNullFlag is set.
func HasNotNullFlag(flag uint) bool {
return (flag & NotNullFlag) > 0
}
// HasNoDefaultValueFlag checks if NoDefaultValueFlag is set.
func HasNoDefaultValueFlag(flag uint) bool {
return (flag & NoDefaultValueFlag) > 0
}
// HasAutoIncrementFlag checks if AutoIncrementFlag is set.
func HasAutoIncrementFlag(flag uint) bool {
return (flag & AutoIncrementFlag) > 0
}
// HasUnsignedFlag checks if UnsignedFlag is set.
func HasUnsignedFlag(flag uint) bool {
return (flag & UnsignedFlag) > 0
}
// HasZerofillFlag checks if ZerofillFlag is set.
func HasZerofillFlag(flag uint) bool {
return (flag & ZerofillFlag) > 0
}
// HasBinaryFlag checks if BinaryFlag is set.
func HasBinaryFlag(flag uint) bool {
return (flag & BinaryFlag) > 0
}
// HasPriKeyFlag checks if PriKeyFlag is set.
func HasPriKeyFlag(flag uint) bool {
return (flag & PriKeyFlag) > 0
}
// HasUniKeyFlag checks if UniqueKeyFlag is set.
func HasUniKeyFlag(flag uint) bool {
return (flag & UniqueKeyFlag) > 0
}
// HasMultipleKeyFlag checks if MultipleKeyFlag is set.
func HasMultipleKeyFlag(flag uint) bool {
return (flag & MultipleKeyFlag) > 0
}
// HasTimestampFlag checks if HasTimestampFlag is set.
func HasTimestampFlag(flag uint) bool {
return (flag & TimestampFlag) > 0
}
// HasOnUpdateNowFlag checks if OnUpdateNowFlag is set.
func HasOnUpdateNowFlag(flag uint) bool {
return (flag & OnUpdateNowFlag) > 0
}
// HasParseToJSONFlag checks if ParseToJSONFlag is set.
func HasParseToJSONFlag(flag uint) bool {
return (flag & ParseToJSONFlag) > 0
}
// HasIsBooleanFlag checks if IsBooleanFlag is set.
func HasIsBooleanFlag(flag uint) bool {
return (flag & IsBooleanFlag) > 0
}
// HasPreventNullInsertFlag checks if PreventNullInsertFlag is set.
func HasPreventNullInsertFlag(flag uint) bool {
return (flag & PreventNullInsertFlag) > 0
}
// HasEnumSetAsIntFlag checks if EnumSetAsIntFlag is set.
func HasEnumSetAsIntFlag(flag uint) bool {
return (flag & EnumSetAsIntFlag) > 0
}
// HasFlag checks if a flag is set.
func HasFlag(flag uint, flagItem uint) bool {
return (flag & flagItem) > 0
}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package mysql
type lengthAndDecimal struct {
length int64
decimal int
}
// defaultLengthAndDecimal provides default flen and decimal for fields
// from CREATE TABLE when they are unspecified.
var defaultLengthAndDecimal = map[byte]lengthAndDecimal{
TypeBit: {1, 0},
TypeTiny: {4, 0},
TypeShort: {6, 0},
TypeInt24: {9, 0},
TypeLong: {11, 0},
TypeLonglong: {20, 0},
TypeDouble: {22, -1},
TypeFloat: {12, -1},
TypeNewDecimal: {10, 0},
TypeDuration: {10, 0},
TypeDate: {10, 0},
TypeTimestamp: {19, 0},
TypeDatetime: {19, 0},
TypeYear: {4, 0},
TypeString: {1, 0},
TypeVarchar: {5, 0},
TypeVarString: {5, 0},
TypeTinyBlob: {255, 0},
TypeBlob: {65535, 0},
TypeMediumBlob: {16777215, 0},
TypeLongBlob: {4294967295, 0},
TypeJSON: {4294967295, 0},
TypeNull: {0, 0},
TypeSet: {-1, 0},
TypeEnum: {-1, 0},
}
// IsIntegerType indicate whether tp is an integer type.
func IsIntegerType(tp byte) bool {
switch tp {
case TypeTiny, TypeShort, TypeInt24, TypeLong, TypeLonglong:
return true
}
return false
}
// GetDefaultFieldLengthAndDecimal returns the default display length (flen) and decimal length for column.
// Call this when no flen assigned in ddl.
// or column value is calculated from an expression.
// For example: "select count(*) from t;", the column type is int64 and flen in ResultField will be 21.
// See https://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html
func GetDefaultFieldLengthAndDecimal(tp byte) (flen, decimal int) {
val, ok := defaultLengthAndDecimal[tp]
if ok {
return int(val.length), val.decimal
}
return -1, -1
}
// defaultLengthAndDecimal provides default flen and decimal for fields
// from CAST when they are unspecified.
var defaultLengthAndDecimalForCast = map[byte]lengthAndDecimal{
TypeString: {0, -1}, // flen & decimal differs.
TypeDate: {10, 0},
TypeDatetime: {19, 0},
TypeNewDecimal: {10, 0},
TypeDuration: {10, 0},
TypeLonglong: {22, 0},
TypeDouble: {22, -1},
TypeFloat: {12, -1},
TypeJSON: {4194304, 0}, // flen differs.
}
// GetDefaultFieldLengthAndDecimalForCast returns the default display length (flen) and decimal length for casted column
// when flen or decimal is not specified.
func GetDefaultFieldLengthAndDecimalForCast(tp byte) (flen, decimal int) {
val, ok := defaultLengthAndDecimalForCast[tp]
if ok {
return int(val.length), val.decimal
}
return -1, -1
}
// IsAuthPluginClearText is used to indicated that the plugin need clear-text password.
func IsAuthPluginClearText(authPlugin string) bool {
return authPlugin == AuthNativePassword ||
authPlugin == AuthTiDBSM3Password ||
authPlugin == AuthCachingSha2Password
}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package opcode
import (
"io"
"github.com/pingcap/tidb/pkg/parser/format"
)
// Op is opcode type.
type Op int
// List operators.
const (
LogicAnd Op = iota + 1
LeftShift
RightShift
LogicOr
GE
LE
EQ
NE
LT
GT
Plus
Minus
And
Or
Mod
Xor
Div
Mul
Not
Not2
BitNeg
IntDiv
LogicXor
NullEQ
In
Like
Case
Regexp
IsNull
IsTruth
IsFalsity
)
var ops = [...]struct {
name string
literal string
isKeyword bool
}{
LogicAnd: {
name: "and",
literal: "AND",
isKeyword: true,
},
LogicOr: {
name: "or",
literal: "OR",
isKeyword: true,
},
LogicXor: {
name: "xor",
literal: "XOR",
isKeyword: true,
},
LeftShift: {
name: "leftshift",
literal: "<<",
isKeyword: false,
},
RightShift: {
name: "rightshift",
literal: ">>",
isKeyword: false,
},
GE: {
name: "ge",
literal: ">=",
isKeyword: false,
},
LE: {
name: "le",
literal: "<=",
isKeyword: false,
},
EQ: {
name: "eq",
literal: "=",
isKeyword: false,
},
NE: {
name: "ne",
literal: "!=", // perhaps should use `<>` here
isKeyword: false,
},
LT: {
name: "lt",
literal: "<",
isKeyword: false,
},
GT: {
name: "gt",
literal: ">",
isKeyword: false,
},
Plus: {
name: "plus",
literal: "+",
isKeyword: false,
},
Minus: {
name: "minus",
literal: "-",
isKeyword: false,
},
And: {
name: "bitand",
literal: "&",
isKeyword: false,
},
Or: {
name: "bitor",
literal: "|",
isKeyword: false,
},
Mod: {
name: "mod",
literal: "%",
isKeyword: false,
},
Xor: {
name: "bitxor",
literal: "^",
isKeyword: false,
},
Div: {
name: "div",
literal: "/",
isKeyword: false,
},
Mul: {
name: "mul",
literal: "*",
isKeyword: false,
},
Not: {
name: "not",
literal: "not ",
isKeyword: true,
},
Not2: {
name: "!",
literal: "!",
isKeyword: false,
},
BitNeg: {
name: "bitneg",
literal: "~",
isKeyword: false,
},
IntDiv: {
name: "intdiv",
literal: "DIV",
isKeyword: true,
},
NullEQ: {
name: "nulleq",
literal: "<=>",
isKeyword: false,
},
In: {
name: "in",
literal: "IN",
isKeyword: true,
},
Like: {
name: "like",
literal: "LIKE",
isKeyword: true,
},
Case: {
name: "case",
literal: "CASE",
isKeyword: true,
},
Regexp: {
name: "regexp",
literal: "REGEXP",
isKeyword: true,
},
IsNull: {
name: "isnull",
literal: "IS NULL",
isKeyword: true,
},
IsTruth: {
name: "istrue",
literal: "IS TRUE",
isKeyword: true,
},
IsFalsity: {
name: "isfalse",
literal: "IS FALSE",
isKeyword: true,
},
}
// String implements Stringer interface.
func (o Op) String() string {
return ops[o].name
}
// Format the ExprNode into a Writer.
func (o Op) Format(w io.Writer) {
io.WriteString(w, ops[o].literal)
}
// IsKeyword returns whether the operator is a keyword.
func (o Op) IsKeyword() bool {
return ops[o].isKeyword
}
// Restore the Op into a Writer
func (o Op) Restore(ctx *format.RestoreCtx) error {
info := &ops[o]
if info.isKeyword {
ctx.WriteKeyWord(info.literal)
} else {
ctx.WritePlain(info.literal)
}
return nil
}
// Code generated by goyacc DO NOT EDIT.
// Copyright 2013 The ql Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSES/QL-LICENSE file.
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
// Initial yacc source generated by ebnf2y[1]
// at 2013-10-04 23:10:47.861401015 +0200 CEST
//
// $ ebnf2y -o ql.y -oe ql.ebnf -start StatementList -pkg ql -p _
//
// [1]: http://github.com/cznic/ebnf2y
package parser
import __yyfmt__ "fmt"
import (
"strings"
"time"
"github.com/pingcap/tidb/pkg/parser/ast"
"github.com/pingcap/tidb/pkg/parser/auth"
"github.com/pingcap/tidb/pkg/parser/charset"
"github.com/pingcap/tidb/pkg/parser/duration"
"github.com/pingcap/tidb/pkg/parser/mysql"
"github.com/pingcap/tidb/pkg/parser/opcode"
"github.com/pingcap/tidb/pkg/parser/types"
)
type likeEscapeSpec struct {
escape string
explicit bool
}
func getMaskingPolicyRestrictOp(name string) (ast.MaskingPolicyRestrictOps, bool) {
switch strings.ToUpper(name) {
case ast.MaskingPolicyRestrictNameInsertIntoSelect:
return ast.MaskingPolicyRestrictOpInsertIntoSelect, true
case ast.MaskingPolicyRestrictNameUpdateSelect:
return ast.MaskingPolicyRestrictOpUpdateSelect, true
case ast.MaskingPolicyRestrictNameDeleteSelect:
return ast.MaskingPolicyRestrictOpDeleteSelect, true
case ast.MaskingPolicyRestrictNameCTAS:
return ast.MaskingPolicyRestrictOpCTAS, true
}
return ast.MaskingPolicyRestrictOpNone, false
}
type yySymType struct {
yys int
offset int // offset
item interface{}
ident string
expr ast.ExprNode
statement ast.StmtNode
}
type yyXError struct {
state, xsym int
}
const (
yyDefault = 58248
yyEOFCode = 57344
account = 57596
action = 57597
add = 57363
addColumnarReplicaOnDemand = 57598
addDate = 57996
admin = 58126
advise = 57599
affinity = 57600
after = 57601
against = 57602
ago = 57603
algorithm = 57604
all = 57364
alter = 57365
always = 57605
analyze = 57366
and = 57367
andand = 57358
andnot = 58207
any = 57606
apply = 57607
approxCountDistinct = 57997
approxPercentile = 57998
array = 57368
as = 57369
asc = 57370
ascii = 57608
asof = 57347
assignmentEq = 58208
attribute = 57609
attributes = 57610
autoIdCache = 57612
autoIncrement = 57613
autoRandom = 57614
autoRandomBase = 57615
autoextendSize = 57611
avg = 57616
avgRowLength = 57617
backend = 57618
background = 57999
backup = 57619
backups = 57620
batch = 58127
bdr = 57621
begin = 57622
bernoulli = 57623
between = 57371
bigIntType = 57372
binaryType = 57373
binding = 57624
bindingCache = 57626
bindings = 57625
binlog = 57627
bitAnd = 58000
bitLit = 58206
bitOr = 58001
bitType = 57628
bitXor = 58002
blobType = 57374
block = 57629
boolType = 57630
booleanType = 57631
both = 57375
bound = 58003
br = 58004
briefType = 58005
btree = 57632
buckets = 58128
builtinApproxCountDistinct = 58129
builtinApproxPercentile = 58130
builtinBitAnd = 58131
builtinBitOr = 58132
builtinBitXor = 58133
builtinCast = 58134
builtinCount = 58135
builtinCurDate = 58136
builtinCurTime = 58137
builtinDateAdd = 58138
builtinDateSub = 58139
builtinExtract = 58140
builtinGroupConcat = 58141
builtinMax = 58142
builtinMin = 58143
builtinNow = 58144
builtinPosition = 58145
builtinStddevPop = 58147
builtinStddevSamp = 58148
builtinSubstring = 58149
builtinSum = 58150
builtinSysDate = 58151
builtinTranslate = 58152
builtinTrim = 58153
builtinUser = 58154
builtinVarPop = 58155
builtinVarSamp = 58156
builtins = 58146
burstable = 58006
by = 57376
byteType = 57633
cache = 57634
calibrate = 57635
call = 57377
cancel = 58157
capture = 57636
cardinality = 58158
cascade = 57378
cascaded = 57637
caseKwd = 57379
cast = 58007
causal = 57638
chain = 57639
change = 57380
charType = 57381
character = 57382
charsetKwd = 57640
check = 57383
checkpoint = 57641
checksum = 57642
checksumConcurrency = 57643
cipher = 57644
cleanup = 57645
client = 57646
clientErrorsSummary = 57647
close = 57648
cluster = 57649
clustered = 57650
cmSketch = 58159
coalesce = 57651
collate = 57384
collation = 57652
column = 57385
columnFormat = 57655
columnStatsUsage = 58160
columnar = 57653
columns = 57654
comment = 57656
commit = 57657
committed = 57658
compact = 57659
compress = 58008
compressed = 57660
compression = 57661
compressionLevel = 57662
compressionType = 57663
concurrency = 57664
config = 57665
connection = 57666
consistency = 57667
consistent = 57668
constraint = 57386
constraints = 58009
context = 57669
continueKwd = 57387
convert = 57388
cooldown = 58010
copyKwd = 58011
correlation = 58161
cpu = 57670
create = 57389
createTableSelect = 58231
cross = 57390
csvBackslashEscape = 57671
csvDelimiter = 57672
csvHeader = 57673
csvNotNull = 57674
csvNull = 57675
csvSeparator = 57676
csvTrimLastSeparators = 57677
cumeDist = 57391
curDate = 58012
curTime = 58013
current = 57678
currentDate = 57392
currentRole = 57393
currentTime = 57394
currentTs = 57395
currentUser = 57396
cursor = 57397
cycle = 57679
data = 57680
database = 57398
databases = 57399
dateAdd = 58014
dateSub = 58015
dateType = 57681
datetimeType = 57682
day = 57683
dayHour = 57400
dayMicrosecond = 57401
dayMinute = 57402
daySecond = 57403
ddl = 58162
deallocate = 57684
decLit = 58203
decimalType = 57404
declare = 57685
defaultKwd = 57405
defined = 58016
definer = 57686
delayKeyWrite = 57687
delayed = 57406
deleteKwd = 57407
denseRank = 57408
dependency = 58163
depth = 58164
desc = 57409
describe = 57410
digest = 57688
directory = 57689
disable = 57690
disabled = 57691
discard = 57692
disk = 57693
distinct = 57411
distinctRow = 57412
distribute = 58165
distribution = 58166
distributions = 58167
div = 57413
do = 57694
dotType = 58017
doubleAtIdentifier = 57355
doubleType = 57414
drop = 57415
dry = 58168
dryRun = 58018
dual = 57416
dump = 58019
duplicate = 57695
dynamic = 57696
elseIfKwd = 57418
elseKwd = 57417
empty = 58221
enable = 57697
enabled = 57698
enclosed = 57419
encryption = 57699
encryptionKeyFile = 57700
encryptionMethod = 57701
end = 57702
endTime = 58020
enforced = 57703
engine = 57704
engine_attribute = 57706
engines = 57705
enum = 57707
eq = 58209
yyErrCode = 57345
errorKwd = 57708
escape = 57710
escaped = 57420
event = 57711
events = 57712
evolve = 57713
exact = 58021
except = 57421
exchange = 57714
exclusive = 57715
execElapsed = 58022
execute = 57716
exists = 57422
exit = 57423
expansion = 57717
expire = 57718
explain = 57424
explore = 57719
exprPushdownBlacklist = 58023
extended = 57720
extract = 58024
failedLoginAttempts = 57721
falseKwd = 57425
faultsSym = 57722
fetch = 57426
fields = 57723
file = 57724
first = 57725
firstValue = 57427
fixed = 57726
flashback = 58025
float4Type = 57429
float8Type = 57430
floatLit = 58202
floatType = 57428
flush = 57727
follower = 58026
followerConstraints = 58027
followers = 58028
following = 57728
forKwd = 57431
force = 57432
foreign = 57433
format = 57729
found = 57730
from = 57434
full = 57731
fullBackupStorage = 58029
fulltext = 57435
function = 57732
gcTTL = 58030
ge = 58210
general = 57733
generated = 57436
getFormat = 58031
global = 57734
grant = 57437
grants = 57735
group = 57438
groupConcat = 58032
groups = 57439
handler = 57736
hash = 57737
having = 57440
help = 57738
hexLit = 58205
high = 58033
highPriority = 57441
higherThanComma = 58247
higherThanParenthese = 58241
higherThanReturning = 58237
hintComment = 57357
histogram = 57739
histogramsInFlight = 58169
history = 57740
hnsw = 58054
hosts = 57741
hour = 57742
hourMicrosecond = 57442
hourMinute = 57443
hourSecond = 57444
hypo = 57743
identSQLErrors = 57709
identified = 57744
identifier = 57346
ietfQuotes = 57745
ifKwd = 57445
ignore = 57446
ignoreStats = 57746
ilike = 57447
importKwd = 57747
imports = 57748
in = 57448
increment = 57749
incremental = 57750
index = 57449
indexes = 57751
infile = 57450
inner = 57451
inout = 57452
inplace = 58034
insert = 57453
insertMethod = 57752
insertValues = 58229
instance = 57753
instant = 58035
int1Type = 57455
int2Type = 57456
int3Type = 57457
int4Type = 57458
int8Type = 57459
intLit = 58204
intType = 57454
integerType = 57460
internal = 58036
intersect = 57461
interval = 57462
into = 57463
invalid = 57356
inverted = 58037
invisible = 57754
invoker = 57755
io = 57756
ioReadBandwidth = 58038
ioWriteBandwidth = 58039
ipc = 57757
is = 57464
isolation = 57758
issuer = 57759
iterate = 57465
job = 58170
jobs = 58171
join = 57466
jsonArrayagg = 58040
jsonObjectAgg = 58041
jsonSumCrc32 = 58042
jsonType = 57760
jss = 58212
juss = 58213
key = 57467
keyBlockSize = 57761
keys = 57468
kill = 57469
labels = 57762
lag = 57470
language = 57763
last = 57764
lastBackup = 57766
lastValue = 57471
lastval = 57765
lateral = 57472
le = 58211
lead = 57473
leader = 58043
leaderConstraints = 58044
leading = 57474
learner = 58045
learnerConstraints = 58046
learners = 58047
leave = 57475
left = 57476
less = 57767
level = 57768
like = 57477
limit = 57478
linear = 57479
lines = 57480
list = 57769
lite = 58172
load = 57481
loadStats = 57770
local = 57771
localTime = 57482
localTs = 57483
location = 57772
lock = 57484
locked = 57773
log = 58048
logs = 57774
long = 57485
longblobType = 57486
longtextType = 57487
low = 58049
lowPriority = 57488
lowerThanCharsetKwd = 58232
lowerThanComma = 58246
lowerThanCreateTableSelect = 58230
lowerThanEq = 58243
lowerThanFunction = 58238
lowerThanInsertValues = 58228
lowerThanKey = 58233
lowerThanLocal = 58234
lowerThanNot = 58245
lowerThanOn = 58242
lowerThanParenthese = 58240
lowerThanRemove = 58235
lowerThanSelectOpt = 58222
lowerThanSelectStmt = 58227
lowerThanSetKeyword = 58226
lowerThanStringLitToken = 58225
lowerThanValueKeyword = 58223
lowerThanWith = 58224
lowerThenOrder = 58236
lsh = 58214
masking = 57775
master = 57776
match = 57489
max = 58050
maxConnectionsPerHour = 57777
maxQueriesPerHour = 57780
maxRows = 57781
maxUpdatesPerHour = 57782
maxUserConnections = 57783
maxValue = 57490
max_idxnum = 57778
max_minutes = 57779
mb = 57784
medium = 58051
mediumIntType = 57492
mediumblobType = 57491
mediumtextType = 57493
member = 57785
memberof = 57350
memory = 57786
merge = 57787
metadata = 58052
microsecond = 57788
middleIntType = 57494
min = 58053
minRows = 57791
minValue = 57790
minute = 57789
minuteMicrosecond = 57495
minuteSecond = 57496
mod = 57497
mode = 57792
moderated = 58115
modify = 57793
monitor = 57794
month = 57795
names = 57796
national = 57797
natural = 57498
ncharType = 57798
ndvRate = 58173
neg = 58244
neq = 58215
neqSynonym = 58216
never = 57799
next = 57800
next_row_id = 58055
nextval = 57801
no = 57802
noWriteToBinLog = 57500
nocache = 57803
nocycle = 57804
nodeID = 58174
nodeState = 58175
nodegroup = 57805
nomaxvalue = 57806
nominvalue = 57807
nonclustered = 57808
none = 57809
not = 57499
not2 = 58220
now = 58056
nowait = 57810
nthValue = 57501
ntile = 57502
null = 57503
nulleq = 58217
nulls = 57811
numericType = 57504
nvarcharType = 57812
odbcDateType = 57360
odbcTimeType = 57361
odbcTimestampType = 57362
of = 57505
off = 57813
offset = 57814
oltpReadOnly = 57815
oltpReadWrite = 57816
oltpWriteOnly = 57817
on = 57506
onDuplicate = 57820
online = 57818
only = 57819
open = 57821
optRuleBlacklist = 58057
optimistic = 58176
optimize = 57507
option = 57508
optional = 57822
optionally = 57509
optionallyEnclosedBy = 57351
or = 57510
order = 57511
out = 57512
outer = 57513
outfile = 57514
over = 57515
packKeys = 57823
pageChecksum = 57825
pageCompressed = 57826
pageCompressionLevel = 57827
pageSym = 57824
paramMarker = 58218
parser = 57828
partial = 57829
partition = 57516
partitioning = 57830
partitions = 57831
password = 57832
passwordLockTime = 57833
pause = 57834
per_db = 57836
per_table = 57837
percent = 57835
percentRank = 57517
pessimistic = 58177
pipes = 57359
pipesAsOr = 57838
placement = 58058
plan = 58060
planCache = 58059
plugins = 57839
point = 57840
policies = 58178
policy = 57841
position = 58061
preSplitRegions = 57845
preceding = 57842
precisionType = 57518
predicate = 58062
prepare = 57843
preserve = 57844
primary = 57519
primaryRegion = 58063
priority = 58064
privileges = 57846
procedure = 57520
process = 57847
processedKeys = 58065
processlist = 57848
profile = 57849
profiles = 57850
proxy = 57851
purge = 57852
quarter = 57853
queries = 57854
query = 57855
queryLimit = 58066
quick = 57856
rangeKwd = 57521
rank = 57522
rateLimit = 57857
raw = 58179
read = 57523
readOnly = 58067
realType = 57524
rebuild = 57858
recent = 58068
recommend = 57859
recover = 57860
recursive = 57525
redundant = 57861
references = 57526
refresh = 57862
regexpKwd = 57527
region = 58180
regions = 58181
release = 57528
reload = 57863
remove = 57864
rename = 57529
reorganize = 57865
repair = 57866
repeat = 57530
repeatable = 57867
replace = 57531
replay = 58069
replayer = 58070
replica = 57868
replicas = 57869
replication = 57870
require = 57532
required = 57871
reset = 58182
resource = 57872
respect = 57873
restart = 57874
restore = 57875
restoredTS = 58071
restores = 57876
restrict = 57533
resume = 57877
returning = 57878
reuse = 57879
reverse = 57880
revoke = 57534
right = 57535
rlike = 57536
role = 57881
rollback = 57882
rollup = 57883
routine = 57884
row = 57537
rowCount = 57885
rowFormat = 57886
rowNumber = 57539
rows = 57538
rsh = 58219
rtree = 57887
ru = 58072
ruRate = 58074
rule = 57888
run = 58183
running = 58073
s3 = 58075
sampleRate = 58184
samples = 58185
san = 57889
savepoint = 57890
schedule = 58076
second = 57891
secondMicrosecond = 57540
secondary = 57892
secondaryEngine = 57893
secondaryEngineAttribute = 57894
secondaryLoad = 57895
secondaryUnload = 57896
security = 57897
selectKwd = 57541
sendCredentialsToTiKV = 57898
separator = 57899
sequence = 57900
serial = 57901
serializable = 57902
session = 57903
sessionStates = 58186
set = 57542
setval = 57904
shardRowIDBits = 57905
share = 57906
shared = 57907
show = 57543
shutdown = 57908
signed = 57909
similar = 58077
simple = 57910
singleAtIdentifier = 57354
skip = 57911
skipSchemaFiles = 57912
slave = 57913
slow = 57914
smallIntType = 57544
snapshot = 57915
some = 57916
source = 57917
spatial = 57545
speed = 58078
split = 58187
sql = 57546
sqlBigResult = 57550
sqlBufferResult = 57918
sqlCache = 57919
sqlCalcFoundRows = 57551
sqlNoCache = 57920
sqlSmallResult = 57552
sqlTsiDay = 57921
sqlTsiHour = 57922
sqlTsiMinute = 57923
sqlTsiMonth = 57924
sqlTsiQuarter = 57925
sqlTsiSecond = 57926
sqlTsiWeek = 57927
sqlTsiYear = 57928
sqlexception = 57547
sqlstate = 57548
sqlwarning = 57549
ssl = 57553
staleness = 58079
start = 57929
startTS = 58081
startTime = 58080
starting = 57554
statistics = 58188
stats = 58189
statsAutoRecalc = 57930
statsBuckets = 58190
statsColChoice = 57931
statsColList = 57932
statsDelta = 58191
statsExtended = 58192
statsHealthy = 58193
statsHistograms = 58194
statsLocked = 58195
statsMeta = 58196
statsOptions = 57933
statsPersistent = 57934
statsSamplePages = 57935
statsSampleRate = 57936
statsTopN = 58197
status = 57937
std = 58085
stddev = 58082
stddevPop = 58083
stddevSamp = 58084
stop = 58086
storage = 57938
stored = 57555
straightJoin = 57556
strict = 58087
strictFormat = 57939
stringLit = 57353
strong = 58088
subDate = 58089
subject = 57940
subpartition = 57941
subpartitions = 57942
substring = 58090
sum = 58091
super = 57943
survivalPreferences = 58092
swaps = 57944
switchGroup = 58093
switchesSym = 57945
system = 57946
systemTime = 57947
tableChecksum = 57950
tableKwd = 57557
tableRefPriority = 58239
tableSample = 57558
tables = 57948
tablespace = 57949
target = 58094
taskTypes = 58095
temporary = 57951
temptable = 57952
terminated = 57559
textType = 57953
than = 57954
then = 57560
tiFlash = 58199
tidb = 58198
tidbCurrentTSO = 57561
tidbJson = 58096
tikvImporter = 57955
timeDuration = 58097
timeType = 57956
timeout = 57957
timestampAdd = 58098
timestampDiff = 58099
timestampType = 57958
tinyIntType = 57563
tinyblobType = 57562
tinytextType = 57564
tls = 58100
to = 57565
toTSO = 57349
toTimestamp = 57348
tokenIssuer = 57959
tokudbDefault = 58101
tokudbFast = 58102
tokudbLzma = 58103
tokudbQuickLZ = 58104
tokudbSmall = 58105
tokudbSnappy = 58106
tokudbUncompressed = 58107
tokudbZlib = 58108
tokudbZstd = 58109
top = 58110
topn = 58200
tp = 57972
tpcc = 57960
tpch10 = 57961
trace = 57962
traditional = 57963
traffic = 58111
trailing = 57566
transaction = 57964
transactional = 57965
trigger = 57567
triggers = 57966
trim = 58112
trueCardCost = 58113
trueKwd = 57568
truncate = 57967
tsoType = 57968
ttl = 57969
ttlEnable = 57970
ttlJobInterval = 57971
unbounded = 57973
uncommitted = 57974
undefined = 57975
underscoreCS = 57352
unicodeSym = 57976
union = 57569
unique = 57570
unknown = 57977
unlimited = 58114
unlock = 57571
unset = 57978
unsigned = 57572
until = 57573
untilTS = 58116
update = 57574
usage = 57575
use = 57576
user = 57979
using = 57577
utcDate = 57578
utcTime = 57579
utcTimestamp = 57580
utilizationLimit = 58117
validation = 57980
value = 57981
values = 57581
varPop = 58119
varSamp = 58120
varbinaryType = 57582
varcharType = 57583
varcharacter = 57584
variables = 57982
variance = 58118
varying = 57585
vectorType = 57983
verboseType = 58121
view = 57984
virtual = 57586
visible = 57985
voter = 58124
voterConstraints = 58122
voters = 58123
wait = 57986
waitTiflashReady = 57987
warnings = 57988
watch = 58125
week = 57989
weightString = 57990
when = 57587
where = 57588
while = 57589
width = 58201
window = 57590
with = 57591
withSysTable = 57992
without = 57991
workload = 57993
write = 57592
x509 = 57994
xor = 57593
yearMonth = 57594
yearType = 57995
zerofill = 57595
yyMaxDepth = 200
yyTabOfs = -3096
)
var (
yyXLAT = map[int]int{
59: 0, // ';' (2750x)
57344: 1, // $end (2737x)
58187: 2, // split (2222x)
57864: 3, // remove (2180x)
57787: 4, // merge (2179x)
57865: 5, // reorganize (2178x)
57656: 6, // comment (2145x)
57894: 7, // secondaryEngineAttribute (2081x)
57938: 8, // storage (2043x)
44: 9, // ',' (2040x)
57613: 10, // autoIncrement (2032x)
57725: 11, // first (1925x)
57601: 12, // after (1919x)
57901: 13, // serial (1915x)
57614: 14, // autoRandom (1910x)
57655: 15, // columnFormat (1910x)
57878: 16, // returning (1890x)
57832: 17, // password (1882x)
57640: 18, // charsetKwd (1862x)
57642: 19, // checksum (1852x)
58058: 20, // placement (1849x)
57761: 21, // keyBlockSize (1846x)
57845: 22, // preSplitRegions (1846x)
57949: 23, // tablespace (1829x)
57699: 24, // encryption (1827x)
57704: 25, // engine (1825x)
57680: 26, // data (1822x)
57706: 27, // engine_attribute (1820x)
57752: 28, // insertMethod (1820x)
57781: 29, // maxRows (1820x)
57791: 30, // minRows (1820x)
57805: 31, // nodegroup (1820x)
57666: 32, // connection (1812x)
57900: 33, // sequence (1810x)
57615: 34, // autoRandomBase (1809x)
57600: 35, // affinity (1807x)
58190: 36, // statsBuckets (1807x)
58197: 37, // statsTopN (1807x)
57969: 38, // ttl (1807x)
57611: 39, // autoextendSize (1806x)
57612: 40, // autoIdCache (1806x)
57617: 41, // avgRowLength (1806x)
57661: 42, // compression (1806x)
57687: 43, // delayKeyWrite (1806x)
57745: 44, // ietfQuotes (1806x)
57823: 45, // packKeys (1806x)
57825: 46, // pageChecksum (1806x)
57826: 47, // pageCompressed (1806x)
57827: 48, // pageCompressionLevel (1806x)
57886: 49, // rowFormat (1806x)
57893: 50, // secondaryEngine (1806x)
57905: 51, // shardRowIDBits (1806x)
57930: 52, // statsAutoRecalc (1806x)
57931: 53, // statsColChoice (1806x)
57932: 54, // statsColList (1806x)
57934: 55, // statsPersistent (1806x)
57935: 56, // statsSamplePages (1806x)
57936: 57, // statsSampleRate (1806x)
57950: 58, // tableChecksum (1806x)
57965: 59, // transactional (1806x)
57970: 60, // ttlEnable (1806x)
57971: 61, // ttlJobInterval (1806x)
57872: 62, // resource (1777x)
41: 63, // ')' (1765x)
57609: 64, // attribute (1748x)
57346: 65, // identifier (1747x)
57596: 66, // account (1746x)
57721: 67, // failedLoginAttempts (1746x)
57833: 68, // passwordLockTime (1746x)
57771: 69, // local (1743x)
57701: 70, // encryptionMethod (1736x)
57734: 71, // global (1736x)
57909: 72, // signed (1733x)
57877: 73, // resume (1732x)
57915: 74, // snapshot (1731x)
57618: 75, // backend (1729x)
57641: 76, // checkpoint (1729x)
57643: 77, // checksumConcurrency (1729x)
57662: 78, // compressionLevel (1729x)
57663: 79, // compressionType (1729x)
57664: 80, // concurrency (1729x)
57671: 81, // csvBackslashEscape (1729x)
57672: 82, // csvDelimiter (1729x)
57673: 83, // csvHeader (1729x)
57674: 84, // csvNotNull (1729x)
57675: 85, // csvNull (1729x)
57676: 86, // csvSeparator (1729x)
57677: 87, // csvTrimLastSeparators (1729x)
57700: 88, // encryptionKeyFile (1729x)
58029: 89, // fullBackupStorage (1729x)
58030: 90, // gcTTL (1729x)
57746: 91, // ignoreStats (1729x)
57766: 92, // lastBackup (1729x)
57770: 93, // loadStats (1729x)
57820: 94, // onDuplicate (1729x)
57818: 95, // online (1729x)
57857: 96, // rateLimit (1729x)
58071: 97, // restoredTS (1729x)
57898: 98, // sendCredentialsToTiKV (1729x)
57912: 99, // skipSchemaFiles (1729x)
58081: 100, // startTS (1729x)
57939: 101, // strictFormat (1729x)
57955: 102, // tikvImporter (1729x)
58116: 103, // untilTS (1729x)
57987: 104, // waitTiflashReady (1729x)
57992: 105, // withSysTable (1729x)
57972: 106, // tp (1727x)
57650: 107, // clustered (1726x)
57754: 108, // invisible (1726x)
57808: 109, // nonclustered (1726x)
57985: 110, // visible (1726x)
57598: 111, // addColumnarReplicaOnDemand (1725x)
57604: 112, // algorithm (1723x)
57622: 113, // begin (1723x)
57657: 114, // commit (1723x)
57802: 115, // no (1723x)
57882: 116, // rollback (1723x)
57929: 117, // start (1721x)
57967: 118, // truncate (1720x)
57597: 119, // action (1719x)
57634: 120, // cache (1718x)
57803: 121, // nocache (1717x)
57821: 122, // open (1717x)
57648: 123, // close (1716x)
57679: 124, // cycle (1716x)
57790: 125, // minValue (1716x)
57702: 126, // end (1715x)
57749: 127, // increment (1715x)
57804: 128, // nocycle (1715x)
57806: 129, // nomaxvalue (1715x)
57807: 130, // nominvalue (1715x)
57874: 131, // restart (1713x)
58181: 132, // regions (1712x)
57995: 133, // yearType (1712x)
57999: 134, // background (1710x)
58006: 135, // burstable (1710x)
58064: 136, // priority (1710x)
58066: 137, // queryLimit (1710x)
58074: 138, // ruRate (1710x)
57928: 139, // sqlTsiYear (1709x)
58060: 140, // plan (1708x)
57941: 141, // subpartition (1708x)
57831: 142, // partitions (1707x)
58097: 143, // timeDuration (1707x)
58009: 144, // constraints (1705x)
58027: 145, // followerConstraints (1705x)
58028: 146, // followers (1705x)
58044: 147, // leaderConstraints (1705x)
58046: 148, // learnerConstraints (1705x)
58047: 149, // learners (1705x)
58063: 150, // primaryRegion (1705x)
58076: 151, // schedule (1705x)
58092: 152, // survivalPreferences (1705x)
58122: 153, // voterConstraints (1705x)
58123: 154, // voters (1705x)
57747: 155, // importKwd (1704x)
58125: 156, // watch (1704x)
57654: 157, // columns (1703x)
58022: 158, // execElapsed (1703x)
58065: 159, // processedKeys (1703x)
58072: 160, // ru (1703x)
57979: 161, // user (1703x)
57984: 162, // view (1703x)
57683: 163, // day (1702x)
58016: 164, // defined (1700x)
57891: 165, // second (1700x)
57742: 166, // hour (1699x)
57788: 167, // microsecond (1699x)
57789: 168, // minute (1699x)
57795: 169, // month (1699x)
57853: 170, // quarter (1699x)
57921: 171, // sqlTsiDay (1699x)
57922: 172, // sqlTsiHour (1699x)
57923: 173, // sqlTsiMinute (1699x)
57924: 174, // sqlTsiMonth (1699x)
57925: 175, // sqlTsiQuarter (1699x)
57926: 176, // sqlTsiSecond (1699x)
57927: 177, // sqlTsiWeek (1699x)
57989: 178, // week (1699x)
57608: 179, // ascii (1698x)
57633: 180, // byteType (1698x)
57937: 181, // status (1698x)
57948: 182, // tables (1698x)
57976: 183, // unicodeSym (1698x)
57723: 184, // fields (1697x)
57760: 185, // jsonType (1697x)
58067: 186, // readOnly (1697x)
58078: 187, // speed (1697x)
57649: 188, // cluster (1696x)
57682: 189, // datetimeType (1696x)
57681: 190, // dateType (1696x)
57774: 191, // logs (1696x)
57956: 192, // timeType (1696x)
57983: 193, // vectorType (1696x)
57726: 194, // fixed (1695x)
57841: 195, // policy (1694x)
57855: 196, // query (1694x)
57899: 197, // separator (1694x)
57958: 198, // timestampType (1694x)
57631: 199, // booleanType (1693x)
57644: 200, // cipher (1693x)
58008: 201, // compress (1693x)
57759: 202, // issuer (1693x)
57777: 203, // maxConnectionsPerHour (1693x)
57780: 204, // maxQueriesPerHour (1693x)
57782: 205, // maxUpdatesPerHour (1693x)
57783: 206, // maxUserConnections (1693x)
57842: 207, // preceding (1693x)
57889: 208, // san (1693x)
57940: 209, // subject (1693x)
57953: 210, // textType (1693x)
57959: 211, // tokenIssuer (1693x)
57628: 212, // bitType (1692x)
57630: 213, // boolType (1692x)
58020: 214, // endTime (1692x)
57707: 215, // enum (1692x)
57731: 216, // full (1692x)
58171: 217, // jobs (1692x)
57797: 218, // national (1692x)
57798: 219, // ncharType (1692x)
57812: 220, // nvarcharType (1692x)
58080: 221, // startTime (1692x)
58095: 222, // taskTypes (1692x)
58117: 223, // utilizationLimit (1692x)
57625: 224, // bindings (1691x)
57690: 225, // disable (1691x)
57697: 226, // enable (1691x)
58170: 227, // job (1691x)
57678: 228, // current (1690x)
57686: 229, // definer (1690x)
57737: 230, // hash (1690x)
57744: 231, // identified (1690x)
57873: 232, // respect (1690x)
57881: 233, // role (1690x)
57981: 234, // value (1690x)
57619: 235, // backup (1689x)
57703: 236, // enforced (1689x)
57728: 237, // following (1689x)
57767: 238, // less (1689x)
58172: 239, // lite (1689x)
57810: 240, // nowait (1689x)
57819: 241, // only (1689x)
57890: 242, // savepoint (1689x)
57911: 243, // skip (1689x)
57954: 244, // than (1689x)
58199: 245, // tiFlash (1689x)
57973: 246, // unbounded (1689x)
57624: 247, // binding (1688x)
57743: 248, // hypo (1688x)
57775: 249, // masking (1688x)
58055: 250, // next_row_id (1688x)
57813: 251, // off (1688x)
57814: 252, // offset (1688x)
58062: 253, // predicate (1688x)
57868: 254, // replica (1688x)
58189: 255, // stats (1688x)
57951: 256, // temporary (1688x)
58114: 257, // unlimited (1688x)
57688: 258, // digest (1687x)
57772: 259, // location (1687x)
58059: 260, // planCache (1687x)
57843: 261, // prepare (1687x)
57977: 262, // unknown (1687x)
57986: 263, // wait (1687x)
57632: 264, // btree (1686x)
58010: 265, // cooldown (1686x)
58162: 266, // ddl (1686x)
57685: 267, // declare (1686x)
58018: 268, // dryRun (1686x)
57729: 269, // format (1686x)
58054: 270, // hnsw (1686x)
58037: 271, // inverted (1686x)
57758: 272, // isolation (1686x)
57764: 273, // last (1686x)
57786: 274, // memory (1686x)
58173: 275, // ndvRate (1686x)
57800: 276, // next (1686x)
57822: 277, // optional (1686x)
57846: 278, // privileges (1686x)
57871: 279, // required (1686x)
57887: 280, // rtree (1686x)
58184: 281, // sampleRate (1686x)
57903: 282, // session (1686x)
57914: 283, // slow (1686x)
58093: 284, // switchGroup (1686x)
58111: 285, // traffic (1686x)
57980: 286, // validation (1686x)
57982: 287, // variables (1686x)
57610: 288, // attributes (1685x)
58157: 289, // cancel (1685x)
57636: 290, // capture (1685x)
57659: 291, // compact (1685x)
58167: 292, // distributions (1685x)
57694: 293, // do (1685x)
57696: 294, // dynamic (1685x)
57708: 295, // errorKwd (1685x)
58021: 296, // exact (1685x)
57727: 297, // flush (1685x)
57736: 298, // handler (1685x)
57740: 299, // history (1685x)
57784: 300, // mb (1685x)
57792: 301, // mode (1685x)
57809: 302, // none (1685x)
57834: 303, // pause (1685x)
57839: 304, // plugins (1685x)
57848: 305, // processlist (1685x)
57860: 306, // recover (1685x)
57866: 307, // repair (1685x)
57867: 308, // repeatable (1685x)
58077: 309, // similar (1685x)
58188: 310, // statistics (1685x)
57942: 311, // subpartitions (1685x)
58198: 312, // tidb (1685x)
57991: 313, // without (1685x)
58126: 314, // admin (1684x)
58127: 315, // batch (1684x)
57621: 316, // bdr (1684x)
57627: 317, // binlog (1684x)
57629: 318, // block (1684x)
58004: 319, // br (1684x)
58005: 320, // briefType (1684x)
58128: 321, // buckets (1684x)
57635: 322, // calibrate (1684x)
58158: 323, // cardinality (1684x)
57639: 324, // chain (1684x)
57647: 325, // clientErrorsSummary (1684x)
58159: 326, // cmSketch (1684x)
57651: 327, // coalesce (1684x)
57660: 328, // compressed (1684x)
57669: 329, // context (1684x)
58011: 330, // copyKwd (1684x)
58161: 331, // correlation (1684x)
57670: 332, // cpu (1684x)
57684: 333, // deallocate (1684x)
58163: 334, // dependency (1684x)
57689: 335, // directory (1684x)
57692: 336, // discard (1684x)
57693: 337, // disk (1684x)
58165: 338, // distribute (1684x)
58166: 339, // distribution (1684x)
58017: 340, // dotType (1684x)
58168: 341, // dry (1684x)
57695: 342, // duplicate (1684x)
57714: 343, // exchange (1684x)
57716: 344, // execute (1684x)
57717: 345, // expansion (1684x)
58025: 346, // flashback (1684x)
57733: 347, // general (1684x)
57738: 348, // help (1684x)
58033: 349, // high (1684x)
57739: 350, // histogram (1684x)
57741: 351, // hosts (1684x)
57709: 352, // identSQLErrors (1684x)
57750: 353, // incremental (1684x)
57751: 354, // indexes (1684x)
58034: 355, // inplace (1684x)
57753: 356, // instance (1684x)
58035: 357, // instant (1684x)
57757: 358, // ipc (1684x)
57762: 359, // labels (1684x)
57773: 360, // locked (1684x)
58049: 361, // low (1684x)
58051: 362, // medium (1684x)
58052: 363, // metadata (1684x)
58115: 364, // moderated (1684x)
57793: 365, // modify (1684x)
57801: 366, // nextval (1684x)
57811: 367, // nulls (1684x)
57824: 368, // pageSym (1684x)
57852: 369, // purge (1684x)
57858: 370, // rebuild (1684x)
57859: 371, // recommend (1684x)
57861: 372, // redundant (1684x)
57862: 373, // refresh (1684x)
57863: 374, // reload (1684x)
57875: 375, // restore (1684x)
57884: 376, // routine (1684x)
57888: 377, // rule (1684x)
58183: 378, // run (1684x)
58075: 379, // s3 (1684x)
58185: 380, // samples (1684x)
57895: 381, // secondaryLoad (1684x)
57896: 382, // secondaryUnload (1684x)
57906: 383, // share (1684x)
57908: 384, // shutdown (1684x)
57913: 385, // slave (1684x)
57917: 386, // source (1684x)
58191: 387, // statsDelta (1684x)
58192: 388, // statsExtended (1684x)
57933: 389, // statsOptions (1684x)
58086: 390, // stop (1684x)
57944: 391, // swaps (1684x)
58096: 392, // tidbJson (1684x)
58101: 393, // tokudbDefault (1684x)
58102: 394, // tokudbFast (1684x)
58103: 395, // tokudbLzma (1684x)
58104: 396, // tokudbQuickLZ (1684x)
58105: 397, // tokudbSmall (1684x)
58106: 398, // tokudbSnappy (1684x)
58107: 399, // tokudbUncompressed (1684x)
58108: 400, // tokudbZlib (1684x)
58109: 401, // tokudbZstd (1684x)
58200: 402, // topn (1684x)
57962: 403, // trace (1684x)
57963: 404, // traditional (1684x)
58113: 405, // trueCardCost (1684x)
58121: 406, // verboseType (1684x)
57988: 407, // warnings (1684x)
57993: 408, // workload (1684x)
57602: 409, // against (1683x)
57603: 410, // ago (1683x)
57605: 411, // always (1683x)
57607: 412, // apply (1683x)
57620: 413, // backups (1683x)
57623: 414, // bernoulli (1683x)
57626: 415, // bindingCache (1683x)
58146: 416, // builtins (1683x)
57637: 417, // cascaded (1683x)
57638: 418, // causal (1683x)
57645: 419, // cleanup (1683x)
57646: 420, // client (1683x)
57652: 421, // collation (1683x)
57653: 422, // columnar (1683x)
58160: 423, // columnStatsUsage (1683x)
57658: 424, // committed (1683x)
57665: 425, // config (1683x)
57667: 426, // consistency (1683x)
57668: 427, // consistent (1683x)
58164: 428, // depth (1683x)
57691: 429, // disabled (1683x)
58019: 430, // dump (1683x)
57698: 431, // enabled (1683x)
57705: 432, // engines (1683x)
57712: 433, // events (1683x)
57713: 434, // evolve (1683x)
57718: 435, // expire (1683x)
58023: 436, // exprPushdownBlacklist (1683x)
57720: 437, // extended (1683x)
57722: 438, // faultsSym (1683x)
57730: 439, // found (1683x)
57732: 440, // function (1683x)
57735: 441, // grants (1683x)
58169: 442, // histogramsInFlight (1683x)
58036: 443, // internal (1683x)
57755: 444, // invoker (1683x)
57756: 445, // io (1683x)
57763: 446, // language (1683x)
57768: 447, // level (1683x)
57769: 448, // list (1683x)
58048: 449, // log (1683x)
57776: 450, // master (1683x)
57794: 451, // monitor (1683x)
57799: 452, // never (1683x)
57815: 453, // oltpReadOnly (1683x)
57816: 454, // oltpReadWrite (1683x)
57817: 455, // oltpWriteOnly (1683x)
58176: 456, // optimistic (1683x)
58057: 457, // optRuleBlacklist (1683x)
57828: 458, // parser (1683x)
57829: 459, // partial (1683x)
57830: 460, // partitioning (1683x)
57835: 461, // percent (1683x)
58177: 462, // pessimistic (1683x)
57840: 463, // point (1683x)
58178: 464, // policies (1683x)
57844: 465, // preserve (1683x)
57849: 466, // profile (1683x)
57850: 467, // profiles (1683x)
57854: 468, // queries (1683x)
58179: 469, // raw (1683x)
58068: 470, // recent (1683x)
58180: 471, // region (1683x)
58069: 472, // replay (1683x)
58070: 473, // replayer (1683x)
57876: 474, // restores (1683x)
57879: 475, // reuse (1683x)
57883: 476, // rollup (1683x)
57892: 477, // secondary (1683x)
57897: 478, // security (1683x)
57902: 479, // serializable (1683x)
58186: 480, // sessionStates (1683x)
57910: 481, // simple (1683x)
58193: 482, // statsHealthy (1683x)
58194: 483, // statsHistograms (1683x)
58195: 484, // statsLocked (1683x)
58196: 485, // statsMeta (1683x)
57945: 486, // switchesSym (1683x)
57946: 487, // system (1683x)
57947: 488, // systemTime (1683x)
58094: 489, // target (1683x)
57952: 490, // temptable (1683x)
57957: 491, // timeout (1683x)
58100: 492, // tls (1683x)
58110: 493, // top (1683x)
57960: 494, // tpcc (1683x)
57961: 495, // tpch10 (1683x)
57964: 496, // transaction (1683x)
57966: 497, // triggers (1683x)
57974: 498, // uncommitted (1683x)
57975: 499, // undefined (1683x)
57978: 500, // unset (1683x)
58201: 501, // width (1683x)
57994: 502, // x509 (1683x)
57996: 503, // addDate (1682x)
57599: 504, // advise (1682x)
57606: 505, // any (1682x)
57997: 506, // approxCountDistinct (1682x)
57998: 507, // approxPercentile (1682x)
57616: 508, // avg (1682x)
58000: 509, // bitAnd (1682x)
58001: 510, // bitOr (1682x)
58002: 511, // bitXor (1682x)
58003: 512, // bound (1682x)
58007: 513, // cast (1682x)
58012: 514, // curDate (1682x)
58013: 515, // curTime (1682x)
58014: 516, // dateAdd (1682x)
58015: 517, // dateSub (1682x)
57710: 518, // escape (1682x)
57711: 519, // event (1682x)
57715: 520, // exclusive (1682x)
57719: 521, // explore (1682x)
58024: 522, // extract (1682x)
57724: 523, // file (1682x)
58026: 524, // follower (1682x)
58031: 525, // getFormat (1682x)
58032: 526, // groupConcat (1682x)
57748: 527, // imports (1682x)
58038: 528, // ioReadBandwidth (1682x)
58039: 529, // ioWriteBandwidth (1682x)
58040: 530, // jsonArrayagg (1682x)
58041: 531, // jsonObjectAgg (1682x)
58042: 532, // jsonSumCrc32 (1682x)
57765: 533, // lastval (1682x)
58043: 534, // leader (1682x)
58045: 535, // learner (1682x)
58050: 536, // max (1682x)
57778: 537, // max_idxnum (1682x)
57779: 538, // max_minutes (1682x)
57785: 539, // member (1682x)
58053: 540, // min (1682x)
57796: 541, // names (1682x)
58174: 542, // nodeID (1682x)
58175: 543, // nodeState (1682x)
58056: 544, // now (1682x)
57836: 545, // per_db (1682x)
57837: 546, // per_table (1682x)
58061: 547, // position (1682x)
57847: 548, // process (1682x)
57851: 549, // proxy (1682x)
57856: 550, // quick (1682x)
57869: 551, // replicas (1682x)
57870: 552, // replication (1682x)
58182: 553, // reset (1682x)
57880: 554, // reverse (1682x)
57885: 555, // rowCount (1682x)
58073: 556, // running (1682x)
57904: 557, // setval (1682x)
57907: 558, // shared (1682x)
57916: 559, // some (1682x)
57918: 560, // sqlBufferResult (1682x)
57919: 561, // sqlCache (1682x)
57920: 562, // sqlNoCache (1682x)
58079: 563, // staleness (1682x)
58085: 564, // std (1682x)
58082: 565, // stddev (1682x)
58083: 566, // stddevPop (1682x)
58084: 567, // stddevSamp (1682x)
58087: 568, // strict (1682x)
58088: 569, // strong (1682x)
58089: 570, // subDate (1682x)
58090: 571, // substring (1682x)
58091: 572, // sum (1682x)
57943: 573, // super (1682x)
58098: 574, // timestampAdd (1682x)
58099: 575, // timestampDiff (1682x)
58112: 576, // trim (1682x)
57968: 577, // tsoType (1682x)
58118: 578, // variance (1682x)
58119: 579, // varPop (1682x)
58120: 580, // varSamp (1682x)
58124: 581, // voter (1682x)
57990: 582, // weightString (1682x)
40: 583, // '(' (1593x)
57506: 584, // on (1588x)
57353: 585, // stringLit (1450x)
57591: 586, // with (1448x)
57516: 587, // partition (1443x)
58220: 588, // not2 (1368x)
57405: 589, // defaultKwd (1328x)
57499: 590, // not (1301x)
57369: 591, // as (1282x)
57384: 592, // collate (1235x)
57569: 593, // union (1209x)
57577: 594, // using (1208x)
57476: 595, // left (1203x)
57535: 596, // right (1203x)
43: 597, // '+' (1175x)
45: 598, // '-' (1173x)
57497: 599, // mod (1151x)
57581: 600, // values (1131x)
57503: 601, // null (1127x)
57446: 602, // ignore (1111x)
57531: 603, // replace (1108x)
58204: 604, // intLit (1096x)
58209: 605, // eq (1093x)
57381: 606, // charType (1090x)
57421: 607, // except (1088x)
57461: 608, // intersect (1087x)
57588: 609, // where (1084x)
57426: 610, // fetch (1069x)
57542: 611, // set (1066x)
57478: 612, // limit (1061x)
57431: 613, // forKwd (1057x)
42: 614, // '*' (1055x)
57484: 615, // lock (1054x)
57463: 616, // into (1053x)
57434: 617, // from (1047x)
57432: 618, // force (1033x)
57511: 619, // order (1033x)
57367: 620, // and (1026x)
57510: 621, // or (1002x)
57358: 622, // andand (1001x)
57838: 623, // pipesAsOr (1001x)
57593: 624, // xor (1001x)
57438: 625, // group (971x)
57440: 626, // having (964x)
57556: 627, // straightJoin (956x)
57590: 628, // window (950x)
57576: 629, // use (945x)
57466: 630, // join (944x)
57445: 631, // ifKwd (937x)
57409: 632, // desc (935x)
57477: 633, // like (934x)
57498: 634, // natural (934x)
57390: 635, // cross (933x)
57451: 636, // inner (933x)
57373: 637, // binaryType (932x)
125: 638, // '}' (930x)
57424: 639, // explain (929x)
57453: 640, // insert (924x)
57538: 641, // rows (914x)
57557: 642, // tableKwd (912x)
57587: 643, // when (908x)
57417: 644, // elseKwd (904x)
57521: 645, // rangeKwd (904x)
57533: 646, // restrict (904x)
57558: 647, // tableSample (904x)
57439: 648, // groups (903x)
57400: 649, // dayHour (901x)
57401: 650, // dayMicrosecond (901x)
57402: 651, // dayMinute (901x)
57403: 652, // daySecond (901x)
57442: 653, // hourMicrosecond (901x)
57443: 654, // hourMinute (901x)
57444: 655, // hourSecond (901x)
57495: 656, // minuteMicrosecond (901x)
57496: 657, // minuteSecond (901x)
57540: 658, // secondMicrosecond (901x)
57594: 659, // yearMonth (901x)
57370: 660, // asc (899x)
57448: 661, // in (893x)
57560: 662, // then (893x)
57379: 663, // caseKwd (887x)
57530: 664, // repeat (887x)
60: 665, // '<' (885x)
62: 666, // '>' (885x)
57425: 667, // falseKwd (885x)
57354: 668, // singleAtIdentifier (885x)
57568: 669, // trueKwd (885x)
58203: 670, // decLit (884x)
58202: 671, // floatLit (884x)
47: 672, // '/' (883x)
57371: 673, // between (883x)
58210: 674, // ge (883x)
57464: 675, // is (883x)
58211: 676, // le (883x)
58215: 677, // neq (883x)
58216: 678, // neqSynonym (883x)
58217: 679, // nulleq (883x)
37: 680, // '%' (882x)
38: 681, // '&' (882x)
94: 682, // '^' (882x)
124: 683, // '|' (882x)
57413: 684, // div (882x)
58214: 685, // lsh (882x)
58219: 686, // rsh (882x)
57396: 687, // currentUser (875x)
58205: 688, // hexLit (871x)
57447: 689, // ilike (870x)
57527: 690, // regexpKwd (870x)
57536: 691, // rlike (870x)
57541: 692, // selectKwd (870x)
58206: 693, // bitLit (869x)
57350: 694, // memberof (867x)
57537: 695, // row (867x)
57462: 696, // interval (866x)
58218: 697, // paramMarker (865x)
123: 698, // '{' (863x)
57467: 699, // key (860x)
57398: 700, // database (859x)
57422: 701, // exists (858x)
57352: 702, // underscoreCS (858x)
57388: 703, // convert (856x)
58136: 704, // builtinCurDate (855x)
58144: 705, // builtinNow (855x)
57392: 706, // currentDate (855x)
57395: 707, // currentTs (855x)
57482: 708, // localTime (855x)
57483: 709, // localTs (855x)
57355: 710, // doubleAtIdentifier (854x)
58135: 711, // builtinCount (852x)
57519: 712, // primary (852x)
33: 713, // '!' (851x)
126: 714, // '~' (851x)
58129: 715, // builtinApproxCountDistinct (851x)
58130: 716, // builtinApproxPercentile (851x)
58131: 717, // builtinBitAnd (851x)
58132: 718, // builtinBitOr (851x)
58133: 719, // builtinBitXor (851x)
58134: 720, // builtinCast (851x)
58137: 721, // builtinCurTime (851x)
58138: 722, // builtinDateAdd (851x)
58139: 723, // builtinDateSub (851x)
58140: 724, // builtinExtract (851x)
58141: 725, // builtinGroupConcat (851x)
58142: 726, // builtinMax (851x)
58143: 727, // builtinMin (851x)
58145: 728, // builtinPosition (851x)
58147: 729, // builtinStddevPop (851x)
58148: 730, // builtinStddevSamp (851x)
58149: 731, // builtinSubstring (851x)
58150: 732, // builtinSum (851x)
58151: 733, // builtinSysDate (851x)
58152: 734, // builtinTranslate (851x)
58153: 735, // builtinTrim (851x)
58154: 736, // builtinUser (851x)
58155: 737, // builtinVarPop (851x)
58156: 738, // builtinVarSamp (851x)
57391: 739, // cumeDist (851x)
57393: 740, // currentRole (851x)
57394: 741, // currentTime (851x)
57408: 742, // denseRank (851x)
57427: 743, // firstValue (851x)
57470: 744, // lag (851x)
57471: 745, // lastValue (851x)
57473: 746, // lead (851x)
57501: 747, // nthValue (851x)
57502: 748, // ntile (851x)
57517: 749, // percentRank (851x)
57522: 750, // rank (851x)
57539: 751, // rowNumber (851x)
57561: 752, // tidbCurrentTSO (851x)
57578: 753, // utcDate (851x)
57579: 754, // utcTime (851x)
57580: 755, // utcTimestamp (851x)
57383: 756, // check (849x)
57546: 757, // sql (849x)
57570: 758, // unique (842x)
57386: 759, // constraint (839x)
57526: 760, // references (837x)
57436: 761, // generated (833x)
57359: 762, // pipes (832x)
57382: 763, // character (822x)
57449: 764, // index (808x)
57489: 765, // match (788x)
57574: 766, // update (734x)
57565: 767, // to (686x)
57366: 768, // analyze (681x)
46: 769, // '.' (673x)
57364: 770, // all (664x)
57368: 771, // array (630x)
58208: 772, // assignmentEq (630x)
58212: 773, // jss (630x)
58213: 774, // juss (630x)
57490: 775, // maxValue (628x)
57376: 776, // by (614x)
57365: 777, // alter (612x)
57480: 778, // lines (612x)
57532: 779, // require (608x)
57472: 780, // lateral (607x)
64: 781, // '@' (603x)
57414: 782, // doubleType (599x)
57428: 783, // floatType (599x)
57404: 784, // decimalType (598x)
57524: 785, // realType (598x)
57584: 786, // varcharacter (598x)
57583: 787, // varcharType (598x)
57378: 788, // cascade (597x)
57415: 789, // drop (597x)
57460: 790, // integerType (597x)
57454: 791, // intType (597x)
57523: 792, // read (596x)
57582: 793, // varbinaryType (596x)
57347: 794, // asof (595x)
57372: 795, // bigIntType (595x)
57374: 796, // blobType (595x)
57429: 797, // float4Type (595x)
57430: 798, // float8Type (595x)
57455: 799, // int1Type (595x)
57456: 800, // int2Type (595x)
57457: 801, // int3Type (595x)
57458: 802, // int4Type (595x)
57459: 803, // int8Type (595x)
57485: 804, // long (595x)
57486: 805, // longblobType (595x)
57487: 806, // longtextType (595x)
57491: 807, // mediumblobType (595x)
57492: 808, // mediumIntType (595x)
57493: 809, // mediumtextType (595x)
57494: 810, // middleIntType (595x)
57504: 811, // numericType (595x)
57544: 812, // smallIntType (595x)
57562: 813, // tinyblobType (595x)
57563: 814, // tinyIntType (595x)
57564: 815, // tinytextType (595x)
57389: 816, // create (593x)
57433: 817, // foreign (591x)
57435: 818, // fulltext (591x)
57348: 819, // toTimestamp (591x)
57349: 820, // toTSO (591x)
57507: 821, // optimize (589x)
57529: 822, // rename (589x)
57592: 823, // write (589x)
57363: 824, // add (588x)
57380: 825, // change (587x)
58501: 826, // Identifier (584x)
58586: 827, // NotKeywordToken (584x)
58882: 828, // TiDBKeyword (584x)
58897: 829, // UnReservedKeyword (584x)
58847: 830, // SubSelect (273x)
58910: 831, // UserVariable (213x)
58553: 832, // Literal (210x)
58837: 833, // StringLiteral (210x)
58810: 834, // SimpleIdent (207x)
58582: 835, // NextValueForSequence (206x)
58476: 836, // FunctionCallGeneric (203x)
58477: 837, // FunctionCallKeyword (203x)
58478: 838, // FunctionCallNonKeyword (203x)
58479: 839, // FunctionNameConflict (203x)
58480: 840, // FunctionNameDateArith (203x)
58481: 841, // FunctionNameDateArithMultiForms (203x)
58482: 842, // FunctionNameDatetimePrecision (203x)
58483: 843, // FunctionNameOptionalBraces (203x)
58484: 844, // FunctionNameSequence (203x)
58809: 845, // SimpleExpr (203x)
58848: 846, // SumExpr (203x)
58850: 847, // SystemVariable (203x)
58921: 848, // Variable (203x)
58945: 849, // WindowFuncCall (203x)
58304: 850, // BitExpr (185x)
58660: 851, // PredicateExpr (155x)
58307: 852, // BoolPri (152x)
58439: 853, // Expression (152x)
58580: 854, // NUM (133x)
58430: 855, // EqOpt (124x)
58961: 856, // logAnd (114x)
58962: 857, // logOr (114x)
57407: 858, // deleteKwd (87x)
58861: 859, // TableName (85x)
58838: 860, // StringName (60x)
58762: 861, // SelectStmt (58x)
58763: 862, // SelectStmtBasic (58x)
58765: 863, // SelectStmtFromDualTable (58x)
58766: 864, // SelectStmtFromTable (58x)
58544: 865, // LengthNum (57x)
58783: 866, // SetOprClause (56x)
58784: 867, // SetOprClauseList (55x)
58787: 868, // SetOprStmtWithLimitOrderBy (55x)
58788: 869, // SetOprStmtWoutLimitOrderBy (55x)
58951: 870, // WithClause (53x)
58775: 871, // SelectStmtWithClause (52x)
58786: 872, // SetOprStmt (52x)
57572: 873, // unsigned (51x)
57595: 874, // zerofill (48x)
57515: 875, // over (45x)
58333: 876, // ColumnName (44x)
58904: 877, // UpdateStmtNoWith (42x)
58396: 878, // DeleteWithoutUsingStmt (41x)
58529: 879, // InsertIntoStmt (39x)
58532: 880, // Int64Num (39x)
58725: 881, // ReplaceIntoStmt (39x)
58903: 882, // UpdateStmt (39x)
57410: 883, // describe (36x)
57411: 884, // distinct (36x)
57412: 885, // distinctRow (36x)
57589: 886, // while (36x)
57488: 887, // lowPriority (35x)
58950: 888, // WindowingClause (35x)
57406: 889, // delayed (34x)
58395: 890, // DeleteWithUsingStmt (34x)
57441: 891, // highPriority (34x)
57465: 892, // iterate (34x)
57475: 893, // leave (34x)
58394: 894, // DeleteFromStmt (32x)
57357: 895, // hintComment (28x)
58450: 896, // FieldLen (27x)
58633: 897, // OrderBy (26x)
58769: 898, // SelectStmtLimit (26x)
58626: 899, // OptWindowingClause (24x)
58277: 900, // AnalyzeTableStmt (23x)
58346: 901, // CommitStmt (23x)
58753: 902, // RollbackStmt (23x)
58791: 903, // SetStmt (23x)
57550: 904, // sqlBigResult (23x)
57551: 905, // sqlCalcFoundRows (23x)
57552: 906, // sqlSmallResult (23x)
57559: 907, // terminated (21x)
58322: 908, // CharsetKw (20x)
58440: 909, // ExpressionList (20x)
58912: 910, // Username (20x)
57419: 911, // enclosed (19x)
58435: 912, // ExplainStmt (19x)
58436: 913, // ExplainSym (19x)
58502: 914, // IfExists (19x)
58503: 915, // IfNotExists (19x)
58645: 916, // PartitionNameList (19x)
58895: 917, // TruncateTableStmt (19x)
58905: 918, // UseStmt (19x)
57420: 919, // escaped (18x)
57351: 920, // optionallyEnclosedBy (18x)
58654: 921, // PlacementPolicyOption (18x)
58671: 922, // ProcedureBlockContent (18x)
58700: 923, // ProcedureUnlabelLoopStmt (18x)
58673: 924, // ProcedureCaseStmt (17x)
58674: 925, // ProcedureCloseCur (17x)
58680: 926, // ProcedureFetchInto (17x)
58686: 927, // ProcedureIfstmt (17x)
58687: 928, // ProcedureIterate (17x)
58688: 929, // ProcedureLabeledBlock (17x)
58702: 930, // ProcedurelabeledLoopStmt (17x)
58689: 931, // ProcedureLeave (17x)
58690: 932, // ProcedureOpenCur (17x)
58693: 933, // ProcedureProcStmt (17x)
58696: 934, // ProcedureSearchedCase (17x)
58697: 935, // ProcedureSimpleCase (17x)
58698: 936, // ProcedureStatementStmt (17x)
58701: 937, // ProcedureUnlabeledBlock (17x)
58699: 938, // ProcedureUnlabelLoopBlock (17x)
58862: 939, // TableNameList (17x)
58609: 940, // OptFieldLen (16x)
58935: 941, // WhereClause (16x)
58936: 942, // WhereClauseOptional (16x)
58401: 943, // DistinctKwd (15x)
58884: 944, // TimestampUnit (15x)
58402: 945, // DistinctOpt (14x)
58431: 946, // EqOrAssignmentEq (14x)
58438: 947, // ExprOrDefault (14x)
58389: 948, // DefaultKwdOpt (13x)
58587: 949, // NotSym (13x)
58538: 950, // JoinTable (12x)
57500: 951, // noWriteToBinLog (12x)
58604: 952, // OptBinary (12x)
57528: 953, // release (12x)
58750: 954, // RolenameComposed (12x)
58858: 955, // TableFactor (12x)
58870: 956, // TableRef (12x)
58883: 957, // TimeUnit (12x)
58276: 958, // AnalyzeOptionListOpt (11x)
58334: 959, // ColumnNameList (11x)
58357: 960, // ConstraintKeywordOpt (11x)
58471: 961, // FromOrIn (11x)
58594: 962, // NumLiteral (11x)
58658: 963, // PolicyName (11x)
58272: 964, // AlterTableStmt (10x)
58323: 965, // CharsetName (10x)
58379: 966, // DBName (10x)
58508: 967, // ImportIntoStmt (10x)
58523: 968, // IndexPartSpecification (10x)
57481: 969, // load (10x)
58584: 970, // NoWriteToBinLogAliasOpt (10x)
58634: 971, // OrderByOptional (10x)
58636: 972, // PartDefOption (10x)
58808: 973, // SignedNum (10x)
58310: 974, // BuggyDefaultFalseDistinctOpt (9x)
58321: 975, // Char (9x)
58388: 976, // DefaultFalseDistinctOpt (9x)
58441: 977, // ExpressionListOpt (9x)
58524: 978, // IndexPartSpecificationList (9x)
58539: 979, // JoinType (9x)
58732: 980, // ResourceGroupName (9x)
58749: 981, // Rolename (9x)
58744: 982, // RoleNameString (9x)
58924: 983, // VariableName (9x)
58377: 984, // CrossOpt (8x)
58437: 985, // ExplainableStmt (8x)
58515: 986, // IndexInvisible (8x)
58526: 987, // IndexType (8x)
58540: 988, // KeyOrIndex (8x)
58712: 989, // ReferDef (8x)
58770: 990, // SelectStmtLimitOpt (8x)
58781: 991, // SetExpr (8x)
58952: 992, // WithClustered (8x)
58255: 993, // AllOrPartitionNameList (7x)
58301: 994, // BindableStmt (7x)
58340: 995, // ColumnOption (7x)
58343: 996, // ColumnPosition (7x)
58384: 997, // DatabaseSym (7x)
58456: 998, // FieldsOrColumns (7x)
58468: 999, // ForceOpt (7x)
58485: 1000, // GeneratedAlways (7x)
58518: 1001, // IndexName (7x)
58521: 1002, // IndexOption (7x)
58522: 1003, // IndexOptionList (7x)
57469: 1004, // kill (7x)
58646: 1005, // PartitionNameListOpt (7x)
58663: 1006, // PrimaryOpt (7x)
58664: 1007, // Priority (7x)
58694: 1008, // ProcedureProcStmt1s (7x)
58754: 1009, // RowFormat (7x)
58757: 1010, // RowValue (7x)
57543: 1011, // show (7x)
58793: 1012, // ShowDatabaseNameOpt (7x)
58820: 1013, // SplitOptionBetween (7x)
58865: 1014, // TableOptimizerHints (7x)
58867: 1015, // TableOption (7x)
57585: 1016, // varying (7x)
58299: 1017, // BeginTransactionStmt (6x)
58291: 1018, // BRIEBooleanOptionName (6x)
58292: 1019, // BRIEIntegerOptionName (6x)
58293: 1020, // BRIEKeywordOptionName (6x)
58294: 1021, // BRIEOption (6x)
58295: 1022, // BRIEOptions (6x)
58297: 1023, // BRIEStringOptionName (6x)
57385: 1024, // column (6x)
58329: 1025, // ColumnDef (6x)
58341: 1026, // ColumnOptionList (6x)
58342: 1027, // ColumnOptionListOpt (6x)
58381: 1028, // DatabaseOption (6x)
58432: 1029, // EscapedTableRef (6x)
58454: 1030, // FieldTerminator (6x)
57437: 1031, // grant (6x)
58505: 1032, // IgnoreOptional (6x)
58520: 1033, // IndexNameList (6x)
58560: 1034, // LoadDataStmt (6x)
57520: 1035, // procedure (6x)
58720: 1036, // ReleaseSavepointStmt (6x)
58751: 1037, // RolenameList (6x)
58758: 1038, // SavepointStmt (6x)
58913: 1039, // UsernameList (6x)
58920: 1040, // Varchar (6x)
58253: 1041, // AlgorithmClause (5x)
58305: 1042, // BitValueType (5x)
58306: 1043, // BlobType (5x)
58308: 1044, // Boolean (5x)
58309: 1045, // BooleanType (5x)
58311: 1046, // BuiltinFunction (5x)
58312: 1047, // ByItem (5x)
58328: 1048, // CollationName (5x)
58331: 1049, // ColumnKeywordOpt (5x)
58385: 1050, // DateAndTimeType (5x)
58397: 1051, // DirectPlacementOption (5x)
58399: 1052, // DirectResourceGroupOption (5x)
58452: 1053, // FieldOpt (5x)
58453: 1054, // FieldOpts (5x)
58459: 1055, // FixedPointType (5x)
58465: 1056, // FloatingPointType (5x)
58499: 1057, // IdentList (5x)
58519: 1058, // IndexNameAndTypeOpt (5x)
57450: 1059, // infile (5x)
58533: 1060, // IntegerType (5x)
58549: 1061, // LimitOption (5x)
58564: 1062, // LockClause (5x)
58579: 1063, // NChar (5x)
58595: 1064, // NumericType (5x)
58581: 1065, // NVarchar (5x)
58606: 1066, // OptCharsetWithOptBinary (5x)
57508: 1067, // option (5x)
58616: 1068, // OptNullTreatment (5x)
58665: 1069, // PriorityOpt (5x)
58740: 1070, // RestrictOrCascadeOpt (5x)
58761: 1071, // SelectLockOpt (5x)
58768: 1072, // SelectStmtIntoOption (5x)
58807: 1073, // SignedLiteral (5x)
58840: 1074, // StringType (5x)
58852: 1075, // TableAsName (5x)
58866: 1076, // TableOptimizerHintsOpt (5x)
58871: 1077, // TableRefs (5x)
58881: 1078, // TextType (5x)
58896: 1079, // Type (5x)
58906: 1080, // UserSpec (5x)
58960: 1081, // Year (5x)
58280: 1082, // AsOfClause (4x)
58283: 1083, // Assignment (4x)
58288: 1084, // AuthString (4x)
58313: 1085, // ByList (4x)
58350: 1086, // ConfigItemName (4x)
58354: 1087, // Constraint (4x)
58355: 1088, // ConstraintColumnarIndex (4x)
58358: 1089, // ConstraintVectorIndex (4x)
58359: 1090, // ConstraintWithColumnarIndex (4x)
58378: 1091, // CurdateSym (4x)
58464: 1092, // FloatOpt (4x)
58527: 1093, // IndexTypeName (4x)
58588: 1094, // NowSym (4x)
58589: 1095, // NowSymFunc (4x)
58590: 1096, // NowSymOptionFraction (4x)
58593: 1097, // NumList (4x)
57509: 1098, // optionally (4x)
58623: 1099, // OptWild (4x)
57513: 1100, // outer (4x)
58659: 1101, // Precision (4x)
58741: 1102, // ReturningClause (4x)
58756: 1103, // RowStmt (4x)
58776: 1104, // SequenceOption (4x)
58864: 1105, // TableNameOptWild (4x)
58868: 1106, // TableOptionList (4x)
58879: 1107, // TextString (4x)
58886: 1108, // TraceableStmt (4x)
58892: 1109, // TransactionChar (4x)
58907: 1110, // UserSpecList (4x)
58946: 1111, // WindowName (4x)
58274: 1112, // AnalyzeOption (3x)
58284: 1113, // AssignmentList (3x)
58285: 1114, // AttributesOpt (3x)
58320: 1115, // CastType (3x)
58347: 1116, // CommonTableExpr (3x)
58373: 1117, // CreateTableStmt (3x)
58382: 1118, // DatabaseOptionList (3x)
58392: 1119, // DefaultTrueDistinctOpt (3x)
58398: 1120, // DirectResourceGroupBackgroundOption (3x)
58400: 1121, // DirectResourceGroupRunawayOption (3x)
58422: 1122, // DynamicCalibrateResourceOption (3x)
57418: 1123, // elseIfKwd (3x)
58427: 1124, // EnforcedOrNot (3x)
58443: 1125, // ExtendedPriv (3x)
58445: 1126, // Field (3x)
58488: 1127, // GlobalOrLocalOpt (3x)
58489: 1128, // GlobalScope (3x)
58493: 1129, // GroupByClause (3x)
58510: 1130, // IndexHint (3x)
58514: 1131, // IndexHintType (3x)
57468: 1132, // keys (3x)
58556: 1133, // LoadDataOptionListOpt (3x)
58563: 1134, // LocationLabelList (3x)
58571: 1135, // MaskingPolicyRestrictOperation (3x)
58583: 1136, // NextValueForSequenceParentheses (3x)
58591: 1137, // NowSymOptionFractionParentheses (3x)
58617: 1138, // OptOrder (3x)
58621: 1139, // OptTemporary (3x)
58637: 1140, // PartDefOptionList (3x)
58639: 1141, // PartitionDefinition (3x)
58650: 1142, // PasswordOrLockOption (3x)
58657: 1143, // PluginNameList (3x)
58666: 1144, // PrivElem (3x)
58668: 1145, // PrivType (3x)
58703: 1146, // QueryWatchOption (3x)
58705: 1147, // QueryWatchTextOption (3x)
58707: 1148, // RecommendIndexOption (3x)
58727: 1149, // RequireClause (3x)
58728: 1150, // RequireClauseOpt (3x)
58730: 1151, // RequireListElement (3x)
58752: 1152, // RolenameWithoutIdent (3x)
58745: 1153, // RoleOrPrivElem (3x)
58767: 1154, // SelectStmtGroup (3x)
58785: 1155, // SetOprOpt (3x)
58818: 1156, // SplitIndexOption (3x)
58819: 1157, // SplitOption (3x)
58828: 1158, // StatsObject (3x)
58834: 1159, // StringList (3x)
58835: 1160, // StringLitOrUserVariable (3x)
58851: 1161, // TableAliasRefList (3x)
58853: 1162, // TableAsNameOpt (3x)
58855: 1163, // TableElement (3x)
58869: 1164, // TableOrTables (3x)
58893: 1165, // TransactionChars (3x)
57567: 1166, // trigger (3x)
57571: 1167, // unlock (3x)
57573: 1168, // until (3x)
57575: 1169, // usage (3x)
58917: 1170, // ValuesList (3x)
58919: 1171, // ValuesStmtList (3x)
58915: 1172, // ValueSym (3x)
58922: 1173, // VariableAssignment (3x)
58943: 1174, // WindowFrameStart (3x)
58249: 1175, // AddQueryWatchStmt (2x)
58251: 1176, // AdminStmt (2x)
58254: 1177, // AllColumnsOrPredicateColumnsOpt (2x)
58256: 1178, // AlterDatabaseStmt (2x)
58257: 1179, // AlterInstanceStmt (2x)
58258: 1180, // AlterJobOption (2x)
58260: 1181, // AlterOrderItem (2x)
58262: 1182, // AlterPolicyStmt (2x)
58263: 1183, // AlterRangeStmt (2x)
58264: 1184, // AlterResourceGroupStmt (2x)
58265: 1185, // AlterSequenceOption (2x)
58267: 1186, // AlterSequenceStmt (2x)
58268: 1187, // AlterTableSpec (2x)
58273: 1188, // AlterUserStmt (2x)
58303: 1189, // BinlogStmt (2x)
58296: 1190, // BRIEStmt (2x)
58298: 1191, // BRIETables (2x)
58315: 1192, // CalibrateResourceStmt (2x)
57377: 1193, // call (2x)
58317: 1194, // CallStmt (2x)
58318: 1195, // CancelDistributionJobStmt (2x)
58319: 1196, // CancelImportStmt (2x)
58326: 1197, // CheckConstraintKeyword (2x)
58335: 1198, // ColumnNameListOpt (2x)
58338: 1199, // ColumnNameOrUserVariable (2x)
58337: 1200, // ColumnNameOrUserVarListOptWithBrackets (2x)
58345: 1201, // CommentOrAttributeOption (2x)
58349: 1202, // CompletionTypeWithinTransaction (2x)
58351: 1203, // ConnectionOption (2x)
58353: 1204, // ConnectionOptions (2x)
58360: 1205, // CreateBindingStmt (2x)
58361: 1206, // CreateDatabaseStmt (2x)
58362: 1207, // CreateIndexStmt (2x)
58363: 1208, // CreateMaskingPolicyStmt (2x)
58364: 1209, // CreatePolicyStmt (2x)
58365: 1210, // CreateProcedureStmt (2x)
58366: 1211, // CreateResourceGroupStmt (2x)
58367: 1212, // CreateRoleStmt (2x)
58369: 1213, // CreateSequenceStmt (2x)
58370: 1214, // CreateStatisticsStmt (2x)
58371: 1215, // CreateTableOptionListOpt (2x)
58374: 1216, // CreateUserStmt (2x)
58376: 1217, // CreateViewStmt (2x)
57399: 1218, // databases (2x)
58386: 1219, // DeallocateStmt (2x)
58387: 1220, // DeallocateSym (2x)
58390: 1221, // DefaultOrExpression (2x)
58403: 1222, // DistributeTableStmt (2x)
58404: 1223, // DoStmt (2x)
58405: 1224, // DropBindingStmt (2x)
58406: 1225, // DropDatabaseStmt (2x)
58407: 1226, // DropIndexStmt (2x)
58408: 1227, // DropPolicyStmt (2x)
58409: 1228, // DropProcedureStmt (2x)
58410: 1229, // DropQueryWatchStmt (2x)
58411: 1230, // DropResourceGroupStmt (2x)
58412: 1231, // DropRoleStmt (2x)
58413: 1232, // DropSequenceStmt (2x)
58414: 1233, // DropStatisticsStmt (2x)
58415: 1234, // DropStatsStmt (2x)
58416: 1235, // DropTableStmt (2x)
58417: 1236, // DropUserStmt (2x)
58418: 1237, // DropViewStmt (2x)
58420: 1238, // DuplicateOpt (2x)
58423: 1239, // ElseCaseOpt (2x)
58425: 1240, // EmptyStmt (2x)
58426: 1241, // EncryptionOpt (2x)
58428: 1242, // EnforcedOrNotOpt (2x)
58433: 1243, // ExecuteStmt (2x)
58434: 1244, // ExplainFormatType (2x)
58448: 1245, // FieldItem (2x)
58451: 1246, // FieldList (2x)
58455: 1247, // Fields (2x)
58460: 1248, // FlashbackDatabaseStmt (2x)
58461: 1249, // FlashbackTableStmt (2x)
58462: 1250, // FlashbackToNewName (2x)
58463: 1251, // FlashbackToTimestampStmt (2x)
58467: 1252, // FlushStmt (2x)
58469: 1253, // FormatOpt (2x)
58474: 1254, // FuncDatetimePrecList (2x)
58475: 1255, // FuncDatetimePrecListOpt (2x)
58490: 1256, // GrantProxyStmt (2x)
58491: 1257, // GrantRoleStmt (2x)
58492: 1258, // GrantStmt (2x)
58494: 1259, // HandleRange (2x)
58496: 1260, // HashString (2x)
58497: 1261, // HavingClause (2x)
58498: 1262, // HelpStmt (2x)
58500: 1263, // IdentListWithParenOpt (2x)
58511: 1264, // IndexHintList (2x)
58512: 1265, // IndexHintListOpt (2x)
58517: 1266, // IndexLockAndAlgorithmOpt (2x)
57452: 1267, // inout (2x)
58530: 1268, // InsertValues (2x)
58535: 1269, // IntoOpt (2x)
58541: 1270, // KeyOrIndexOpt (2x)
58542: 1271, // KillOrKillTiDB (2x)
58543: 1272, // KillStmt (2x)
58545: 1273, // LikeOrIlikeEscapeOpt (2x)
58548: 1274, // LimitClause (2x)
57479: 1275, // linear (2x)
58550: 1276, // LinearOpt (2x)
58551: 1277, // Lines (2x)
58554: 1278, // LoadDataOption (2x)
58557: 1279, // LoadDataSetItem (2x)
58559: 1280, // LoadDataSetSpecOpt (2x)
58561: 1281, // LoadStatsStmt (2x)
58565: 1282, // LockStatsStmt (2x)
58566: 1283, // LockTablesStmt (2x)
58570: 1284, // MaskingPolicyRestrictOnOpt (2x)
58572: 1285, // MaskingPolicyRestrictOperationList (2x)
58573: 1286, // MaskingPolicyStateOpt (2x)
58577: 1287, // MaxValueOrExpression (2x)
58585: 1288, // NonTransactionalDMLStmt (2x)
58596: 1289, // ObjectType (2x)
57505: 1290, // of (2x)
58597: 1291, // OfTablesOpt (2x)
58598: 1292, // OnCommitOpt (2x)
58599: 1293, // OnDelete (2x)
58602: 1294, // OnUpdate (2x)
58607: 1295, // OptCollate (2x)
58611: 1296, // OptFull (2x)
58627: 1297, // OptimizeTableStmt (2x)
58613: 1298, // OptInteger (2x)
58629: 1299, // OptionalBraces (2x)
58628: 1300, // OptionLevel (2x)
58615: 1301, // OptLeadLagInfo (2x)
58614: 1302, // OptLLDefault (2x)
58622: 1303, // OptVectorElementType (2x)
57512: 1304, // out (2x)
58635: 1305, // OuterOpt (2x)
58640: 1306, // PartitionDefinitionList (2x)
58641: 1307, // PartitionDefinitionListOpt (2x)
58642: 1308, // PartitionIntervalOpt (2x)
58648: 1309, // PartitionOpt (2x)
58649: 1310, // PasswordOpt (2x)
58651: 1311, // PasswordOrLockOptionList (2x)
58652: 1312, // PasswordOrLockOptions (2x)
58653: 1313, // PlacementOptionList (2x)
58656: 1314, // PlanReplayerStmt (2x)
58662: 1315, // PreparedStmt (2x)
58667: 1316, // PrivLevel (2x)
58669: 1317, // ProcedurceCond (2x)
58670: 1318, // ProcedurceLabelOpt (2x)
58676: 1319, // ProcedureDecl (2x)
58683: 1320, // ProcedureHcond (2x)
58685: 1321, // ProcedureIf (2x)
58706: 1322, // QuickOptional (2x)
58708: 1323, // RecommendIndexOptionList (2x)
58709: 1324, // RecommendIndexOptionListOpt (2x)
58710: 1325, // RecommendIndexStmt (2x)
58711: 1326, // RecoverTableStmt (2x)
58713: 1327, // ReferOpt (2x)
58717: 1328, // RefreshStatsStmt (2x)
58719: 1329, // RegexpSym (2x)
58721: 1330, // RenameTableStmt (2x)
58722: 1331, // RenameUserStmt (2x)
58724: 1332, // RepeatableOpt (2x)
58733: 1333, // ResourceGroupNameOption (2x)
58734: 1334, // ResourceGroupOptionList (2x)
58736: 1335, // ResourceGroupRunawayActionOption (2x)
58738: 1336, // ResourceGroupRunawayWatchOption (2x)
58739: 1337, // RestartStmt (2x)
57534: 1338, // revoke (2x)
58742: 1339, // RevokeRoleStmt (2x)
58743: 1340, // RevokeStmt (2x)
58746: 1341, // RoleOrPrivElemList (2x)
58747: 1342, // RoleSpec (2x)
58759: 1343, // SearchWhenThen (2x)
58771: 1344, // SelectStmtOpt (2x)
58774: 1345, // SelectStmtSQLCache (2x)
58778: 1346, // SetBindingStmt (2x)
58779: 1347, // SetDefaultRoleOpt (2x)
58780: 1348, // SetDefaultRoleStmt (2x)
58790: 1349, // SetRoleStmt (2x)
58800: 1350, // ShowProfileType (2x)
58803: 1351, // ShowStmt (2x)
58804: 1352, // ShowTableAliasOpt (2x)
58806: 1353, // ShutdownStmt (2x)
58811: 1354, // SimpleWhenThen (2x)
58821: 1355, // SplitRegionStmt (2x)
58813: 1356, // SpOptInout (2x)
58814: 1357, // SpPdparam (2x)
57547: 1358, // sqlexception (2x)
57548: 1359, // sqlstate (2x)
57549: 1360, // sqlwarning (2x)
58825: 1361, // Statement (2x)
58829: 1362, // StatsObjectList (2x)
58830: 1363, // StatsOptionsOpt (2x)
58831: 1364, // StatsPersistentVal (2x)
58832: 1365, // StatsType (2x)
58836: 1366, // StringLitOrUserVariableList (2x)
58841: 1367, // SubPartDefinition (2x)
58844: 1368, // SubPartitionMethod (2x)
58849: 1369, // Symbol (2x)
58856: 1370, // TableElementList (2x)
58859: 1371, // TableLock (2x)
58863: 1372, // TableNameListOpt (2x)
58878: 1373, // TablesTerminalSym (2x)
58876: 1374, // TableToTable (2x)
58880: 1375, // TextStringList (2x)
58885: 1376, // TraceStmt (2x)
58887: 1377, // TrafficCaptureOpt (2x)
58889: 1378, // TrafficReplayOpt (2x)
58891: 1379, // TrafficStmt (2x)
58898: 1380, // UnlockStatsStmt (2x)
58899: 1381, // UnlockTablesStmt (2x)
58900: 1382, // UpdateIndexElem (2x)
58908: 1383, // UserToUser (2x)
58923: 1384, // VariableAssignmentList (2x)
58933: 1385, // WhenClause (2x)
58938: 1386, // WindowDefinition (2x)
58941: 1387, // WindowFrameBound (2x)
58948: 1388, // WindowSpec (2x)
58953: 1389, // WithGrantOptionOpt (2x)
58954: 1390, // WithList (2x)
58959: 1391, // Writeable (2x)
58: 1392, // ':' (1x)
58250: 1393, // AdminShowSlow (1x)
58252: 1394, // AdminStmtLimitOpt (1x)
58259: 1395, // AlterJobOptionList (1x)
58261: 1396, // AlterOrderList (1x)
58266: 1397, // AlterSequenceOptionList (1x)
58269: 1398, // AlterTableSpecList (1x)
58270: 1399, // AlterTableSpecListOpt (1x)
58271: 1400, // AlterTableSpecSingleOpt (1x)
58275: 1401, // AnalyzeOptionList (1x)
58278: 1402, // AnyOrAll (1x)
58279: 1403, // ArrayKwdOpt (1x)
58281: 1404, // AsOfClauseOpt (1x)
58282: 1405, // AsOpt (1x)
58286: 1406, // AuthOption (1x)
58287: 1407, // AuthPlugin (1x)
58289: 1408, // AutoRandomOpt (1x)
58290: 1409, // BDRRole (1x)
58300: 1410, // BetweenOrNotOp (1x)
58302: 1411, // BindingStatusType (1x)
57375: 1412, // both (1x)
58314: 1413, // CalibrateOption (1x)
58316: 1414, // CalibrateResourceWorkloadOption (1x)
58324: 1415, // CharsetNameOrDefault (1x)
58325: 1416, // CharsetOpt (1x)
58327: 1417, // ClusterOpt (1x)
58330: 1418, // ColumnFormat (1x)
58332: 1419, // ColumnList (1x)
58339: 1420, // ColumnNameOrUserVariableList (1x)
58336: 1421, // ColumnNameOrUserVarListOpt (1x)
58344: 1422, // ColumnSetValueList (1x)
58348: 1423, // CompareOp (1x)
58352: 1424, // ConnectionOptionList (1x)
58356: 1425, // ConstraintElem (1x)
57387: 1426, // continueKwd (1x)
58368: 1427, // CreateSequenceOptionListOpt (1x)
58372: 1428, // CreateTableSelectOpt (1x)
58375: 1429, // CreateViewSelectOpt (1x)
57397: 1430, // cursor (1x)
58383: 1431, // DatabaseOptionListOpt (1x)
58380: 1432, // DBNameList (1x)
58391: 1433, // DefaultOrExpressionList (1x)
58393: 1434, // DefaultValueExpr (1x)
58419: 1435, // DryRunOptions (1x)
57416: 1436, // dual (1x)
58421: 1437, // DynamicCalibrateOptionList (1x)
58424: 1438, // ElseOpt (1x)
58429: 1439, // EnforcedOrNotOrNotNullOpt (1x)
57423: 1440, // exit (1x)
58442: 1441, // ExpressionOpt (1x)
58444: 1442, // FetchFirstOpt (1x)
58446: 1443, // FieldAsName (1x)
58447: 1444, // FieldAsNameOpt (1x)
58449: 1445, // FieldItemList (1x)
58457: 1446, // FirstAndLastPartOpt (1x)
58458: 1447, // FirstOrNext (1x)
58466: 1448, // FlushOption (1x)
58470: 1449, // FromDual (1x)
58472: 1450, // FulltextSearchModifierOpt (1x)
58473: 1451, // FuncDatetimePrec (1x)
58486: 1452, // GetFormatSelector (1x)
58487: 1453, // GlobalOrLocal (1x)
58495: 1454, // HandleRangeList (1x)
58504: 1455, // IgnoreLines (1x)
58506: 1456, // IlikeOrNotOp (1x)
58507: 1457, // ImportFromSelectStmt (1x)
58513: 1458, // IndexHintScope (1x)
58516: 1459, // IndexKeyTypeOpt (1x)
58525: 1460, // IndexPartSpecificationListOpt (1x)
58528: 1461, // IndexTypeOpt (1x)
58509: 1462, // InOrNotOp (1x)
58531: 1463, // InstanceOption (1x)
58534: 1464, // IntervalExpr (1x)
58537: 1465, // IsolationLevel (1x)
58536: 1466, // IsOrNotOp (1x)
57474: 1467, // leading (1x)
58546: 1468, // LikeOrNotOp (1x)
58547: 1469, // LikeTableWithOrWithoutParen (1x)
58552: 1470, // LinesTerminated (1x)
58555: 1471, // LoadDataOptionList (1x)
58558: 1472, // LoadDataSetList (1x)
58562: 1473, // LocalOpt (1x)
58567: 1474, // LockType (1x)
58568: 1475, // LogTypeOpt (1x)
58569: 1476, // LowPriorityOpt (1x)
58574: 1477, // Match (1x)
58575: 1478, // MatchOpt (1x)
58576: 1479, // MaxValPartOpt (1x)
58578: 1480, // MaxValueOrExpressionList (1x)
58592: 1481, // NullPartOpt (1x)
58600: 1482, // OnDeleteUpdateOpt (1x)
58601: 1483, // OnDuplicateKeyUpdate (1x)
58603: 1484, // OptBinMod (1x)
58605: 1485, // OptCharset (1x)
58608: 1486, // OptExistingWindowName (1x)
58610: 1487, // OptFromFirstLast (1x)
58612: 1488, // OptGConcatSeparator (1x)
58630: 1489, // OptionalShardColumn (1x)
58618: 1490, // OptPartitionClause (1x)
58619: 1491, // OptSpPdparams (1x)
58620: 1492, // OptTable (1x)
58963: 1493, // optValue (1x)
58624: 1494, // OptWindowFrameClause (1x)
58625: 1495, // OptWindowOrderByClause (1x)
58632: 1496, // Order (1x)
58631: 1497, // OrReplace (1x)
57514: 1498, // outfile (1x)
58638: 1499, // PartDefValuesOpt (1x)
58643: 1500, // PartitionKeyAlgorithmOpt (1x)
58644: 1501, // PartitionMethod (1x)
58647: 1502, // PartitionNumOpt (1x)
58655: 1503, // PlanReplayerDumpOpt (1x)
57518: 1504, // precisionType (1x)
58661: 1505, // PrepareSQL (1x)
58964: 1506, // procedurceElseIfs (1x)
58672: 1507, // ProcedureCall (1x)
58675: 1508, // ProcedureCursorSelectStmt (1x)
58677: 1509, // ProcedureDeclIdents (1x)
58678: 1510, // ProcedureDecls (1x)
58679: 1511, // ProcedureDeclsOpt (1x)
58681: 1512, // ProcedureFetchList (1x)
58682: 1513, // ProcedureHandlerType (1x)
58684: 1514, // ProcedureHcondList (1x)
58691: 1515, // ProcedureOptDefault (1x)
58692: 1516, // ProcedureOptFetchNo (1x)
58695: 1517, // ProcedureProcStmts (1x)
58704: 1518, // QueryWatchOptionList (1x)
57525: 1519, // recursive (1x)
58714: 1520, // RefreshStatsClusterOpt (1x)
58715: 1521, // RefreshStatsMode (1x)
58716: 1522, // RefreshStatsModeOpt (1x)
58718: 1523, // RegexpOrNotOp (1x)
58723: 1524, // ReorganizePartitionRuleOpt (1x)
58726: 1525, // Replica (1x)
58729: 1526, // RequireList (1x)
58731: 1527, // ResourceGroupBackgroundOptionList (1x)
58735: 1528, // ResourceGroupPriorityOption (1x)
58737: 1529, // ResourceGroupRunawayOptionList (1x)
58748: 1530, // RoleSpecList (1x)
58755: 1531, // RowOrRows (1x)
58760: 1532, // SearchedWhenThenList (1x)
58764: 1533, // SelectStmtFieldList (1x)
58772: 1534, // SelectStmtOpts (1x)
58773: 1535, // SelectStmtOptsList (1x)
58777: 1536, // SequenceOptionList (1x)
58782: 1537, // SetOpr (1x)
58789: 1538, // SetRoleOpt (1x)
58792: 1539, // ShardableStmt (1x)
58795: 1540, // ShowImportJobsTarget (1x)
58794: 1541, // ShowImportJobTarget (1x)
58796: 1542, // ShowIndexKwd (1x)
58797: 1543, // ShowLikeOrWhereOpt (1x)
58798: 1544, // ShowPlacementTarget (1x)
58799: 1545, // ShowProfileArgsOpt (1x)
58801: 1546, // ShowProfileTypes (1x)
58802: 1547, // ShowProfileTypesOpt (1x)
58805: 1548, // ShowTargetFilterable (1x)
58812: 1549, // SimpleWhenThenList (1x)
57545: 1550, // spatial (1x)
58816: 1551, // SplitIndexList (1x)
58817: 1552, // SplitIndexListOpt (1x)
58822: 1553, // SplitSyntaxOption (1x)
58815: 1554, // SpPdparams (1x)
57553: 1555, // ssl (1x)
58823: 1556, // Start (1x)
58824: 1557, // Starting (1x)
57554: 1558, // starting (1x)
58826: 1559, // StatementList (1x)
58827: 1560, // StatementScope (1x)
58833: 1561, // StorageMedia (1x)
57555: 1562, // stored (1x)
58839: 1563, // StringNameOrBRIEOptionKeyword (1x)
58842: 1564, // SubPartDefinitionList (1x)
58843: 1565, // SubPartDefinitionListOpt (1x)
58845: 1566, // SubPartitionNumOpt (1x)
58846: 1567, // SubPartitionOpt (1x)
58854: 1568, // TableAsNameOptDelete (1x)
58857: 1569, // TableElementListOpt (1x)
58860: 1570, // TableLockList (1x)
58872: 1571, // TableRefsClause (1x)
58873: 1572, // TableSampleMethodOpt (1x)
58874: 1573, // TableSampleOpt (1x)
58875: 1574, // TableSampleUnitOpt (1x)
58877: 1575, // TableToTableList (1x)
58888: 1576, // TrafficCaptureOptList (1x)
58890: 1577, // TrafficReplayOptList (1x)
57566: 1578, // trailing (1x)
58894: 1579, // TrimDirection (1x)
58901: 1580, // UpdateIndexesList (1x)
58902: 1581, // UpdateIndexesOpt (1x)
58909: 1582, // UserToUserList (1x)
58911: 1583, // UserVariableList (1x)
58914: 1584, // UsingRoles (1x)
58916: 1585, // Values (1x)
58918: 1586, // ValuesOpt (1x)
58925: 1587, // ViewAlgorithm (1x)
58926: 1588, // ViewCheckOption (1x)
58927: 1589, // ViewDefiner (1x)
58928: 1590, // ViewFieldList (1x)
58929: 1591, // ViewName (1x)
58930: 1592, // ViewSQLSecurity (1x)
57586: 1593, // virtual (1x)
58931: 1594, // VirtualOrStored (1x)
58932: 1595, // WatchDurationOption (1x)
58934: 1596, // WhenClauseList (1x)
58937: 1597, // WindowClauseOptional (1x)
58939: 1598, // WindowDefinitionList (1x)
58940: 1599, // WindowFrameBetween (1x)
58942: 1600, // WindowFrameExtent (1x)
58944: 1601, // WindowFrameUnits (1x)
58947: 1602, // WindowNameOrSpec (1x)
58949: 1603, // WindowSpecDetails (1x)
58955: 1604, // WithReadLockOpt (1x)
58956: 1605, // WithRollupClause (1x)
58957: 1606, // WithValidation (1x)
58958: 1607, // WithValidationOpt (1x)
58248: 1608, // $default (0x)
58207: 1609, // andnot (0x)
58231: 1610, // createTableSelect (0x)
58221: 1611, // empty (0x)
57345: 1612, // error (0x)
58247: 1613, // higherThanComma (0x)
58241: 1614, // higherThanParenthese (0x)
58237: 1615, // higherThanReturning (0x)
58229: 1616, // insertValues (0x)
57356: 1617, // invalid (0x)
58232: 1618, // lowerThanCharsetKwd (0x)
58246: 1619, // lowerThanComma (0x)
58230: 1620, // lowerThanCreateTableSelect (0x)
58243: 1621, // lowerThanEq (0x)
58238: 1622, // lowerThanFunction (0x)
58228: 1623, // lowerThanInsertValues (0x)
58233: 1624, // lowerThanKey (0x)
58234: 1625, // lowerThanLocal (0x)
58245: 1626, // lowerThanNot (0x)
58242: 1627, // lowerThanOn (0x)
58240: 1628, // lowerThanParenthese (0x)
58235: 1629, // lowerThanRemove (0x)
58222: 1630, // lowerThanSelectOpt (0x)
58227: 1631, // lowerThanSelectStmt (0x)
58226: 1632, // lowerThanSetKeyword (0x)
58225: 1633, // lowerThanStringLitToken (0x)
58223: 1634, // lowerThanValueKeyword (0x)
58224: 1635, // lowerThanWith (0x)
58236: 1636, // lowerThenOrder (0x)
58244: 1637, // neg (0x)
57360: 1638, // odbcDateType (0x)
57362: 1639, // odbcTimestampType (0x)
57361: 1640, // odbcTimeType (0x)
58239: 1641, // tableRefPriority (0x)
}
yySymNames = []string{
"';'",
"$end",
"split",
"remove",
"merge",
"reorganize",
"comment",
"secondaryEngineAttribute",
"storage",
"','",
"autoIncrement",
"first",
"after",
"serial",
"autoRandom",
"columnFormat",
"returning",
"password",
"charsetKwd",
"checksum",
"placement",
"keyBlockSize",
"preSplitRegions",
"tablespace",
"encryption",
"engine",
"data",
"engine_attribute",
"insertMethod",
"maxRows",
"minRows",
"nodegroup",
"connection",
"sequence",
"autoRandomBase",
"affinity",
"statsBuckets",
"statsTopN",
"ttl",
"autoextendSize",
"autoIdCache",
"avgRowLength",
"compression",
"delayKeyWrite",
"ietfQuotes",
"packKeys",
"pageChecksum",
"pageCompressed",
"pageCompressionLevel",
"rowFormat",
"secondaryEngine",
"shardRowIDBits",
"statsAutoRecalc",
"statsColChoice",
"statsColList",
"statsPersistent",
"statsSamplePages",
"statsSampleRate",
"tableChecksum",
"transactional",
"ttlEnable",
"ttlJobInterval",
"resource",
"')'",
"attribute",
"identifier",
"account",
"failedLoginAttempts",
"passwordLockTime",
"local",
"encryptionMethod",
"global",
"signed",
"resume",
"snapshot",
"backend",
"checkpoint",
"checksumConcurrency",
"compressionLevel",
"compressionType",
"concurrency",
"csvBackslashEscape",
"csvDelimiter",
"csvHeader",
"csvNotNull",
"csvNull",
"csvSeparator",
"csvTrimLastSeparators",
"encryptionKeyFile",
"fullBackupStorage",
"gcTTL",
"ignoreStats",
"lastBackup",
"loadStats",
"onDuplicate",
"online",
"rateLimit",
"restoredTS",
"sendCredentialsToTiKV",
"skipSchemaFiles",
"startTS",
"strictFormat",
"tikvImporter",
"untilTS",
"waitTiflashReady",
"withSysTable",
"tp",
"clustered",
"invisible",
"nonclustered",
"visible",
"addColumnarReplicaOnDemand",
"algorithm",
"begin",
"commit",
"no",
"rollback",
"start",
"truncate",
"action",
"cache",
"nocache",
"open",
"close",
"cycle",
"minValue",
"end",
"increment",
"nocycle",
"nomaxvalue",
"nominvalue",
"restart",
"regions",
"yearType",
"background",
"burstable",
"priority",
"queryLimit",
"ruRate",
"sqlTsiYear",
"plan",
"subpartition",
"partitions",
"timeDuration",
"constraints",
"followerConstraints",
"followers",
"leaderConstraints",
"learnerConstraints",
"learners",
"primaryRegion",
"schedule",
"survivalPreferences",
"voterConstraints",
"voters",
"importKwd",
"watch",
"columns",
"execElapsed",
"processedKeys",
"ru",
"user",
"view",
"day",
"defined",
"second",
"hour",
"microsecond",
"minute",
"month",
"quarter",
"sqlTsiDay",
"sqlTsiHour",
"sqlTsiMinute",
"sqlTsiMonth",
"sqlTsiQuarter",
"sqlTsiSecond",
"sqlTsiWeek",
"week",
"ascii",
"byteType",
"status",
"tables",
"unicodeSym",
"fields",
"jsonType",
"readOnly",
"speed",
"cluster",
"datetimeType",
"dateType",
"logs",
"timeType",
"vectorType",
"fixed",
"policy",
"query",
"separator",
"timestampType",
"booleanType",
"cipher",
"compress",
"issuer",
"maxConnectionsPerHour",
"maxQueriesPerHour",
"maxUpdatesPerHour",
"maxUserConnections",
"preceding",
"san",
"subject",
"textType",
"tokenIssuer",
"bitType",
"boolType",
"endTime",
"enum",
"full",
"jobs",
"national",
"ncharType",
"nvarcharType",
"startTime",
"taskTypes",
"utilizationLimit",
"bindings",
"disable",
"enable",
"job",
"current",
"definer",
"hash",
"identified",
"respect",
"role",
"value",
"backup",
"enforced",
"following",
"less",
"lite",
"nowait",
"only",
"savepoint",
"skip",
"than",
"tiFlash",
"unbounded",
"binding",
"hypo",
"masking",
"next_row_id",
"off",
"offset",
"predicate",
"replica",
"stats",
"temporary",
"unlimited",
"digest",
"location",
"planCache",
"prepare",
"unknown",
"wait",
"btree",
"cooldown",
"ddl",
"declare",
"dryRun",
"format",
"hnsw",
"inverted",
"isolation",
"last",
"memory",
"ndvRate",
"next",
"optional",
"privileges",
"required",
"rtree",
"sampleRate",
"session",
"slow",
"switchGroup",
"traffic",
"validation",
"variables",
"attributes",
"cancel",
"capture",
"compact",
"distributions",
"do",
"dynamic",
"errorKwd",
"exact",
"flush",
"handler",
"history",
"mb",
"mode",
"none",
"pause",
"plugins",
"processlist",
"recover",
"repair",
"repeatable",
"similar",
"statistics",
"subpartitions",
"tidb",
"without",
"admin",
"batch",
"bdr",
"binlog",
"block",
"br",
"briefType",
"buckets",
"calibrate",
"cardinality",
"chain",
"clientErrorsSummary",
"cmSketch",
"coalesce",
"compressed",
"context",
"copyKwd",
"correlation",
"cpu",
"deallocate",
"dependency",
"directory",
"discard",
"disk",
"distribute",
"distribution",
"dotType",
"dry",
"duplicate",
"exchange",
"execute",
"expansion",
"flashback",
"general",
"help",
"high",
"histogram",
"hosts",
"identSQLErrors",
"incremental",
"indexes",
"inplace",
"instance",
"instant",
"ipc",
"labels",
"locked",
"low",
"medium",
"metadata",
"moderated",
"modify",
"nextval",
"nulls",
"pageSym",
"purge",
"rebuild",
"recommend",
"redundant",
"refresh",
"reload",
"restore",
"routine",
"rule",
"run",
"s3",
"samples",
"secondaryLoad",
"secondaryUnload",
"share",
"shutdown",
"slave",
"source",
"statsDelta",
"statsExtended",
"statsOptions",
"stop",
"swaps",
"tidbJson",
"tokudbDefault",
"tokudbFast",
"tokudbLzma",
"tokudbQuickLZ",
"tokudbSmall",
"tokudbSnappy",
"tokudbUncompressed",
"tokudbZlib",
"tokudbZstd",
"topn",
"trace",
"traditional",
"trueCardCost",
"verboseType",
"warnings",
"workload",
"against",
"ago",
"always",
"apply",
"backups",
"bernoulli",
"bindingCache",
"builtins",
"cascaded",
"causal",
"cleanup",
"client",
"collation",
"columnar",
"columnStatsUsage",
"committed",
"config",
"consistency",
"consistent",
"depth",
"disabled",
"dump",
"enabled",
"engines",
"events",
"evolve",
"expire",
"exprPushdownBlacklist",
"extended",
"faultsSym",
"found",
"function",
"grants",
"histogramsInFlight",
"internal",
"invoker",
"io",
"language",
"level",
"list",
"log",
"master",
"monitor",
"never",
"oltpReadOnly",
"oltpReadWrite",
"oltpWriteOnly",
"optimistic",
"optRuleBlacklist",
"parser",
"partial",
"partitioning",
"percent",
"pessimistic",
"point",
"policies",
"preserve",
"profile",
"profiles",
"queries",
"raw",
"recent",
"region",
"replay",
"replayer",
"restores",
"reuse",
"rollup",
"secondary",
"security",
"serializable",
"sessionStates",
"simple",
"statsHealthy",
"statsHistograms",
"statsLocked",
"statsMeta",
"switchesSym",
"system",
"systemTime",
"target",
"temptable",
"timeout",
"tls",
"top",
"tpcc",
"tpch10",
"transaction",
"triggers",
"uncommitted",
"undefined",
"unset",
"width",
"x509",
"addDate",
"advise",
"any",
"approxCountDistinct",
"approxPercentile",
"avg",
"bitAnd",
"bitOr",
"bitXor",
"bound",
"cast",
"curDate",
"curTime",
"dateAdd",
"dateSub",
"escape",
"event",
"exclusive",
"explore",
"extract",
"file",
"follower",
"getFormat",
"groupConcat",
"imports",
"ioReadBandwidth",
"ioWriteBandwidth",
"jsonArrayagg",
"jsonObjectAgg",
"jsonSumCrc32",
"lastval",
"leader",
"learner",
"max",
"max_idxnum",
"max_minutes",
"member",
"min",
"names",
"nodeID",
"nodeState",
"now",
"per_db",
"per_table",
"position",
"process",
"proxy",
"quick",
"replicas",
"replication",
"reset",
"reverse",
"rowCount",
"running",
"setval",
"shared",
"some",
"sqlBufferResult",
"sqlCache",
"sqlNoCache",
"staleness",
"std",
"stddev",
"stddevPop",
"stddevSamp",
"strict",
"strong",
"subDate",
"substring",
"sum",
"super",
"timestampAdd",
"timestampDiff",
"trim",
"tsoType",
"variance",
"varPop",
"varSamp",
"voter",
"weightString",
"'('",
"on",
"stringLit",
"with",
"partition",
"not2",
"defaultKwd",
"not",
"as",
"collate",
"union",
"using",
"left",
"right",
"'+'",
"'-'",
"mod",
"values",
"null",
"ignore",
"replace",
"intLit",
"eq",
"charType",
"except",
"intersect",
"where",
"fetch",
"set",
"limit",
"forKwd",
"'*'",
"lock",
"into",
"from",
"force",
"order",
"and",
"or",
"andand",
"pipesAsOr",
"xor",
"group",
"having",
"straightJoin",
"window",
"use",
"join",
"ifKwd",
"desc",
"like",
"natural",
"cross",
"inner",
"binaryType",
"'}'",
"explain",
"insert",
"rows",
"tableKwd",
"when",
"elseKwd",
"rangeKwd",
"restrict",
"tableSample",
"groups",
"dayHour",
"dayMicrosecond",
"dayMinute",
"daySecond",
"hourMicrosecond",
"hourMinute",
"hourSecond",
"minuteMicrosecond",
"minuteSecond",
"secondMicrosecond",
"yearMonth",
"asc",
"in",
"then",
"caseKwd",
"repeat",
"'<'",
"'>'",
"falseKwd",
"singleAtIdentifier",
"trueKwd",
"decLit",
"floatLit",
"'/'",
"between",
"ge",
"is",
"le",
"neq",
"neqSynonym",
"nulleq",
"'%'",
"'&'",
"'^'",
"'|'",
"div",
"lsh",
"rsh",
"currentUser",
"hexLit",
"ilike",
"regexpKwd",
"rlike",
"selectKwd",
"bitLit",
"memberof",
"row",
"interval",
"paramMarker",
"'{'",
"key",
"database",
"exists",
"underscoreCS",
"convert",
"builtinCurDate",
"builtinNow",
"currentDate",
"currentTs",
"localTime",
"localTs",
"doubleAtIdentifier",
"builtinCount",
"primary",
"'!'",
"'~'",
"builtinApproxCountDistinct",
"builtinApproxPercentile",
"builtinBitAnd",
"builtinBitOr",
"builtinBitXor",
"builtinCast",
"builtinCurTime",
"builtinDateAdd",
"builtinDateSub",
"builtinExtract",
"builtinGroupConcat",
"builtinMax",
"builtinMin",
"builtinPosition",
"builtinStddevPop",
"builtinStddevSamp",
"builtinSubstring",
"builtinSum",
"builtinSysDate",
"builtinTranslate",
"builtinTrim",
"builtinUser",
"builtinVarPop",
"builtinVarSamp",
"cumeDist",
"currentRole",
"currentTime",
"denseRank",
"firstValue",
"lag",
"lastValue",
"lead",
"nthValue",
"ntile",
"percentRank",
"rank",
"rowNumber",
"tidbCurrentTSO",
"utcDate",
"utcTime",
"utcTimestamp",
"check",
"sql",
"unique",
"constraint",
"references",
"generated",
"pipes",
"character",
"index",
"match",
"update",
"to",
"analyze",
"'.'",
"all",
"array",
"assignmentEq",
"jss",
"juss",
"maxValue",
"by",
"alter",
"lines",
"require",
"lateral",
"'@'",
"doubleType",
"floatType",
"decimalType",
"realType",
"varcharacter",
"varcharType",
"cascade",
"drop",
"integerType",
"intType",
"read",
"varbinaryType",
"asof",
"bigIntType",
"blobType",
"float4Type",
"float8Type",
"int1Type",
"int2Type",
"int3Type",
"int4Type",
"int8Type",
"long",
"longblobType",
"longtextType",
"mediumblobType",
"mediumIntType",
"mediumtextType",
"middleIntType",
"numericType",
"smallIntType",
"tinyblobType",
"tinyIntType",
"tinytextType",
"create",
"foreign",
"fulltext",
"toTimestamp",
"toTSO",
"optimize",
"rename",
"write",
"add",
"change",
"Identifier",
"NotKeywordToken",
"TiDBKeyword",
"UnReservedKeyword",
"SubSelect",
"UserVariable",
"Literal",
"StringLiteral",
"SimpleIdent",
"NextValueForSequence",
"FunctionCallGeneric",
"FunctionCallKeyword",
"FunctionCallNonKeyword",
"FunctionNameConflict",
"FunctionNameDateArith",
"FunctionNameDateArithMultiForms",
"FunctionNameDatetimePrecision",
"FunctionNameOptionalBraces",
"FunctionNameSequence",
"SimpleExpr",
"SumExpr",
"SystemVariable",
"Variable",
"WindowFuncCall",
"BitExpr",
"PredicateExpr",
"BoolPri",
"Expression",
"NUM",
"EqOpt",
"logAnd",
"logOr",
"deleteKwd",
"TableName",
"StringName",
"SelectStmt",
"SelectStmtBasic",
"SelectStmtFromDualTable",
"SelectStmtFromTable",
"LengthNum",
"SetOprClause",
"SetOprClauseList",
"SetOprStmtWithLimitOrderBy",
"SetOprStmtWoutLimitOrderBy",
"WithClause",
"SelectStmtWithClause",
"SetOprStmt",
"unsigned",
"zerofill",
"over",
"ColumnName",
"UpdateStmtNoWith",
"DeleteWithoutUsingStmt",
"InsertIntoStmt",
"Int64Num",
"ReplaceIntoStmt",
"UpdateStmt",
"describe",
"distinct",
"distinctRow",
"while",
"lowPriority",
"WindowingClause",
"delayed",
"DeleteWithUsingStmt",
"highPriority",
"iterate",
"leave",
"DeleteFromStmt",
"hintComment",
"FieldLen",
"OrderBy",
"SelectStmtLimit",
"OptWindowingClause",
"AnalyzeTableStmt",
"CommitStmt",
"RollbackStmt",
"SetStmt",
"sqlBigResult",
"sqlCalcFoundRows",
"sqlSmallResult",
"terminated",
"CharsetKw",
"ExpressionList",
"Username",
"enclosed",
"ExplainStmt",
"ExplainSym",
"IfExists",
"IfNotExists",
"PartitionNameList",
"TruncateTableStmt",
"UseStmt",
"escaped",
"optionallyEnclosedBy",
"PlacementPolicyOption",
"ProcedureBlockContent",
"ProcedureUnlabelLoopStmt",
"ProcedureCaseStmt",
"ProcedureCloseCur",
"ProcedureFetchInto",
"ProcedureIfstmt",
"ProcedureIterate",
"ProcedureLabeledBlock",
"ProcedurelabeledLoopStmt",
"ProcedureLeave",
"ProcedureOpenCur",
"ProcedureProcStmt",
"ProcedureSearchedCase",
"ProcedureSimpleCase",
"ProcedureStatementStmt",
"ProcedureUnlabeledBlock",
"ProcedureUnlabelLoopBlock",
"TableNameList",
"OptFieldLen",
"WhereClause",
"WhereClauseOptional",
"DistinctKwd",
"TimestampUnit",
"DistinctOpt",
"EqOrAssignmentEq",
"ExprOrDefault",
"DefaultKwdOpt",
"NotSym",
"JoinTable",
"noWriteToBinLog",
"OptBinary",
"release",
"RolenameComposed",
"TableFactor",
"TableRef",
"TimeUnit",
"AnalyzeOptionListOpt",
"ColumnNameList",
"ConstraintKeywordOpt",
"FromOrIn",
"NumLiteral",
"PolicyName",
"AlterTableStmt",
"CharsetName",
"DBName",
"ImportIntoStmt",
"IndexPartSpecification",
"load",
"NoWriteToBinLogAliasOpt",
"OrderByOptional",
"PartDefOption",
"SignedNum",
"BuggyDefaultFalseDistinctOpt",
"Char",
"DefaultFalseDistinctOpt",
"ExpressionListOpt",
"IndexPartSpecificationList",
"JoinType",
"ResourceGroupName",
"Rolename",
"RoleNameString",
"VariableName",
"CrossOpt",
"ExplainableStmt",
"IndexInvisible",
"IndexType",
"KeyOrIndex",
"ReferDef",
"SelectStmtLimitOpt",
"SetExpr",
"WithClustered",
"AllOrPartitionNameList",
"BindableStmt",
"ColumnOption",
"ColumnPosition",
"DatabaseSym",
"FieldsOrColumns",
"ForceOpt",
"GeneratedAlways",
"IndexName",
"IndexOption",
"IndexOptionList",
"kill",
"PartitionNameListOpt",
"PrimaryOpt",
"Priority",
"ProcedureProcStmt1s",
"RowFormat",
"RowValue",
"show",
"ShowDatabaseNameOpt",
"SplitOptionBetween",
"TableOptimizerHints",
"TableOption",
"varying",
"BeginTransactionStmt",
"BRIEBooleanOptionName",
"BRIEIntegerOptionName",
"BRIEKeywordOptionName",
"BRIEOption",
"BRIEOptions",
"BRIEStringOptionName",
"column",
"ColumnDef",
"ColumnOptionList",
"ColumnOptionListOpt",
"DatabaseOption",
"EscapedTableRef",
"FieldTerminator",
"grant",
"IgnoreOptional",
"IndexNameList",
"LoadDataStmt",
"procedure",
"ReleaseSavepointStmt",
"RolenameList",
"SavepointStmt",
"UsernameList",
"Varchar",
"AlgorithmClause",
"BitValueType",
"BlobType",
"Boolean",
"BooleanType",
"BuiltinFunction",
"ByItem",
"CollationName",
"ColumnKeywordOpt",
"DateAndTimeType",
"DirectPlacementOption",
"DirectResourceGroupOption",
"FieldOpt",
"FieldOpts",
"FixedPointType",
"FloatingPointType",
"IdentList",
"IndexNameAndTypeOpt",
"infile",
"IntegerType",
"LimitOption",
"LockClause",
"NChar",
"NumericType",
"NVarchar",
"OptCharsetWithOptBinary",
"option",
"OptNullTreatment",
"PriorityOpt",
"RestrictOrCascadeOpt",
"SelectLockOpt",
"SelectStmtIntoOption",
"SignedLiteral",
"StringType",
"TableAsName",
"TableOptimizerHintsOpt",
"TableRefs",
"TextType",
"Type",
"UserSpec",
"Year",
"AsOfClause",
"Assignment",
"AuthString",
"ByList",
"ConfigItemName",
"Constraint",
"ConstraintColumnarIndex",
"ConstraintVectorIndex",
"ConstraintWithColumnarIndex",
"CurdateSym",
"FloatOpt",
"IndexTypeName",
"NowSym",
"NowSymFunc",
"NowSymOptionFraction",
"NumList",
"optionally",
"OptWild",
"outer",
"Precision",
"ReturningClause",
"RowStmt",
"SequenceOption",
"TableNameOptWild",
"TableOptionList",
"TextString",
"TraceableStmt",
"TransactionChar",
"UserSpecList",
"WindowName",
"AnalyzeOption",
"AssignmentList",
"AttributesOpt",
"CastType",
"CommonTableExpr",
"CreateTableStmt",
"DatabaseOptionList",
"DefaultTrueDistinctOpt",
"DirectResourceGroupBackgroundOption",
"DirectResourceGroupRunawayOption",
"DynamicCalibrateResourceOption",
"elseIfKwd",
"EnforcedOrNot",
"ExtendedPriv",
"Field",
"GlobalOrLocalOpt",
"GlobalScope",
"GroupByClause",
"IndexHint",
"IndexHintType",
"keys",
"LoadDataOptionListOpt",
"LocationLabelList",
"MaskingPolicyRestrictOperation",
"NextValueForSequenceParentheses",
"NowSymOptionFractionParentheses",
"OptOrder",
"OptTemporary",
"PartDefOptionList",
"PartitionDefinition",
"PasswordOrLockOption",
"PluginNameList",
"PrivElem",
"PrivType",
"QueryWatchOption",
"QueryWatchTextOption",
"RecommendIndexOption",
"RequireClause",
"RequireClauseOpt",
"RequireListElement",
"RolenameWithoutIdent",
"RoleOrPrivElem",
"SelectStmtGroup",
"SetOprOpt",
"SplitIndexOption",
"SplitOption",
"StatsObject",
"StringList",
"StringLitOrUserVariable",
"TableAliasRefList",
"TableAsNameOpt",
"TableElement",
"TableOrTables",
"TransactionChars",
"trigger",
"unlock",
"until",
"usage",
"ValuesList",
"ValuesStmtList",
"ValueSym",
"VariableAssignment",
"WindowFrameStart",
"AddQueryWatchStmt",
"AdminStmt",
"AllColumnsOrPredicateColumnsOpt",
"AlterDatabaseStmt",
"AlterInstanceStmt",
"AlterJobOption",
"AlterOrderItem",
"AlterPolicyStmt",
"AlterRangeStmt",
"AlterResourceGroupStmt",
"AlterSequenceOption",
"AlterSequenceStmt",
"AlterTableSpec",
"AlterUserStmt",
"BinlogStmt",
"BRIEStmt",
"BRIETables",
"CalibrateResourceStmt",
"call",
"CallStmt",
"CancelDistributionJobStmt",
"CancelImportStmt",
"CheckConstraintKeyword",
"ColumnNameListOpt",
"ColumnNameOrUserVariable",
"ColumnNameOrUserVarListOptWithBrackets",
"CommentOrAttributeOption",
"CompletionTypeWithinTransaction",
"ConnectionOption",
"ConnectionOptions",
"CreateBindingStmt",
"CreateDatabaseStmt",
"CreateIndexStmt",
"CreateMaskingPolicyStmt",
"CreatePolicyStmt",
"CreateProcedureStmt",
"CreateResourceGroupStmt",
"CreateRoleStmt",
"CreateSequenceStmt",
"CreateStatisticsStmt",
"CreateTableOptionListOpt",
"CreateUserStmt",
"CreateViewStmt",
"databases",
"DeallocateStmt",
"DeallocateSym",
"DefaultOrExpression",
"DistributeTableStmt",
"DoStmt",
"DropBindingStmt",
"DropDatabaseStmt",
"DropIndexStmt",
"DropPolicyStmt",
"DropProcedureStmt",
"DropQueryWatchStmt",
"DropResourceGroupStmt",
"DropRoleStmt",
"DropSequenceStmt",
"DropStatisticsStmt",
"DropStatsStmt",
"DropTableStmt",
"DropUserStmt",
"DropViewStmt",
"DuplicateOpt",
"ElseCaseOpt",
"EmptyStmt",
"EncryptionOpt",
"EnforcedOrNotOpt",
"ExecuteStmt",
"ExplainFormatType",
"FieldItem",
"FieldList",
"Fields",
"FlashbackDatabaseStmt",
"FlashbackTableStmt",
"FlashbackToNewName",
"FlashbackToTimestampStmt",
"FlushStmt",
"FormatOpt",
"FuncDatetimePrecList",
"FuncDatetimePrecListOpt",
"GrantProxyStmt",
"GrantRoleStmt",
"GrantStmt",
"HandleRange",
"HashString",
"HavingClause",
"HelpStmt",
"IdentListWithParenOpt",
"IndexHintList",
"IndexHintListOpt",
"IndexLockAndAlgorithmOpt",
"inout",
"InsertValues",
"IntoOpt",
"KeyOrIndexOpt",
"KillOrKillTiDB",
"KillStmt",
"LikeOrIlikeEscapeOpt",
"LimitClause",
"linear",
"LinearOpt",
"Lines",
"LoadDataOption",
"LoadDataSetItem",
"LoadDataSetSpecOpt",
"LoadStatsStmt",
"LockStatsStmt",
"LockTablesStmt",
"MaskingPolicyRestrictOnOpt",
"MaskingPolicyRestrictOperationList",
"MaskingPolicyStateOpt",
"MaxValueOrExpression",
"NonTransactionalDMLStmt",
"ObjectType",
"of",
"OfTablesOpt",
"OnCommitOpt",
"OnDelete",
"OnUpdate",
"OptCollate",
"OptFull",
"OptimizeTableStmt",
"OptInteger",
"OptionalBraces",
"OptionLevel",
"OptLeadLagInfo",
"OptLLDefault",
"OptVectorElementType",
"out",
"OuterOpt",
"PartitionDefinitionList",
"PartitionDefinitionListOpt",
"PartitionIntervalOpt",
"PartitionOpt",
"PasswordOpt",
"PasswordOrLockOptionList",
"PasswordOrLockOptions",
"PlacementOptionList",
"PlanReplayerStmt",
"PreparedStmt",
"PrivLevel",
"ProcedurceCond",
"ProcedurceLabelOpt",
"ProcedureDecl",
"ProcedureHcond",
"ProcedureIf",
"QuickOptional",
"RecommendIndexOptionList",
"RecommendIndexOptionListOpt",
"RecommendIndexStmt",
"RecoverTableStmt",
"ReferOpt",
"RefreshStatsStmt",
"RegexpSym",
"RenameTableStmt",
"RenameUserStmt",
"RepeatableOpt",
"ResourceGroupNameOption",
"ResourceGroupOptionList",
"ResourceGroupRunawayActionOption",
"ResourceGroupRunawayWatchOption",
"RestartStmt",
"revoke",
"RevokeRoleStmt",
"RevokeStmt",
"RoleOrPrivElemList",
"RoleSpec",
"SearchWhenThen",
"SelectStmtOpt",
"SelectStmtSQLCache",
"SetBindingStmt",
"SetDefaultRoleOpt",
"SetDefaultRoleStmt",
"SetRoleStmt",
"ShowProfileType",
"ShowStmt",
"ShowTableAliasOpt",
"ShutdownStmt",
"SimpleWhenThen",
"SplitRegionStmt",
"SpOptInout",
"SpPdparam",
"sqlexception",
"sqlstate",
"sqlwarning",
"Statement",
"StatsObjectList",
"StatsOptionsOpt",
"StatsPersistentVal",
"StatsType",
"StringLitOrUserVariableList",
"SubPartDefinition",
"SubPartitionMethod",
"Symbol",
"TableElementList",
"TableLock",
"TableNameListOpt",
"TablesTerminalSym",
"TableToTable",
"TextStringList",
"TraceStmt",
"TrafficCaptureOpt",
"TrafficReplayOpt",
"TrafficStmt",
"UnlockStatsStmt",
"UnlockTablesStmt",
"UpdateIndexElem",
"UserToUser",
"VariableAssignmentList",
"WhenClause",
"WindowDefinition",
"WindowFrameBound",
"WindowSpec",
"WithGrantOptionOpt",
"WithList",
"Writeable",
"':'",
"AdminShowSlow",
"AdminStmtLimitOpt",
"AlterJobOptionList",
"AlterOrderList",
"AlterSequenceOptionList",
"AlterTableSpecList",
"AlterTableSpecListOpt",
"AlterTableSpecSingleOpt",
"AnalyzeOptionList",
"AnyOrAll",
"ArrayKwdOpt",
"AsOfClauseOpt",
"AsOpt",
"AuthOption",
"AuthPlugin",
"AutoRandomOpt",
"BDRRole",
"BetweenOrNotOp",
"BindingStatusType",
"both",
"CalibrateOption",
"CalibrateResourceWorkloadOption",
"CharsetNameOrDefault",
"CharsetOpt",
"ClusterOpt",
"ColumnFormat",
"ColumnList",
"ColumnNameOrUserVariableList",
"ColumnNameOrUserVarListOpt",
"ColumnSetValueList",
"CompareOp",
"ConnectionOptionList",
"ConstraintElem",
"continueKwd",
"CreateSequenceOptionListOpt",
"CreateTableSelectOpt",
"CreateViewSelectOpt",
"cursor",
"DatabaseOptionListOpt",
"DBNameList",
"DefaultOrExpressionList",
"DefaultValueExpr",
"DryRunOptions",
"dual",
"DynamicCalibrateOptionList",
"ElseOpt",
"EnforcedOrNotOrNotNullOpt",
"exit",
"ExpressionOpt",
"FetchFirstOpt",
"FieldAsName",
"FieldAsNameOpt",
"FieldItemList",
"FirstAndLastPartOpt",
"FirstOrNext",
"FlushOption",
"FromDual",
"FulltextSearchModifierOpt",
"FuncDatetimePrec",
"GetFormatSelector",
"GlobalOrLocal",
"HandleRangeList",
"IgnoreLines",
"IlikeOrNotOp",
"ImportFromSelectStmt",
"IndexHintScope",
"IndexKeyTypeOpt",
"IndexPartSpecificationListOpt",
"IndexTypeOpt",
"InOrNotOp",
"InstanceOption",
"IntervalExpr",
"IsolationLevel",
"IsOrNotOp",
"leading",
"LikeOrNotOp",
"LikeTableWithOrWithoutParen",
"LinesTerminated",
"LoadDataOptionList",
"LoadDataSetList",
"LocalOpt",
"LockType",
"LogTypeOpt",
"LowPriorityOpt",
"Match",
"MatchOpt",
"MaxValPartOpt",
"MaxValueOrExpressionList",
"NullPartOpt",
"OnDeleteUpdateOpt",
"OnDuplicateKeyUpdate",
"OptBinMod",
"OptCharset",
"OptExistingWindowName",
"OptFromFirstLast",
"OptGConcatSeparator",
"OptionalShardColumn",
"OptPartitionClause",
"OptSpPdparams",
"OptTable",
"optValue",
"OptWindowFrameClause",
"OptWindowOrderByClause",
"Order",
"OrReplace",
"outfile",
"PartDefValuesOpt",
"PartitionKeyAlgorithmOpt",
"PartitionMethod",
"PartitionNumOpt",
"PlanReplayerDumpOpt",
"precisionType",
"PrepareSQL",
"procedurceElseIfs",
"ProcedureCall",
"ProcedureCursorSelectStmt",
"ProcedureDeclIdents",
"ProcedureDecls",
"ProcedureDeclsOpt",
"ProcedureFetchList",
"ProcedureHandlerType",
"ProcedureHcondList",
"ProcedureOptDefault",
"ProcedureOptFetchNo",
"ProcedureProcStmts",
"QueryWatchOptionList",
"recursive",
"RefreshStatsClusterOpt",
"RefreshStatsMode",
"RefreshStatsModeOpt",
"RegexpOrNotOp",
"ReorganizePartitionRuleOpt",
"Replica",
"RequireList",
"ResourceGroupBackgroundOptionList",
"ResourceGroupPriorityOption",
"ResourceGroupRunawayOptionList",
"RoleSpecList",
"RowOrRows",
"SearchedWhenThenList",
"SelectStmtFieldList",
"SelectStmtOpts",
"SelectStmtOptsList",
"SequenceOptionList",
"SetOpr",
"SetRoleOpt",
"ShardableStmt",
"ShowImportJobsTarget",
"ShowImportJobTarget",
"ShowIndexKwd",
"ShowLikeOrWhereOpt",
"ShowPlacementTarget",
"ShowProfileArgsOpt",
"ShowProfileTypes",
"ShowProfileTypesOpt",
"ShowTargetFilterable",
"SimpleWhenThenList",
"spatial",
"SplitIndexList",
"SplitIndexListOpt",
"SplitSyntaxOption",
"SpPdparams",
"ssl",
"Start",
"Starting",
"starting",
"StatementList",
"StatementScope",
"StorageMedia",
"stored",
"StringNameOrBRIEOptionKeyword",
"SubPartDefinitionList",
"SubPartDefinitionListOpt",
"SubPartitionNumOpt",
"SubPartitionOpt",
"TableAsNameOptDelete",
"TableElementListOpt",
"TableLockList",
"TableRefsClause",
"TableSampleMethodOpt",
"TableSampleOpt",
"TableSampleUnitOpt",
"TableToTableList",
"TrafficCaptureOptList",
"TrafficReplayOptList",
"trailing",
"TrimDirection",
"UpdateIndexesList",
"UpdateIndexesOpt",
"UserToUserList",
"UserVariableList",
"UsingRoles",
"Values",
"ValuesOpt",
"ViewAlgorithm",
"ViewCheckOption",
"ViewDefiner",
"ViewFieldList",
"ViewName",
"ViewSQLSecurity",
"virtual",
"VirtualOrStored",
"WatchDurationOption",
"WhenClauseList",
"WindowClauseOptional",
"WindowDefinitionList",
"WindowFrameBetween",
"WindowFrameExtent",
"WindowFrameUnits",
"WindowNameOrSpec",
"WindowSpecDetails",
"WithReadLockOpt",
"WithRollupClause",
"WithValidation",
"WithValidationOpt",
"$default",
"andnot",
"createTableSelect",
"empty",
"error",
"higherThanComma",
"higherThanParenthese",
"higherThanReturning",
"insertValues",
"invalid",
"lowerThanCharsetKwd",
"lowerThanComma",
"lowerThanCreateTableSelect",
"lowerThanEq",
"lowerThanFunction",
"lowerThanInsertValues",
"lowerThanKey",
"lowerThanLocal",
"lowerThanNot",
"lowerThanOn",
"lowerThanParenthese",
"lowerThanRemove",
"lowerThanSelectOpt",
"lowerThanSelectStmt",
"lowerThanSetKeyword",
"lowerThanStringLitToken",
"lowerThanValueKeyword",
"lowerThanWith",
"lowerThenOrder",
"neg",
"odbcDateType",
"odbcTimestampType",
"odbcTimeType",
"tableRefPriority",
}
yyReductions = []struct{ xsym, components int }{
{0, 1},
{1556, 1},
{964, 6},
{964, 8},
{964, 10},
{964, 5},
{964, 7},
{964, 7},
{964, 9},
{1552, 0},
{1552, 1},
{1551, 1},
{1551, 2},
{1156, 4},
{1156, 4},
{1156, 2},
{1334, 1},
{1334, 2},
{1334, 3},
{1528, 1},
{1528, 1},
{1528, 1},
{1529, 1},
{1529, 2},
{1529, 3},
{1336, 1},
{1336, 1},
{1336, 1},
{1335, 1},
{1335, 1},
{1335, 1},
{1335, 4},
{1121, 3},
{1121, 3},
{1121, 3},
{1121, 3},
{1121, 4},
{1595, 0},
{1595, 3},
{1595, 3},
{1052, 3},
{1052, 3},
{1052, 3},
{1052, 1},
{1052, 3},
{1052, 3},
{1052, 3},
{1052, 5},
{1052, 4},
{1052, 3},
{1052, 5},
{1052, 4},
{1052, 3},
{1527, 1},
{1527, 2},
{1527, 3},
{1120, 3},
{1120, 3},
{1313, 1},
{1313, 2},
{1313, 3},
{1051, 3},
{1051, 3},
{1051, 3},
{1051, 3},
{1051, 3},
{1051, 3},
{1051, 3},
{1051, 3},
{1051, 3},
{1051, 3},
{1051, 3},
{1051, 3},
{921, 4},
{921, 4},
{921, 4},
{921, 4},
{1114, 3},
{1114, 3},
{1363, 3},
{1363, 3},
{1400, 1},
{1400, 2},
{1400, 4},
{1400, 1},
{1400, 8},
{1400, 8},
{1400, 3},
{1400, 3},
{1400, 2},
{1134, 0},
{1134, 3},
{1187, 1},
{1187, 5},
{1187, 6},
{1187, 5},
{1187, 5},
{1187, 5},
{1187, 6},
{1187, 2},
{1187, 5},
{1187, 6},
{1187, 8},
{1187, 8},
{1187, 5},
{1187, 5},
{1187, 12},
{1187, 4},
{1187, 4},
{1187, 4},
{1187, 3},
{1187, 8},
{1187, 5},
{1187, 5},
{1187, 10},
{1187, 8},
{1187, 1},
{1187, 1},
{1187, 3},
{1187, 4},
{1187, 5},
{1187, 3},
{1187, 4},
{1187, 8},
{1187, 4},
{1187, 7},
{1187, 3},
{1187, 4},
{1187, 4},
{1187, 4},
{1187, 4},
{1187, 2},
{1187, 2},
{1187, 4},
{1187, 4},
{1187, 4},
{1187, 3},
{1187, 2},
{1187, 2},
{1187, 5},
{1187, 6},
{1187, 6},
{1187, 8},
{1187, 5},
{1187, 5},
{1187, 3},
{1187, 3},
{1187, 3},
{1187, 5},
{1187, 1},
{1187, 1},
{1187, 1},
{1187, 1},
{1187, 2},
{1187, 2},
{1187, 1},
{1187, 1},
{1187, 4},
{1187, 3},
{1187, 4},
{1187, 1},
{1187, 1},
{1524, 0},
{1524, 5},
{993, 1},
{993, 1},
{1607, 0},
{1607, 1},
{1606, 2},
{1606, 2},
{992, 1},
{992, 1},
{1127, 0},
{1127, 1},
{1127, 1},
{1041, 3},
{1041, 3},
{1041, 3},
{1041, 3},
{1041, 3},
{1062, 3},
{1062, 3},
{1391, 2},
{1391, 2},
{988, 1},
{988, 1},
{1270, 0},
{1270, 1},
{1049, 0},
{1049, 1},
{996, 0},
{996, 1},
{996, 2},
{1399, 0},
{1399, 1},
{1398, 1},
{1398, 3},
{916, 1},
{916, 3},
{960, 0},
{960, 1},
{960, 2},
{1369, 1},
{1330, 3},
{1575, 1},
{1575, 3},
{1374, 3},
{1331, 3},
{1582, 1},
{1582, 3},
{1383, 3},
{1326, 5},
{1326, 3},
{1326, 4},
{1251, 4},
{1251, 5},
{1251, 5},
{1251, 4},
{1251, 5},
{1251, 5},
{1249, 4},
{1250, 0},
{1250, 2},
{1248, 4},
{1222, 10},
{1222, 13},
{1195, 4},
{1355, 6},
{1355, 8},
{1013, 6},
{1157, 1},
{1157, 2},
{1553, 0},
{1553, 2},
{1553, 1},
{1553, 3},
{900, 6},
{900, 7},
{900, 8},
{900, 8},
{900, 9},
{900, 10},
{900, 9},
{900, 8},
{900, 7},
{900, 9},
{1177, 0},
{1177, 2},
{1177, 2},
{958, 0},
{958, 2},
{1401, 1},
{1401, 3},
{1401, 2},
{1112, 2},
{1112, 2},
{1112, 3},
{1112, 3},
{1112, 2},
{1112, 2},
{1112, 2},
{1083, 3},
{1113, 1},
{1113, 3},
{1017, 1},
{1017, 2},
{1017, 2},
{1017, 2},
{1017, 4},
{1017, 5},
{1017, 6},
{1017, 4},
{1017, 5},
{1189, 2},
{1025, 3},
{1025, 3},
{876, 1},
{876, 3},
{876, 5},
{959, 1},
{959, 3},
{1198, 0},
{1198, 1},
{1263, 0},
{1263, 3},
{1057, 1},
{1057, 3},
{1421, 0},
{1421, 1},
{1420, 1},
{1420, 3},
{1199, 1},
{1199, 1},
{1200, 0},
{1200, 3},
{901, 1},
{901, 2},
{1006, 0},
{1006, 1},
{949, 1},
{949, 1},
{1124, 1},
{1124, 2},
{1242, 0},
{1242, 1},
{1439, 2},
{1439, 1},
{995, 2},
{995, 1},
{995, 1},
{995, 3},
{995, 4},
{995, 2},
{995, 2},
{995, 1},
{995, 3},
{995, 2},
{995, 3},
{995, 3},
{995, 2},
{995, 6},
{995, 6},
{995, 1},
{995, 2},
{995, 2},
{995, 2},
{995, 2},
{995, 3},
{1408, 0},
{1408, 3},
{1408, 5},
{1561, 1},
{1561, 1},
{1561, 1},
{1418, 1},
{1418, 1},
{1418, 1},
{1000, 0},
{1000, 2},
{1594, 0},
{1594, 1},
{1594, 1},
{1026, 1},
{1026, 2},
{1027, 0},
{1027, 1},
{1425, 7},
{1425, 7},
{1425, 7},
{1425, 7},
{1425, 8},
{1425, 5},
{1477, 2},
{1477, 2},
{1477, 2},
{1478, 0},
{1478, 1},
{989, 5},
{1293, 3},
{1294, 3},
{1482, 0},
{1482, 1},
{1482, 1},
{1482, 2},
{1482, 2},
{1327, 1},
{1327, 1},
{1327, 2},
{1327, 2},
{1327, 2},
{1434, 1},
{1434, 1},
{1434, 1},
{1434, 1},
{1434, 3},
{1434, 3},
{1046, 3},
{1046, 3},
{1046, 4},
{1046, 4},
{1137, 3},
{1137, 1},
{1096, 1},
{1096, 3},
{1096, 4},
{1096, 3},
{1096, 1},
{1136, 3},
{1136, 1},
{835, 4},
{835, 4},
{1095, 1},
{1095, 1},
{1095, 1},
{1095, 1},
{1094, 1},
{1094, 1},
{1094, 1},
{1091, 1},
{1091, 1},
{1073, 1},
{1073, 2},
{1073, 2},
{962, 1},
{962, 1},
{962, 1},
{1365, 1},
{1365, 1},
{1365, 1},
{1411, 1},
{1411, 1},
{1214, 12},
{1233, 3},
{1207, 13},
{1460, 0},
{1460, 3},
{978, 1},
{978, 3},
{968, 3},
{968, 4},
{1266, 0},
{1266, 1},
{1266, 1},
{1266, 2},
{1266, 2},
{1459, 0},
{1459, 1},
{1459, 1},
{1459, 1},
{1459, 1},
{1459, 1},
{1178, 4},
{1178, 3},
{1206, 5},
{966, 1},
{963, 1},
{980, 1},
{980, 1},
{1028, 4},
{1028, 4},
{1028, 4},
{1028, 2},
{1028, 1},
{1028, 5},
{1431, 0},
{1431, 1},
{1118, 1},
{1118, 2},
{1117, 13},
{1117, 7},
{1292, 0},
{1292, 4},
{1292, 4},
{948, 0},
{948, 1},
{1309, 0},
{1309, 7},
{1453, 1},
{1453, 1},
{1382, 2},
{1580, 1},
{1580, 3},
{1581, 0},
{1581, 5},
{1368, 6},
{1368, 5},
{1500, 0},
{1500, 3},
{1501, 1},
{1501, 5},
{1501, 6},
{1501, 4},
{1501, 5},
{1501, 4},
{1501, 3},
{1501, 1},
{1308, 0},
{1308, 7},
{1464, 1},
{1464, 2},
{1481, 0},
{1481, 2},
{1479, 0},
{1479, 2},
{1446, 0},
{1446, 14},
{1276, 0},
{1276, 1},
{1567, 0},
{1567, 4},
{1566, 0},
{1566, 2},
{1502, 0},
{1502, 2},
{1307, 0},
{1307, 3},
{1306, 1},
{1306, 3},
{1141, 5},
{1565, 0},
{1565, 3},
{1564, 1},
{1564, 3},
{1367, 3},
{1140, 0},
{1140, 2},
{972, 3},
{972, 3},
{972, 4},
{972, 3},
{972, 3},
{972, 3},
{972, 4},
{972, 4},
{972, 3},
{972, 3},
{972, 3},
{972, 3},
{972, 1},
{1499, 0},
{1499, 4},
{1499, 6},
{1499, 1},
{1499, 5},
{1499, 1},
{1499, 1},
{1238, 0},
{1238, 1},
{1238, 1},
{1405, 0},
{1405, 1},
{1428, 0},
{1428, 1},
{1428, 1},
{1428, 1},
{1428, 1},
{1429, 1},
{1429, 1},
{1429, 1},
{1429, 1},
{1469, 2},
{1469, 4},
{1217, 11},
{1497, 0},
{1497, 2},
{1587, 0},
{1587, 3},
{1587, 3},
{1587, 3},
{1589, 0},
{1589, 3},
{1592, 0},
{1592, 3},
{1592, 3},
{1591, 1},
{1590, 0},
{1590, 3},
{1419, 1},
{1419, 3},
{1588, 0},
{1588, 4},
{1588, 4},
{1223, 2},
{878, 14},
{878, 9},
{890, 10},
{894, 1},
{894, 1},
{894, 2},
{894, 2},
{997, 1},
{1225, 4},
{1226, 7},
{1226, 7},
{1235, 6},
{1139, 0},
{1139, 1},
{1139, 2},
{1237, 4},
{1237, 6},
{1236, 3},
{1236, 5},
{1231, 3},
{1231, 5},
{1234, 3},
{1234, 5},
{1234, 4},
{1070, 0},
{1070, 1},
{1070, 1},
{1164, 1},
{1164, 1},
{855, 0},
{855, 1},
{1240, 0},
{1376, 2},
{1376, 5},
{1376, 3},
{1376, 6},
{913, 1},
{913, 1},
{913, 1},
{912, 3},
{912, 3},
{912, 4},
{912, 4},
{912, 2},
{912, 3},
{912, 2},
{912, 2},
{912, 4},
{912, 7},
{912, 5},
{912, 7},
{912, 5},
{912, 5},
{912, 5},
{912, 3},
{912, 3},
{912, 6},
{912, 6},
{912, 6},
{912, 6},
{1244, 1},
{1244, 1},
{1244, 1},
{1244, 1},
{1244, 1},
{1244, 1},
{1244, 1},
{1244, 1},
{1038, 2},
{1036, 3},
{1190, 5},
{1190, 5},
{1190, 3},
{1190, 4},
{1190, 3},
{1190, 6},
{1190, 4},
{1190, 6},
{1190, 4},
{1190, 5},
{1190, 4},
{1190, 5},
{1190, 5},
{1190, 5},
{1191, 2},
{1191, 2},
{1191, 2},
{1432, 1},
{1432, 3},
{1022, 0},
{1022, 2},
{1019, 1},
{1019, 1},
{1019, 1},
{1019, 1},
{1018, 1},
{1018, 1},
{1018, 1},
{1018, 1},
{1018, 1},
{1018, 1},
{1018, 1},
{1018, 1},
{1018, 1},
{1018, 1},
{1018, 1},
{1018, 1},
{1023, 1},
{1023, 1},
{1023, 1},
{1023, 1},
{1023, 1},
{1023, 1},
{1023, 1},
{1020, 1},
{1020, 1},
{1020, 2},
{1021, 3},
{1021, 3},
{1021, 3},
{1021, 3},
{1021, 5},
{1021, 3},
{1021, 3},
{1021, 3},
{1021, 3},
{1021, 6},
{1021, 3},
{1021, 3},
{1021, 3},
{1021, 3},
{1021, 3},
{1021, 3},
{1021, 3},
{1021, 3},
{1021, 3},
{1021, 3},
{1021, 3},
{865, 1},
{880, 1},
{854, 1},
{1044, 1},
{1044, 1},
{1044, 1},
{1300, 1},
{1300, 1},
{1300, 1},
{1196, 4},
{853, 3},
{853, 3},
{853, 3},
{853, 3},
{853, 2},
{853, 9},
{853, 3},
{853, 3},
{853, 3},
{853, 1},
{1221, 1},
{1221, 1},
{1287, 1},
{1287, 1},
{1450, 0},
{1450, 4},
{1450, 7},
{1450, 3},
{1450, 3},
{857, 1},
{857, 1},
{856, 1},
{856, 1},
{909, 1},
{909, 3},
{1480, 1},
{1480, 3},
{1433, 1},
{1433, 3},
{977, 0},
{977, 1},
{1255, 0},
{1255, 1},
{1254, 1},
{852, 3},
{852, 3},
{852, 4},
{852, 5},
{852, 1},
{1423, 1},
{1423, 1},
{1423, 1},
{1423, 1},
{1423, 1},
{1423, 1},
{1423, 1},
{1423, 1},
{1410, 1},
{1410, 2},
{1466, 1},
{1466, 2},
{1462, 1},
{1462, 2},
{1468, 1},
{1468, 2},
{1456, 1},
{1456, 2},
{1523, 1},
{1523, 2},
{1402, 1},
{1402, 1},
{1402, 1},
{851, 5},
{851, 3},
{851, 5},
{851, 4},
{851, 4},
{851, 3},
{851, 5},
{851, 1},
{1329, 1},
{1329, 1},
{1273, 0},
{1273, 2},
{1126, 1},
{1126, 3},
{1126, 5},
{1126, 2},
{1444, 0},
{1444, 1},
{1443, 1},
{1443, 2},
{1443, 1},
{1443, 2},
{1246, 1},
{1246, 3},
{1605, 0},
{1605, 2},
{1129, 4},
{1261, 0},
{1261, 2},
{1404, 0},
{1404, 1},
{1082, 3},
{914, 0},
{914, 2},
{915, 0},
{915, 3},
{1032, 0},
{1032, 1},
{1001, 0},
{1001, 1},
{1003, 0},
{1003, 2},
{1002, 3},
{1002, 1},
{1002, 1},
{1002, 3},
{1002, 2},
{1002, 1},
{1002, 1},
{1002, 1},
{1002, 1},
{1002, 5},
{1002, 3},
{1002, 3},
{1002, 2},
{1058, 1},
{1058, 3},
{1058, 3},
{1461, 0},
{1461, 1},
{987, 2},
{987, 2},
{1093, 1},
{1093, 1},
{1093, 1},
{1093, 1},
{1093, 1},
{1093, 1},
{986, 1},
{986, 1},
{826, 1},
{826, 1},
{826, 1},
{826, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{829, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{828, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{827, 1},
{1194, 2},
{1507, 1},
{1507, 3},
{1507, 4},
{1507, 6},
{879, 10},
{1269, 0},
{1269, 1},
{1268, 5},
{1268, 4},
{1268, 4},
{1268, 4},
{1268, 4},
{1268, 2},
{1268, 1},
{1268, 1},
{1268, 1},
{1268, 1},
{1268, 2},
{1172, 1},
{1172, 1},
{1170, 1},
{1170, 3},
{1010, 3},
{1586, 0},
{1586, 1},
{1585, 3},
{1585, 1},
{947, 1},
{947, 1},
{1422, 3},
{1422, 5},
{1483, 0},
{1483, 5},
{1102, 0},
{1102, 2},
{881, 7},
{832, 1},
{832, 1},
{832, 1},
{832, 1},
{832, 1},
{832, 1},
{832, 1},
{832, 2},
{832, 1},
{832, 1},
{832, 2},
{832, 2},
{833, 1},
{833, 2},
{1396, 1},
{1396, 3},
{1181, 2},
{897, 3},
{1085, 1},
{1085, 3},
{1047, 1},
{1047, 2},
{1496, 1},
{1496, 1},
{1138, 0},
{1138, 1},
{1138, 1},
{971, 0},
{971, 1},
{850, 3},
{850, 3},
{850, 3},
{850, 3},
{850, 3},
{850, 3},
{850, 5},
{850, 5},
{850, 5},
{850, 3},
{850, 3},
{850, 3},
{850, 3},
{850, 3},
{850, 3},
{850, 1},
{834, 1},
{834, 3},
{834, 5},
{845, 1},
{845, 1},
{845, 1},
{845, 1},
{845, 3},
{845, 1},
{845, 1},
{845, 1},
{845, 1},
{845, 1},
{845, 2},
{845, 2},
{845, 2},
{845, 2},
{845, 3},
{845, 2},
{845, 1},
{845, 3},
{845, 5},
{845, 6},
{845, 2},
{845, 4},
{845, 2},
{845, 7},
{845, 7},
{845, 5},
{845, 6},
{845, 6},
{845, 4},
{845, 4},
{845, 3},
{845, 3},
{1403, 0},
{1403, 1},
{943, 1},
{943, 1},
{945, 1},
{945, 1},
{976, 0},
{976, 1},
{1119, 0},
{1119, 1},
{974, 1},
{974, 2},
{839, 1},
{839, 1},
{839, 1},
{839, 1},
{839, 1},
{839, 1},
{839, 1},
{839, 1},
{839, 1},
{839, 1},
{839, 1},
{839, 1},
{839, 1},
{839, 1},
{839, 1},
{839, 1},
{839, 1},
{839, 1},
{839, 1},
{839, 1},
{839, 1},
{839, 1},
{839, 1},
{839, 1},
{839, 1},
{839, 1},
{839, 1},
{839, 1},
{839, 1},
{839, 1},
{839, 1},
{1299, 0},
{1299, 2},
{843, 1},
{843, 1},
{843, 1},
{843, 1},
{843, 1},
{842, 1},
{842, 1},
{842, 1},
{842, 1},
{842, 1},
{842, 1},
{837, 4},
{837, 4},
{837, 2},
{837, 3},
{837, 2},
{837, 4},
{837, 6},
{837, 2},
{837, 2},
{837, 2},
{837, 4},
{837, 6},
{837, 4},
{838, 4},
{838, 4},
{838, 6},
{838, 8},
{838, 8},
{838, 6},
{838, 6},
{838, 6},
{838, 6},
{838, 6},
{838, 8},
{838, 8},
{838, 8},
{838, 8},
{838, 4},
{838, 6},
{838, 6},
{838, 7},
{838, 4},
{838, 7},
{838, 7},
{838, 1},
{838, 8},
{838, 4},
{1452, 1},
{1452, 1},
{1452, 1},
{1452, 1},
{840, 1},
{840, 1},
{841, 1},
{841, 1},
{1579, 1},
{1579, 1},
{1579, 1},
{844, 4},
{844, 6},
{844, 1},
{846, 6},
{846, 4},
{846, 4},
{846, 5},
{846, 6},
{846, 5},
{846, 6},
{846, 5},
{846, 6},
{846, 5},
{846, 6},
{846, 5},
{846, 5},
{846, 8},
{846, 6},
{846, 6},
{846, 6},
{846, 6},
{846, 6},
{846, 6},
{846, 6},
{846, 5},
{846, 6},
{846, 7},
{846, 8},
{846, 8},
{846, 9},
{1488, 0},
{1488, 2},
{836, 4},
{836, 6},
{1451, 0},
{1451, 2},
{1451, 3},
{957, 1},
{957, 1},
{957, 1},
{957, 1},
{957, 1},
{957, 1},
{957, 1},
{957, 1},
{957, 1},
{957, 1},
{957, 1},
{957, 1},
{944, 1},
{944, 1},
{944, 1},
{944, 1},
{944, 1},
{944, 1},
{944, 1},
{944, 1},
{944, 1},
{944, 1},
{944, 1},
{944, 1},
{944, 1},
{944, 1},
{944, 1},
{944, 1},
{944, 1},
{1441, 0},
{1441, 1},
{1596, 1},
{1596, 2},
{1385, 4},
{1438, 0},
{1438, 2},
{1115, 2},
{1115, 3},
{1115, 1},
{1115, 1},
{1115, 2},
{1115, 2},
{1115, 2},
{1115, 2},
{1115, 2},
{1115, 1},
{1115, 1},
{1115, 2},
{1115, 1},
{1115, 3},
{1007, 1},
{1007, 1},
{1007, 1},
{1069, 0},
{1069, 1},
{859, 1},
{859, 3},
{859, 3},
{939, 1},
{939, 3},
{1105, 2},
{1105, 4},
{1161, 1},
{1161, 3},
{1099, 0},
{1099, 2},
{1322, 0},
{1322, 1},
{1315, 4},
{1505, 1},
{1505, 1},
{1243, 2},
{1243, 4},
{1583, 1},
{1583, 3},
{1219, 3},
{1220, 1},
{1220, 1},
{902, 1},
{902, 2},
{902, 3},
{902, 4},
{1202, 4},
{1202, 4},
{1202, 5},
{1202, 2},
{1202, 3},
{1202, 1},
{1202, 2},
{1353, 1},
{1337, 1},
{1262, 2},
{862, 4},
{863, 3},
{864, 7},
{1573, 0},
{1573, 7},
{1573, 5},
{1572, 0},
{1572, 1},
{1572, 1},
{1572, 1},
{1574, 0},
{1574, 1},
{1574, 1},
{1332, 0},
{1332, 4},
{861, 7},
{861, 6},
{861, 5},
{861, 6},
{861, 6},
{871, 2},
{871, 2},
{870, 2},
{870, 3},
{1390, 3},
{1390, 1},
{1116, 4},
{1449, 2},
{1597, 0},
{1597, 2},
{1598, 1},
{1598, 3},
{1386, 3},
{1111, 1},
{1388, 3},
{1603, 4},
{1486, 0},
{1486, 1},
{1490, 0},
{1490, 3},
{1495, 0},
{1495, 3},
{1494, 0},
{1494, 2},
{1601, 1},
{1601, 1},
{1601, 1},
{1600, 1},
{1600, 1},
{1174, 2},
{1174, 2},
{1174, 2},
{1174, 4},
{1174, 2},
{1599, 4},
{1387, 1},
{1387, 2},
{1387, 2},
{1387, 2},
{1387, 4},
{899, 0},
{899, 1},
{888, 2},
{1602, 1},
{1602, 1},
{849, 4},
{849, 4},
{849, 4},
{849, 4},
{849, 4},
{849, 5},
{849, 7},
{849, 7},
{849, 6},
{849, 6},
{849, 9},
{1301, 0},
{1301, 3},
{1301, 3},
{1302, 0},
{1302, 2},
{1068, 0},
{1068, 2},
{1068, 2},
{1487, 0},
{1487, 2},
{1487, 2},
{1571, 1},
{1077, 1},
{1077, 3},
{1029, 1},
{1029, 4},
{956, 1},
{956, 1},
{955, 6},
{955, 2},
{955, 4},
{955, 3},
{1005, 0},
{1005, 4},
{1162, 0},
{1162, 1},
{1568, 0},
{1568, 1},
{1075, 1},
{1075, 2},
{1131, 2},
{1131, 2},
{1131, 2},
{1458, 0},
{1458, 2},
{1458, 3},
{1458, 3},
{1130, 5},
{1033, 0},
{1033, 1},
{1033, 3},
{1033, 1},
{1033, 3},
{1264, 1},
{1264, 2},
{1265, 0},
{1265, 1},
{950, 3},
{950, 5},
{950, 7},
{950, 7},
{950, 9},
{950, 4},
{950, 6},
{950, 3},
{950, 5},
{950, 7},
{979, 1},
{979, 1},
{1305, 0},
{1305, 1},
{984, 1},
{984, 2},
{984, 2},
{1274, 0},
{1274, 2},
{1061, 1},
{1061, 1},
{1531, 1},
{1531, 1},
{1447, 1},
{1447, 1},
{1442, 0},
{1442, 1},
{898, 2},
{898, 4},
{898, 4},
{898, 5},
{990, 0},
{990, 1},
{1344, 1},
{1344, 1},
{1344, 1},
{1344, 1},
{1344, 1},
{1344, 1},
{1344, 1},
{1344, 1},
{1344, 1},
{1534, 0},
{1534, 1},
{1535, 2},
{1535, 1},
{1014, 1},
{1076, 0},
{1076, 1},
{1345, 1},
{1345, 1},
{1533, 1},
{1154, 0},
{1154, 1},
{1072, 0},
{1072, 5},
{830, 3},
{830, 3},
{830, 3},
{830, 3},
{1071, 0},
{1071, 3},
{1071, 3},
{1071, 4},
{1071, 5},
{1071, 4},
{1071, 5},
{1071, 5},
{1071, 4},
{1291, 0},
{1291, 2},
{872, 1},
{872, 1},
{872, 2},
{872, 2},
{869, 3},
{869, 3},
{868, 4},
{868, 4},
{868, 5},
{868, 2},
{868, 2},
{868, 3},
{867, 1},
{867, 3},
{866, 1},
{866, 1},
{1537, 2},
{1537, 2},
{1537, 2},
{1155, 1},
{903, 2},
{903, 4},
{903, 6},
{903, 4},
{903, 4},
{903, 3},
{903, 6},
{903, 6},
{903, 3},
{903, 4},
{1349, 3},
{1348, 6},
{1347, 1},
{1347, 1},
{1347, 1},
{1538, 3},
{1538, 1},
{1538, 1},
{1165, 1},
{1165, 3},
{1109, 3},
{1109, 2},
{1109, 2},
{1109, 3},
{1465, 2},
{1465, 2},
{1465, 2},
{1465, 1},
{991, 1},
{991, 1},
{991, 1},
{946, 1},
{946, 1},
{983, 1},
{983, 3},
{1086, 1},
{1086, 3},
{1086, 3},
{1173, 3},
{1173, 4},
{1173, 4},
{1173, 4},
{1173, 4},
{1173, 3},
{1173, 3},
{1173, 2},
{1173, 4},
{1173, 4},
{1173, 2},
{1173, 2},
{1415, 1},
{1415, 1},
{965, 1},
{965, 1},
{1048, 1},
{1048, 1},
{1384, 1},
{1384, 3},
{848, 1},
{848, 1},
{847, 1},
{831, 1},
{910, 1},
{910, 3},
{910, 2},
{910, 2},
{1039, 1},
{1039, 3},
{1310, 1},
{1310, 4},
{1084, 1},
{982, 1},
{982, 1},
{954, 3},
{954, 2},
{1152, 1},
{1152, 1},
{981, 1},
{981, 1},
{1037, 1},
{1037, 3},
{1394, 2},
{1394, 4},
{1394, 4},
{1409, 1},
{1409, 1},
{1176, 3},
{1176, 5},
{1176, 6},
{1176, 4},
{1176, 4},
{1176, 5},
{1176, 5},
{1176, 4},
{1176, 5},
{1176, 6},
{1176, 4},
{1176, 5},
{1176, 5},
{1176, 5},
{1176, 6},
{1176, 6},
{1176, 4},
{1176, 3},
{1176, 3},
{1176, 4},
{1176, 4},
{1176, 5},
{1176, 5},
{1176, 3},
{1176, 3},
{1176, 3},
{1176, 3},
{1176, 4},
{1176, 3},
{1176, 3},
{1176, 4},
{1176, 5},
{1176, 4},
{1176, 4},
{1176, 6},
{1395, 1},
{1395, 3},
{1180, 3},
{1393, 2},
{1393, 2},
{1393, 3},
{1393, 3},
{1454, 1},
{1454, 3},
{1259, 5},
{1097, 1},
{1097, 3},
{1351, 3},
{1351, 4},
{1351, 4},
{1351, 5},
{1351, 4},
{1351, 5},
{1351, 5},
{1351, 4},
{1351, 6},
{1351, 6},
{1351, 4},
{1351, 8},
{1351, 2},
{1351, 5},
{1351, 3},
{1351, 4},
{1351, 3},
{1351, 3},
{1351, 2},
{1351, 5},
{1351, 2},
{1351, 2},
{1351, 4},
{1351, 3},
{1351, 4},
{1351, 4},
{1351, 6},
{1544, 2},
{1544, 2},
{1544, 4},
{1547, 0},
{1547, 1},
{1546, 1},
{1546, 3},
{1350, 1},
{1350, 1},
{1350, 2},
{1350, 2},
{1350, 2},
{1350, 1},
{1350, 1},
{1350, 1},
{1350, 1},
{1545, 0},
{1545, 3},
{1584, 0},
{1584, 2},
{1542, 1},
{1542, 1},
{1542, 1},
{961, 1},
{961, 1},
{1548, 1},
{1548, 1},
{1548, 1},
{1548, 1},
{1548, 3},
{1548, 3},
{1548, 3},
{1548, 3},
{1548, 5},
{1548, 4},
{1548, 5},
{1548, 5},
{1548, 1},
{1548, 5},
{1548, 1},
{1548, 2},
{1548, 2},
{1548, 2},
{1548, 1},
{1548, 2},
{1548, 2},
{1548, 2},
{1548, 2},
{1548, 2},
{1548, 1},
{1548, 1},
{1548, 1},
{1548, 1},
{1548, 1},
{1548, 1},
{1548, 1},
{1548, 1},
{1548, 1},
{1548, 1},
{1548, 1},
{1548, 1},
{1548, 2},
{1548, 1},
{1548, 1},
{1548, 1},
{1548, 2},
{1548, 2},
{1548, 3},
{1548, 1},
{1548, 2},
{1543, 0},
{1543, 2},
{1543, 2},
{1541, 2},
{1541, 3},
{1540, 2},
{1540, 3},
{1128, 0},
{1128, 1},
{1128, 1},
{1560, 0},
{1560, 1},
{1560, 1},
{1560, 1},
{1296, 0},
{1296, 1},
{1012, 0},
{1012, 2},
{1352, 2},
{1525, 1},
{1525, 1},
{1252, 3},
{1143, 1},
{1143, 3},
{1448, 1},
{1448, 1},
{1448, 3},
{1448, 1},
{1448, 2},
{1448, 3},
{1448, 1},
{1448, 3},
{1475, 0},
{1475, 1},
{1475, 1},
{1475, 1},
{1475, 1},
{1475, 1},
{1417, 0},
{1417, 1},
{970, 0},
{970, 1},
{970, 1},
{1372, 0},
{1372, 1},
{1604, 0},
{1604, 3},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1361, 1},
{1108, 1},
{1108, 1},
{1108, 1},
{1108, 1},
{1108, 1},
{1108, 1},
{1108, 1},
{1108, 1},
{1108, 1},
{1108, 1},
{1108, 1},
{1108, 1},
{1108, 1},
{1108, 1},
{1108, 1},
{1108, 1},
{985, 1},
{985, 1},
{985, 1},
{985, 1},
{985, 1},
{985, 1},
{985, 1},
{985, 1},
{985, 1},
{985, 1},
{1559, 1},
{1559, 3},
{1087, 2},
{1089, 8},
{1088, 8},
{1090, 1},
{1090, 1},
{1090, 1},
{1197, 1},
{1197, 1},
{1163, 1},
{1163, 1},
{1370, 1},
{1370, 3},
{1569, 0},
{1569, 3},
{1015, 1},
{1015, 4},
{1015, 4},
{1015, 4},
{1015, 3},
{1015, 4},
{1015, 3},
{1015, 3},
{1015, 3},
{1015, 3},
{1015, 3},
{1015, 3},
{1015, 3},
{1015, 3},
{1015, 1},
{1015, 3},
{1015, 3},
{1015, 3},
{1015, 3},
{1015, 3},
{1015, 3},
{1015, 3},
{1015, 3},
{1015, 3},
{1015, 3},
{1015, 3},
{1015, 3},
{1015, 3},
{1015, 2},
{1015, 2},
{1015, 3},
{1015, 3},
{1015, 5},
{1015, 3},
{1015, 7},
{1015, 3},
{1015, 3},
{1015, 3},
{1015, 3},
{1015, 3},
{1015, 3},
{1015, 3},
{1015, 3},
{1015, 3},
{1015, 3},
{999, 0},
{999, 1},
{1364, 1},
{1364, 1},
{1215, 0},
{1215, 1},
{1106, 1},
{1106, 2},
{1106, 3},
{1492, 0},
{1492, 1},
{917, 3},
{1009, 3},
{1009, 3},
{1009, 3},
{1009, 3},
{1009, 3},
{1009, 3},
{1009, 3},
{1009, 3},
{1009, 3},
{1009, 3},
{1009, 3},
{1009, 3},
{1009, 3},
{1009, 3},
{1009, 3},
{1079, 1},
{1079, 1},
{1079, 1},
{1064, 3},
{1064, 2},
{1064, 3},
{1064, 3},
{1064, 2},
{1060, 1},
{1060, 1},
{1060, 1},
{1060, 1},
{1060, 1},
{1060, 1},
{1060, 1},
{1060, 1},
{1060, 1},
{1060, 1},
{1060, 1},
{1060, 1},
{1045, 1},
{1045, 1},
{1298, 0},
{1298, 1},
{1298, 1},
{1055, 1},
{1055, 1},
{1055, 1},
{1056, 1},
{1056, 1},
{1056, 1},
{1056, 2},
{1056, 1},
{1056, 1},
{1042, 1},
{1074, 3},
{1074, 2},
{1074, 3},
{1074, 2},
{1074, 3},
{1074, 3},
{1074, 2},
{1074, 2},
{1074, 1},
{1074, 2},
{1074, 5},
{1074, 5},
{1074, 1},
{1074, 3},
{1074, 2},
{1074, 3},
{975, 1},
{975, 1},
{1063, 1},
{1063, 2},
{1063, 2},
{1040, 2},
{1040, 2},
{1040, 1},
{1040, 1},
{1065, 2},
{1065, 2},
{1065, 1},
{1065, 2},
{1065, 2},
{1065, 3},
{1065, 3},
{1065, 2},
{1081, 1},
{1081, 1},
{1043, 1},
{1043, 2},
{1043, 1},
{1043, 1},
{1043, 2},
{1078, 1},
{1078, 2},
{1078, 1},
{1078, 1},
{1066, 1},
{1066, 1},
{1066, 1},
{1066, 1},
{1050, 1},
{1050, 2},
{1050, 2},
{1050, 2},
{1050, 3},
{896, 3},
{940, 0},
{940, 1},
{1053, 1},
{1053, 1},
{1053, 1},
{1054, 0},
{1054, 2},
{1092, 0},
{1092, 1},
{1092, 1},
{1101, 5},
{1484, 0},
{1484, 1},
{1303, 0},
{1303, 3},
{1303, 3},
{952, 0},
{952, 2},
{952, 3},
{1485, 0},
{1485, 2},
{908, 2},
{908, 1},
{908, 2},
{1295, 0},
{1295, 2},
{1159, 1},
{1159, 3},
{1107, 1},
{1107, 1},
{1107, 1},
{1375, 1},
{1375, 3},
{860, 1},
{860, 1},
{1563, 1},
{1563, 1},
{1563, 1},
{882, 1},
{882, 2},
{877, 11},
{877, 9},
{918, 2},
{941, 2},
{942, 0},
{942, 1},
{1216, 9},
{1212, 4},
{1188, 9},
{1188, 9},
{1179, 3},
{1183, 4},
{1463, 2},
{1463, 6},
{1080, 2},
{1110, 1},
{1110, 3},
{1204, 0},
{1204, 2},
{1424, 1},
{1424, 2},
{1203, 2},
{1203, 2},
{1203, 2},
{1203, 2},
{1150, 0},
{1150, 1},
{1149, 2},
{1149, 2},
{1149, 2},
{1149, 2},
{1526, 1},
{1526, 3},
{1526, 2},
{1151, 2},
{1151, 2},
{1151, 2},
{1151, 2},
{1151, 2},
{1201, 0},
{1201, 2},
{1201, 2},
{1333, 0},
{1333, 3},
{1312, 0},
{1312, 1},
{1311, 1},
{1311, 2},
{1142, 2},
{1142, 2},
{1142, 3},
{1142, 3},
{1142, 4},
{1142, 5},
{1142, 2},
{1142, 5},
{1142, 3},
{1142, 3},
{1142, 2},
{1142, 2},
{1142, 2},
{1142, 4},
{1406, 0},
{1406, 3},
{1406, 3},
{1406, 5},
{1406, 5},
{1406, 4},
{1407, 1},
{1260, 1},
{1260, 1},
{1342, 1},
{1530, 1},
{1530, 3},
{994, 1},
{994, 1},
{994, 1},
{994, 1},
{994, 1},
{994, 1},
{994, 1},
{994, 1},
{1205, 7},
{1205, 5},
{1205, 9},
{1366, 1},
{1366, 3},
{1160, 1},
{1160, 1},
{1224, 5},
{1224, 7},
{1224, 7},
{1346, 5},
{1346, 7},
{1346, 7},
{1325, 6},
{1325, 4},
{1325, 4},
{1325, 4},
{1325, 4},
{1325, 4},
{1324, 0},
{1324, 2},
{1323, 1},
{1323, 3},
{1148, 3},
{1258, 9},
{1256, 7},
{1257, 4},
{1389, 0},
{1389, 3},
{1389, 3},
{1389, 3},
{1389, 3},
{1389, 3},
{1125, 1},
{1125, 2},
{1153, 1},
{1153, 1},
{1153, 1},
{1153, 3},
{1153, 3},
{1341, 1},
{1341, 3},
{1144, 1},
{1144, 4},
{1145, 1},
{1145, 2},
{1145, 1},
{1145, 1},
{1145, 2},
{1145, 2},
{1145, 1},
{1145, 1},
{1145, 1},
{1145, 1},
{1145, 1},
{1145, 1},
{1145, 1},
{1145, 1},
{1145, 1},
{1145, 2},
{1145, 1},
{1145, 2},
{1145, 1},
{1145, 2},
{1145, 2},
{1145, 2},
{1145, 1},
{1145, 1},
{1145, 1},
{1145, 1},
{1145, 3},
{1145, 2},
{1145, 2},
{1145, 2},
{1145, 2},
{1145, 2},
{1145, 2},
{1145, 2},
{1145, 1},
{1145, 1},
{1289, 0},
{1289, 1},
{1289, 1},
{1289, 1},
{1316, 1},
{1316, 3},
{1316, 3},
{1316, 3},
{1316, 1},
{1340, 7},
{1339, 4},
{1034, 18},
{1476, 0},
{1476, 1},
{1253, 0},
{1253, 2},
{1455, 0},
{1455, 3},
{1416, 0},
{1416, 3},
{1473, 0},
{1473, 1},
{1247, 0},
{1247, 2},
{998, 1},
{998, 1},
{1445, 2},
{1445, 1},
{1245, 3},
{1245, 2},
{1245, 3},
{1245, 3},
{1245, 4},
{1245, 6},
{1030, 1},
{1030, 1},
{1030, 1},
{1277, 0},
{1277, 3},
{1557, 0},
{1557, 3},
{1470, 0},
{1470, 3},
{1280, 0},
{1280, 2},
{1472, 3},
{1472, 1},
{1279, 3},
{1133, 0},
{1133, 2},
{1471, 1},
{1471, 3},
{1278, 1},
{1278, 3},
{967, 9},
{967, 8},
{1457, 1},
{1457, 1},
{1457, 1},
{1457, 1},
{1381, 2},
{1283, 3},
{1373, 1},
{1373, 1},
{1371, 2},
{1474, 1},
{1474, 2},
{1474, 1},
{1474, 2},
{1570, 1},
{1570, 3},
{1288, 6},
{1539, 1},
{1539, 1},
{1539, 1},
{1539, 1},
{1435, 0},
{1435, 2},
{1435, 3},
{1489, 0},
{1489, 2},
{1297, 4},
{1272, 2},
{1272, 3},
{1272, 3},
{1272, 2},
{1271, 1},
{1271, 2},
{1281, 3},
{1282, 3},
{1282, 5},
{1282, 7},
{1380, 3},
{1380, 5},
{1380, 7},
{1328, 5},
{1362, 1},
{1362, 3},
{1522, 0},
{1522, 1},
{1521, 1},
{1521, 1},
{1520, 0},
{1520, 1},
{1158, 3},
{1158, 3},
{1158, 3},
{1158, 1},
{1227, 5},
{1211, 6},
{1184, 6},
{1230, 5},
{1209, 7},
{1286, 0},
{1286, 1},
{1286, 1},
{1284, 0},
{1284, 5},
{1284, 3},
{1285, 1},
{1285, 3},
{1135, 1},
{1208, 15},
{1182, 6},
{1213, 6},
{1427, 0},
{1427, 1},
{1536, 1},
{1536, 2},
{1104, 3},
{1104, 3},
{1104, 3},
{1104, 3},
{1104, 3},
{1104, 1},
{1104, 2},
{1104, 3},
{1104, 1},
{1104, 2},
{1104, 3},
{1104, 1},
{1104, 2},
{1104, 1},
{1104, 1},
{1104, 2},
{973, 1},
{973, 2},
{973, 2},
{1232, 4},
{1186, 5},
{1397, 1},
{1397, 2},
{1185, 1},
{1185, 1},
{1185, 3},
{1185, 3},
{1241, 1},
{1171, 1},
{1171, 3},
{1103, 2},
{1314, 6},
{1314, 7},
{1314, 10},
{1314, 11},
{1314, 6},
{1314, 7},
{1314, 8},
{1314, 9},
{1314, 4},
{1314, 5},
{1314, 6},
{1503, 0},
{1503, 3},
{1379, 5},
{1379, 5},
{1379, 3},
{1379, 3},
{1576, 1},
{1576, 2},
{1377, 3},
{1377, 3},
{1377, 3},
{1577, 1},
{1577, 2},
{1378, 3},
{1378, 3},
{1378, 3},
{1378, 3},
{1491, 0},
{1491, 1},
{1554, 3},
{1554, 1},
{1357, 3},
{1356, 0},
{1356, 1},
{1356, 1},
{1356, 1},
{936, 1},
{936, 1},
{936, 1},
{936, 1},
{936, 1},
{936, 1},
{936, 1},
{936, 1},
{936, 1},
{936, 1},
{936, 1},
{936, 1},
{936, 1},
{936, 1},
{936, 1},
{1508, 1},
{1508, 1},
{1508, 1},
{1508, 1},
{937, 1},
{1509, 1},
{1509, 3},
{1515, 0},
{1515, 2},
{1319, 4},
{1319, 5},
{1319, 6},
{1513, 1},
{1513, 1},
{1514, 1},
{1514, 3},
{1320, 1},
{1320, 1},
{1320, 2},
{1320, 1},
{1317, 1},
{1317, 3},
{1493, 0},
{1493, 1},
{932, 2},
{926, 5},
{925, 2},
{1516, 0},
{1516, 2},
{1516, 1},
{1512, 1},
{1512, 3},
{1511, 0},
{1511, 1},
{1510, 2},
{1510, 3},
{1517, 0},
{1517, 3},
{1008, 2},
{1008, 3},
{922, 4},
{927, 4},
{1321, 4},
{1506, 0},
{1506, 2},
{1506, 2},
{924, 1},
{924, 1},
{1549, 1},
{1549, 2},
{1532, 1},
{1532, 2},
{1354, 4},
{1343, 4},
{1239, 0},
{1239, 2},
{935, 6},
{934, 5},
{938, 1},
{923, 6},
{923, 6},
{929, 4},
{1318, 0},
{1318, 1},
{930, 4},
{928, 2},
{931, 2},
{933, 1},
{933, 1},
{933, 1},
{933, 1},
{933, 1},
{933, 1},
{933, 1},
{933, 1},
{933, 1},
{933, 1},
{933, 1},
{933, 1},
{1210, 8},
{1228, 4},
{1192, 3},
{1413, 0},
{1413, 1},
{1413, 1},
{1437, 1},
{1437, 2},
{1437, 3},
{1122, 3},
{1122, 3},
{1122, 3},
{1122, 5},
{1414, 2},
{1414, 2},
{1414, 2},
{1414, 2},
{1414, 2},
{1175, 4},
{1518, 1},
{1518, 2},
{1518, 3},
{1146, 3},
{1146, 3},
{1146, 3},
{1146, 1},
{1147, 3},
{1147, 3},
{1147, 5},
{1229, 4},
{1229, 6},
{1229, 6},
}
yyXErrors = map[yyXError]string{}
yyParseTab = [5391][]uint16{
// 0
{2502, 2502, 3105, 73: 3128, 113: 3107, 3110, 116: 3139, 3108, 3261, 131: 3141, 140: 3277, 155: 3269, 196: 3280, 235: 3125, 242: 3123, 261: 3135, 285: 3278, 289: 3104, 293: 3113, 297: 3159, 303: 3127, 306: 3101, 314: 3158, 3272, 317: 3109, 322: 3279, 333: 3138, 338: 3103, 344: 3136, 346: 3102, 348: 3142, 369: 3129, 371: 3265, 373: 3276, 375: 3131, 384: 3140, 390: 3126, 403: 3118, 583: 3150, 586: 3149, 600: 3148, 603: 3134, 611: 3157, 615: 3271, 629: 3264, 632: 3121, 639: 3119, 3133, 642: 3147, 692: 3143, 766: 3263, 768: 3106, 777: 3099, 789: 3112, 816: 3111, 821: 3273, 3100, 830: 3154, 858: 3114, 861: 3156, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 3117, 3239, 3238, 877: 3262, 3115, 3220, 881: 3231, 3248, 3120, 890: 3116, 894: 3176, 900: 3170, 3174, 3228, 3240, 912: 3178, 3122, 917: 3247, 3249, 953: 3124, 964: 3163, 967: 3219, 969: 3268, 1004: 3275, 1011: 3130, 1017: 3171, 1031: 3266, 1034: 3222, 1036: 3233, 1038: 3237, 1117: 3183, 1167: 3270, 1175: 3192, 3161, 1178: 3162, 3165, 1182: 3168, 3166, 3169, 1186: 3167, 1188: 3164, 3172, 3173, 1192: 3179, 3132, 3218, 3180, 3258, 1205: 3187, 3181, 3182, 3189, 3188, 3190, 3191, 3186, 3193, 3194, 1216: 3185, 3184, 1219: 3175, 3137, 1222: 3195, 3196, 3210, 3197, 3198, 3201, 3200, 3206, 3205, 3207, 3202, 3208, 3209, 3199, 3204, 3203, 1240: 3160, 1243: 3177, 1248: 3214, 3212, 1251: 3213, 3211, 1256: 3216, 3217, 3215, 1262: 3255, 1271: 3274, 3221, 1281: 3223, 3224, 3251, 1288: 3256, 1297: 3257, 1314: 3226, 3227, 1325: 3254, 3232, 1328: 3236, 1330: 3229, 3230, 1337: 3253, 3267, 3235, 3234, 1346: 3241, 1348: 3243, 3242, 1351: 3245, 1353: 3252, 1355: 3244, 1361: 3260, 1376: 3246, 1379: 3259, 3225, 3250, 1556: 3097, 1559: 3098},
{1: 3096},
{8485, 3095},
{20: 8438, 33: 8439, 62: 8437, 161: 8434, 356: 8435, 602: 5053, 642: 2287, 645: 8436, 700: 7279, 997: 8433, 1032: 5052},
{161: 8418, 642: 8417},
// 5
{642: 8411},
{188: 8389, 642: 8390, 700: 7279, 997: 8391},
{642: 8377},
{155: 8368, 285: 8369, 319: 8367, 339: 8366},
{471: 8355, 587: 8356, 642: 2864, 1553: 8354},
// 10
{69: 5679, 353: 837, 642: 837, 951: 5678, 970: 8308},
{2832, 2832, 456: 8307, 462: 8306},
{496: 8295},
{585: 8294},
{2801, 2801, 115: 7195, 620: 7193, 953: 7194, 1202: 8293},
// 15
{20: 2553, 33: 7794, 62: 7793, 71: 7707, 112: 2553, 161: 7790, 2553, 193: 7785, 229: 2553, 233: 7791, 247: 870, 249: 2553, 256: 6806, 282: 7442, 310: 7780, 422: 7786, 621: 7789, 642: 2521, 700: 7279, 757: 2553, 7782, 764: 2671, 818: 7784, 997: 7787, 1035: 7795, 1128: 7792, 1139: 6805, 1459: 7781, 1497: 7788, 1550: 7783},
{20: 7713, 33: 7715, 62: 7714, 71: 7707, 161: 7709, 7708, 182: 2521, 233: 7710, 247: 870, 7705, 255: 7711, 6806, 261: 1336, 282: 7442, 310: 7702, 642: 2521, 700: 7279, 764: 7704, 997: 7703, 1035: 7716, 1128: 7712, 1139: 7706},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4151, 909: 7701},
{2: 1151, 1151, 1151, 1151, 1151, 1151, 1151, 10: 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 64: 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 602: 1151, 617: 1151, 887: 1151, 889: 1151, 891: 1151, 895: 6555, 1014: 6556, 1076: 7689},
{2530, 2530},
// 20
{2529, 2529},
{583: 3150, 600: 3148, 642: 3147, 692: 3143, 766: 3263, 830: 4163, 858: 3114, 861: 4162, 3144, 3145, 3146, 866: 3155, 3153, 4164, 4165, 877: 6271, 6269, 890: 6270},
{113: 3107, 3110, 116: 3139, 3108, 140: 7662, 242: 3123, 269: 7661, 583: 3150, 586: 3149, 600: 3148, 603: 3134, 611: 7665, 640: 3133, 642: 3147, 692: 3143, 766: 3263, 768: 3106, 830: 7663, 858: 3114, 861: 7664, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 3117, 7671, 7670, 877: 3262, 3115, 7668, 881: 7669, 7667, 890: 3116, 894: 7666, 900: 7679, 7674, 7677, 7678, 953: 3124, 969: 7680, 1017: 7673, 1034: 7672, 1036: 7676, 1038: 7675, 1108: 7660},
{2: 2497, 2497, 2497, 2497, 2497, 2497, 2497, 10: 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 64: 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497, 585: 2497, 2497, 600: 2497, 603: 2497, 613: 2497, 2497, 640: 2497, 642: 2497, 692: 2497, 766: 2497, 768: 2497, 777: 2497, 858: 2497},
{2: 2496, 2496, 2496, 2496, 2496, 2496, 2496, 10: 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 64: 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 2496, 585: 2496, 2496, 600: 2496, 603: 2496, 613: 2496, 2496, 640: 2496, 642: 2496, 692: 2496, 766: 2496, 768: 2496, 777: 2496, 858: 2496},
// 25
{2: 2495, 2495, 2495, 2495, 2495, 2495, 2495, 10: 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 64: 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 2495, 585: 2495, 2495, 600: 2495, 603: 2495, 613: 2495, 2495, 640: 2495, 642: 2495, 692: 2495, 766: 2495, 768: 2495, 777: 2495, 858: 2495},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 7620, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 7618, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 7613, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 3150, 585: 7616, 3149, 600: 3148, 603: 3134, 613: 7617, 4237, 640: 3133, 642: 3147, 692: 3143, 766: 3263, 768: 7619, 777: 5013, 826: 4236, 3292, 3293, 3291, 5015, 858: 3114, 7614, 861: 5016, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 3117, 5022, 5021, 877: 3262, 3115, 5019, 881: 5020, 5018, 890: 3116, 894: 5017, 964: 5023, 967: 5024, 985: 7615},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 7612, 3292, 3293, 3291},
{242: 7610},
{191: 7603, 642: 7283, 700: 7279, 997: 7282, 1191: 7602},
// 30
{235: 7600},
{235: 7597},
{235: 7595},
{235: 7590},
{18: 4738, 20: 7400, 35: 7434, 7429, 7428, 71: 7441, 122: 7410, 155: 7438, 157: 863, 181: 870, 863, 184: 863, 216: 7443, 224: 870, 235: 7385, 249: 7389, 254: 7444, 278: 7398, 282: 7442, 285: 7446, 287: 870, 304: 7423, 863, 319: 7386, 339: 7402, 352: 7415, 354: 7404, 385: 7445, 388: 7425, 407: 7414, 413: 7436, 415: 7419, 7399, 421: 7417, 423: 7433, 425: 7408, 432: 7406, 7422, 437: 7412, 440: 7421, 7391, 7432, 450: 7392, 466: 7397, 7396, 469: 7440, 474: 7437, 480: 7424, 482: 7430, 7427, 7431, 7426, 497: 7418, 606: 4739, 637: 7393, 642: 7390, 711: 7413, 763: 4737, 7403, 768: 7435, 816: 7388, 908: 7409, 1035: 7420, 1128: 7416, 1132: 7405, 1218: 7407, 1296: 7395, 1525: 7394, 1540: 7439, 7401, 7411, 1548: 7387},
// 35
{463: 7281, 642: 7283, 700: 7279, 997: 7282, 1191: 7280},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 7268, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 7270, 3292, 3293, 3291, 1507: 7269},
{2: 1151, 1151, 1151, 1151, 1151, 1151, 1151, 10: 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 64: 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 602: 1151, 614: 1151, 616: 1151, 887: 1151, 889: 1151, 891: 1151, 895: 6555, 1014: 6556, 1076: 7254},
{2: 1151, 1151, 1151, 1151, 1151, 1151, 1151, 10: 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 64: 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 614: 1151, 616: 1151, 887: 1151, 889: 1151, 891: 1151, 895: 6555, 1014: 6556, 1076: 7221},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 7216, 3292, 3293, 3291},
// 40
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 7210, 3292, 3293, 3291},
{261: 7208},
{261: 1337},
{1335, 1335, 115: 7195, 620: 7193, 767: 7192, 953: 7194, 1202: 7191},
{1324, 1324},
// 45
{1323, 1323},
{585: 7190},
{2: 1156, 1156, 1156, 1156, 1156, 1156, 1156, 10: 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 64: 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 7178, 7184, 7185, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 585: 1156, 588: 1156, 1156, 1156, 595: 1156, 1156, 1156, 1156, 1156, 1156, 1156, 603: 1156, 1156, 606: 1156, 614: 1156, 627: 7181, 631: 1156, 637: 1156, 640: 1156, 663: 1156, 1156, 667: 1156, 1156, 1156, 1156, 1156, 687: 1156, 1156, 693: 1156, 695: 1156, 1156, 1156, 1156, 700: 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 713: 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 765: 1156, 770: 4486, 884: 4484, 4485, 887: 6558, 889: 6560, 891: 6559, 895: 6555, 904: 7177, 7180, 7176, 943: 7103, 945: 7174, 1007: 7175, 1014: 7173, 1344: 7183, 7179, 1534: 7172, 7182},
{481, 481, 16: 481, 63: 481, 584: 481, 586: 481, 593: 481, 481, 607: 481, 481, 5030, 481, 612: 481, 481, 615: 481, 481, 7147, 619: 481, 625: 481, 941: 5031, 7148, 1449: 7146},
{1146, 1146, 16: 1146, 63: 1146, 584: 1146, 586: 1146, 593: 1146, 1146, 607: 1146, 1146, 610: 1146, 612: 1146, 1146, 615: 1146, 1146, 619: 1146, 625: 7134, 1129: 7136, 1154: 7135},
// 50
{1607, 1607, 16: 1607, 63: 1607, 584: 1607, 586: 1607, 593: 1607, 1607, 607: 1607, 1607, 610: 1607, 612: 1607, 1607, 615: 1607, 1607, 619: 4166, 897: 4220, 971: 7130},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 7125},
{695: 4201, 1103: 4200, 1171: 4199},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 7118, 3292, 3293, 3291, 1116: 7117, 1390: 7115, 1519: 7116},
{583: 3150, 586: 3149, 600: 3148, 642: 3147, 692: 3143, 830: 5044, 861: 4156, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 4155, 4158, 4157},
// 55
{1127, 1127, 16: 1127, 63: 1127, 584: 1127, 586: 1127, 594: 1127},
{1126, 1126, 16: 1126, 63: 1126, 584: 1126, 586: 1126, 594: 1126},
{593: 7100, 607: 7101, 7102, 1537: 7099},
{749, 749, 593: 1112, 607: 1112, 1112, 610: 4168, 612: 4167, 619: 4166, 897: 4169, 4170},
{593: 1115, 607: 1115, 1115},
// 60
{751, 751, 593: 1113, 607: 1113, 1113},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 6931, 6926, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 6932, 64: 3299, 3290, 3528, 3661, 3662, 6929, 3684, 6928, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 6933, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 6936, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 6934, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 6937, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 6927, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 6938, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 6935, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 6930, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 589: 6940, 606: 4739, 668: 6944, 710: 6943, 763: 4737, 826: 6941, 3292, 3293, 3291, 908: 6945, 983: 6942, 1173: 6946, 1384: 6939},
{19: 6763, 73: 6766, 289: 6764, 6771, 297: 6770, 303: 6765, 6768, 306: 6760, 6769, 374: 6767, 419: 6762, 434: 6772, 500: 6774, 611: 6773, 756: 6759, 777: 6775, 816: 6761, 1011: 6758},
{25: 837, 69: 5679, 181: 837, 837, 191: 837, 278: 837, 283: 837, 295: 837, 312: 837, 325: 837, 347: 837, 351: 837, 387: 837, 637: 837, 642: 837, 951: 5678, 970: 6729},
{830, 830},
// 65
{829, 829},
{828, 828},
{827, 827},
{826, 826},
{825, 825},
// 70
{824, 824},
{823, 823},
{822, 822},
{821, 821},
{820, 820},
// 75
{819, 819},
{818, 818},
{817, 817},
{816, 816},
{815, 815},
// 80
{814, 814},
{813, 813},
{812, 812},
{811, 811},
{810, 810},
// 85
{809, 809},
{808, 808},
{807, 807},
{806, 806},
{805, 805},
// 90
{804, 804},
{803, 803},
{802, 802},
{801, 801},
{800, 800},
// 95
{799, 799},
{798, 798},
{797, 797},
{796, 796},
{795, 795},
// 100
{794, 794},
{793, 793},
{792, 792},
{791, 791},
{790, 790},
// 105
{789, 789},
{788, 788},
{787, 787},
{786, 786},
{785, 785},
// 110
{784, 784},
{783, 783},
{782, 782},
{781, 781},
{780, 780},
// 115
{779, 779},
{778, 778},
{777, 777},
{776, 776},
{775, 775},
// 120
{774, 774},
{773, 773},
{772, 772},
{771, 771},
{770, 770},
// 125
{769, 769},
{768, 768},
{767, 767},
{766, 766},
{765, 765},
// 130
{764, 764},
{763, 763},
{762, 762},
{761, 761},
{760, 760},
// 135
{759, 759},
{758, 758},
{757, 757},
{756, 756},
{755, 755},
// 140
{754, 754},
{753, 753},
{752, 752},
{750, 750},
{748, 748},
// 145
{747, 747},
{746, 746},
{745, 745},
{744, 744},
{743, 743},
// 150
{742, 742},
{741, 741},
{740, 740},
{739, 739},
{738, 738},
// 155
{737, 737},
{736, 736},
{735, 735},
{734, 734},
{733, 733},
// 160
{732, 732},
{731, 731},
{730, 730},
{729, 729},
{702, 702},
// 165
{2: 632, 632, 632, 632, 632, 632, 632, 10: 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 64: 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 614: 632, 642: 6726, 1492: 6727},
{487, 487, 594: 487},
{2: 1151, 1151, 1151, 1151, 1151, 1151, 1151, 10: 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 64: 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 602: 1151, 614: 1151, 698: 1151, 780: 1151, 887: 1151, 889: 1151, 891: 1151, 895: 6555, 1014: 6556, 1076: 6557},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 6553, 3292, 3293, 3291, 966: 6554},
{764: 6531},
// 170
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 6372, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 6377, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 6374, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 6381, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 6376, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 6373, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 6382, 3480, 3355, 3760, 6375, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 6379, 6484, 3383, 3637, 6380, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 6378, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 6384, 615: 6407, 640: 6401, 692: 6390, 760: 6405, 764: 6400, 766: 6403, 770: 6394, 777: 6395, 789: 6399, 816: 6396, 826: 4046, 3292, 3293, 3291, 858: 6398, 860: 6383, 954: 6385, 969: 6389, 1011: 6402, 1031: 6404, 1125: 6386, 1144: 6387, 6393, 1152: 6388, 6391, 1166: 6397, 1169: 6406, 1341: 6485},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 6372, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 6377, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 6374, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 6381, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 6376, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 6373, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 6382, 3480, 3355, 3760, 6375, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 6379, 3382, 3383, 3637, 6380, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 6378, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 6384, 615: 6407, 640: 6401, 692: 6390, 760: 6405, 764: 6400, 766: 6403, 770: 6394, 777: 6395, 789: 6399, 816: 6396, 826: 4046, 3292, 3293, 3291, 858: 6398, 860: 6383, 954: 6385, 969: 6389, 1011: 6402, 1031: 6404, 1125: 6386, 1144: 6387, 6393, 1152: 6388, 6391, 1166: 6397, 1169: 6406, 1341: 6392},
{26: 6343, 255: 6344},
{616: 6302},
{182: 6273, 255: 6294, 642: 6274, 1373: 6293},
// 175
{182: 6273, 255: 6275, 642: 6274, 1373: 6272},
{584: 6255, 612: 244, 1489: 6254},
{69: 5679, 182: 837, 642: 837, 951: 5678, 970: 6249},
{32: 6244, 65: 5624, 196: 6245, 583: 6242, 603: 5625, 3284, 854: 6243, 1046: 6246},
{32: 237, 65: 237, 196: 237, 312: 6241, 583: 237, 603: 237, 237},
// 180
{255: 6223},
{473: 4995},
{290: 4959, 472: 4960},
{62: 4933},
{156: 3281},
// 185
{3: 3283, 824: 3282},
{62: 3877, 119: 3878, 140: 3881, 757: 3880, 1146: 3876, 3879, 1518: 3875},
{62: 3286, 604: 3284, 854: 3285},
{2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 16: 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 73: 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 120: 2393, 2393, 2393, 2393, 2393, 2393, 127: 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 141: 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 161: 2393, 163: 2393, 165: 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 186: 2393, 2393, 201: 2393, 203: 2393, 2393, 2393, 2393, 222: 2393, 2393, 252: 2393, 259: 2393, 300: 2393, 341: 2393, 583: 2393, 2393, 586: 2393, 2393, 589: 2393, 591: 2393, 2393, 2393, 2393, 600: 2393, 602: 2393, 2393, 606: 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2393, 615: 2393, 2393, 618: 2393, 629: 2393, 631: 2393, 2393, 639: 2393, 2393, 2393, 2393, 663: 2393, 2393, 692: 2393, 695: 2393, 763: 2393, 2393, 766: 2393, 768: 2393, 775: 2393, 778: 2393, 858: 2393, 883: 2393, 886: 2393, 892: 2393, 2393},
{3, 3},
// 190
{625: 3287},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 589: 3289, 668: 3872, 826: 3288, 3292, 3293, 3291, 831: 3874, 980: 3873},
{2660, 2660, 9: 2660, 62: 2660, 2660, 119: 2660, 134: 2660, 2660, 2660, 2660, 2660, 140: 2660, 757: 2660},
{2659, 2659, 9: 2659, 62: 2659, 2659, 119: 2659, 134: 2659, 2659, 2659, 2659, 2659, 140: 2659, 757: 2659},
{2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253},
// 195
{2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252},
{2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251},
{2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250},
{2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249},
{2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248},
// 200
{2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247},
{2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246},
{2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245},
{2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244},
{2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243},
// 205
{2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242},
{2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241},
{2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240},
{2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239},
{2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238},
// 210
{2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237, 2237},
{2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236, 2236},
{2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235, 2235},
{2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234},
{2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233},
// 215
{2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232},
{2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231},
{2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230, 2230},
{2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229, 2229},
{2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228},
// 220
{2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227},
{2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226},
{2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225},
{2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224, 2224},
{2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223, 2223},
// 225
{2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222, 2222},
{2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221},
{2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220, 2220},
{2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219},
{2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218},
// 230
{2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217},
{2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216},
{2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215},
{2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214},
{2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213},
// 235
{2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212},
{2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211},
{2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210},
{2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209},
{2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208},
// 240
{2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207},
{2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206},
{2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205},
{2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204},
{2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203},
// 245
{2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202},
{2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201},
{2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200},
{2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199},
{2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198},
// 250
{2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197},
{2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196},
{2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195},
{2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194},
{2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193},
// 255
{2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192},
{2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191},
{2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190},
{2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189},
{2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188},
// 260
{2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187},
{2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186},
{2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185},
{2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184},
{2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183},
// 265
{2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182},
{2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181},
{2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180},
{2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179},
{2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178},
// 270
{2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177},
{2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176},
{2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175},
{2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174},
{2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173},
// 275
{2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172},
{2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171},
{2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170, 2170},
{2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169, 2169},
{2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168, 2168},
// 280
{2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167, 2167},
{2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166, 2166},
{2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165},
{2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164},
{2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163},
// 285
{2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162},
{2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161},
{2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160, 2160},
{2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159},
{2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158},
// 290
{2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157},
{2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156},
{2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155},
{2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154},
{2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153},
// 295
{2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152},
{2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151},
{2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150},
{2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149},
{2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148},
// 300
{2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147, 2147},
{2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146},
{2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145, 2145},
{2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144, 2144},
{2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143},
// 305
{2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142, 2142},
{2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141, 2141},
{2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140},
{2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139, 2139},
{2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138},
// 310
{2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137},
{2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136, 2136},
{2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135},
{2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134, 2134},
{2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133},
// 315
{2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132, 2132},
{2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131},
{2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130, 2130},
{2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129},
{2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128},
// 320
{2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127},
{2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126},
{2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125},
{2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124},
{2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123},
// 325
{2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122},
{2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121},
{2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120},
{2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119},
{2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118},
// 330
{2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117},
{2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116},
{2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115},
{2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114},
{2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113},
// 335
{2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112},
{2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111},
{2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110},
{2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109},
{2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108},
// 340
{2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107},
{2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106},
{2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105},
{2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104},
{2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103},
// 345
{2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102},
{2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101},
{2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100},
{2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099},
{2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098},
// 350
{2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097},
{2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096},
{2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095},
{2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094},
{2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093},
// 355
{2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092},
{2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091},
{2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090},
{2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089},
{2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088},
// 360
{2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087},
{2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086},
{2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085},
{2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084},
{2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083},
// 365
{2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082},
{2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081},
{2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080},
{2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079},
{2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078},
// 370
{2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077},
{2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076},
{2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075},
{2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074},
{2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073},
// 375
{2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072},
{2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071},
{2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070},
{2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069},
{2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068},
// 380
{2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067},
{2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066},
{2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065},
{2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064},
{2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063},
// 385
{2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062},
{2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061},
{2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060},
{2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059},
{2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058},
// 390
{2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057},
{2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056},
{2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055},
{2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054},
{2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053},
// 395
{2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052},
{2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051},
{2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050},
{2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049},
{2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048},
// 400
{2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047},
{2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046},
{2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045},
{2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044},
{2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043},
// 405
{2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042},
{2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041},
{2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040},
{2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039},
{2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038},
// 410
{2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037},
{2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036},
{2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035},
{2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034},
{2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033},
// 415
{2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032},
{2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031},
{2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030},
{2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029},
{2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028},
// 420
{2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027},
{2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026},
{2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025},
{2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024},
{2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023},
// 425
{2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022},
{2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021},
{2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020},
{2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019},
{2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018},
// 430
{2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017},
{2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016},
{2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015},
{2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014},
{2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013},
// 435
{2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012},
{2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011},
{2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010},
{2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009},
{2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008},
// 440
{2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007},
{2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006},
{2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005},
{2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004},
{2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003},
// 445
{2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002},
{2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001},
{2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000},
{1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999},
{1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998},
// 450
{1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997},
{1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996},
{1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995},
{1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994},
{1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993},
// 455
{1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992},
{1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991},
{1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990},
{1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989},
{1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988},
// 460
{1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987},
{1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986},
{1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985},
{1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984},
{1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983},
// 465
{1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982},
{1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981},
{1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980},
{1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979},
{1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978},
// 470
{1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977},
{1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976},
{1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975},
{1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974},
{1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973},
// 475
{1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972},
{1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971},
{1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970},
{1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969},
{1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968},
// 480
{1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967},
{1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966},
{1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965},
{1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964},
{1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963},
// 485
{1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962},
{1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961},
{1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960},
{1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959},
{1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958},
// 490
{1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957},
{1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956},
{1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955},
{1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954},
{1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953},
// 495
{1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952},
{1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951},
{1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950},
{1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949},
{1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948},
// 500
{1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947},
{1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946},
{1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945},
{1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944},
{1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943},
// 505
{1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942},
{1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941},
{1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940},
{1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939},
{1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938},
// 510
{1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937},
{1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936},
{1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935},
{1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934},
{1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933},
// 515
{1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932},
{1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931},
{1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930},
{1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929},
{1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928},
// 520
{1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927},
{1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926},
{1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925},
{1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924},
{1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923},
// 525
{1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922},
{1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921},
{1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920},
{1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919},
{1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918},
// 530
{1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917},
{1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916},
{1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915},
{1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914},
{1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913},
// 535
{1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912},
{1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911},
{1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910},
{1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909},
{1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908},
// 540
{1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907},
{1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906},
{1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905},
{1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904},
{1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903},
// 545
{1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902},
{1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901},
{1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900},
{1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899},
{1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898},
// 550
{1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897},
{1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896},
{1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895},
{1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894},
{1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893},
// 555
{1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892},
{1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891},
{1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890},
{1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889},
{1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888},
// 560
{1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887},
{1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886},
{1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885},
{1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884},
{1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883},
// 565
{1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882},
{1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881},
{1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880},
{1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879},
{1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878},
// 570
{1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877},
{1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876},
{1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875},
{1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874},
{1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873},
// 575
{1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872},
{1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871},
{1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870},
{1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869},
{1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868},
// 580
{1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867},
{1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866},
{1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865},
{1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864},
{1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863},
// 585
{1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862},
{1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861},
{1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860},
{1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859},
{1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858},
// 590
{1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857},
{1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856},
{1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855},
{1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854},
{1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853},
// 595
{1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852},
{1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851},
{1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850},
{1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849},
{1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848},
// 600
{1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847},
{1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846},
{1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845},
{1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844},
{1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843},
// 605
{1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842},
{1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841},
{1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840},
{1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839},
{1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838},
// 610
{1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837},
{1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836},
{1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835},
{1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834},
{1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833},
// 615
{1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832},
{1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831},
{1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830},
{1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829},
{1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828},
// 620
{1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827},
{1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826},
{1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825},
{1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824},
{1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823},
// 625
{1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822},
{1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821},
{1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820},
{1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819},
{1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818},
// 630
{1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817},
{1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816},
{1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815},
{1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814},
{1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813},
// 635
{1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812},
{1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811},
{1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810},
{1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809},
{1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808},
// 640
{1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807},
{1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806},
{1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805},
{1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804},
{1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803},
// 645
{1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802},
{1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801},
{1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800},
{1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799},
{1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798},
// 650
{1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797},
{1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796},
{1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795},
{1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794},
{1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793},
// 655
{1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792},
{1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791},
{1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790},
{1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789},
{1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788},
// 660
{1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787},
{1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786},
{1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785},
{1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784},
{1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783},
// 665
{1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782},
{1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781},
{1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780},
{1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779},
{1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778},
// 670
{1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777},
{1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776},
{1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775},
{1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774},
{1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773},
// 675
{1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772},
{1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771},
{1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770},
{1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769},
{1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768},
// 680
{1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767},
{1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766},
{1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765},
{1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764},
{1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763},
// 685
{1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762},
{1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761},
{1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760},
{1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759},
{1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758},
// 690
{1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757},
{1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756},
{1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755},
{1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754},
{1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753},
// 695
{1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752},
{1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751},
{1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750},
{1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749},
{1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748},
// 700
{1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747},
{1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746},
{1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745},
{1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744},
{1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743},
// 705
{1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742},
{1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741},
{1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740},
{1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739},
{1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738},
// 710
{1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737},
{1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736},
{1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735},
{1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734},
{1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733},
// 715
{1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732},
{1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731},
{1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730},
{1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729},
{1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728},
// 720
{1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727},
{1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726},
{1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725},
{1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724},
{1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723},
// 725
{1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722},
{1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721},
{1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720},
{1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719},
{1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718},
// 730
{1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717},
{1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716},
{1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715},
{1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714},
{1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713},
// 735
{1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712},
{1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711},
{1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710},
{1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709},
{1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708},
// 740
{1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707},
{1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706},
{1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705},
{1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704},
{1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703},
// 745
{1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702},
{1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701},
{1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700},
{1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699},
{1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698},
// 750
{1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697},
{1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696},
{1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695},
{1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694},
{1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693},
// 755
{1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692},
{1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691},
{1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690},
{1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689},
{1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688},
// 760
{1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687},
{1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686},
{1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685},
{1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684},
{1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683},
// 765
{1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682},
{1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681},
{1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680},
{1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679},
{1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678},
// 770
{1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677},
{1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676},
{1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675},
{1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674},
{1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673},
// 775
{1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672},
{1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 584: 1046, 1046, 1046, 1046, 1046, 590: 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 602: 1046, 605: 1046, 607: 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 632: 1046, 1046, 1046, 1046, 1046, 638: 1046, 1046, 641: 1046, 643: 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 665: 1046, 1046, 672: 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 689: 1046, 1046, 1046, 694: 1046, 757: 1046, 762: 1046},
{2, 2},
{1, 1},
{14, 14, 9: 4931, 62: 3877, 119: 3878, 140: 3881, 757: 3880, 1146: 4930, 3879},
// 780
{13, 13, 9: 13, 62: 13, 119: 13, 140: 13, 757: 13},
{625: 4927},
{265: 2504, 268: 2504, 284: 2504, 605: 4917, 855: 4918, 1004: 2504},
{7, 7, 9: 7, 62: 7, 119: 7, 140: 7, 757: 7},
{210: 4909, 258: 4908},
// 785
{258: 3882},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 3963, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 3939, 3944, 4026, 3943, 3940},
{1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 4905, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 584: 1934, 1934, 1934, 1934, 1934, 590: 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 602: 1934, 605: 1934, 607: 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 632: 1934, 1934, 1934, 1934, 1934, 638: 1934, 1934, 641: 1934, 643: 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 665: 1934, 1934, 672: 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 689: 1934, 1934, 1934, 694: 1934, 757: 1934, 762: 1934, 769: 1934, 773: 1934, 1934},
{1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 4902, 1933, 1933, 1933, 1933, 1933, 590: 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 602: 1933, 605: 1933, 607: 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 632: 1933, 1933, 1933, 1933, 1933, 638: 1933, 1933, 641: 1933, 643: 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 665: 1933, 1933, 672: 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 689: 1933, 1933, 1933, 694: 1933, 757: 1933, 762: 1933, 769: 1933, 773: 1933, 1933},
{2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 4899, 2253, 2253, 2253, 2253, 2253, 590: 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 602: 2253, 605: 2253, 607: 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 632: 2253, 2253, 2253, 2253, 2253, 638: 2253, 2253, 641: 2253, 643: 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 665: 2253, 2253, 672: 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 689: 2253, 2253, 2253, 694: 2253, 757: 2253, 762: 2253, 769: 2253, 773: 2253, 2253},
// 790
{2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 1542, 2246, 2246, 2246, 2246, 2246, 590: 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 602: 2246, 605: 2246, 607: 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 632: 2246, 2246, 2246, 2246, 2246, 638: 2246, 2246, 641: 2246, 643: 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 665: 2246, 2246, 672: 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 689: 2246, 2246, 2246, 694: 2246, 757: 2246, 762: 2246, 769: 2246, 773: 2246, 2246},
{2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 4894, 2232, 2232, 2232, 2232, 2232, 590: 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 602: 2232, 605: 2232, 607: 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 632: 2232, 2232, 2232, 2232, 2232, 638: 2232, 2232, 641: 2232, 643: 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 665: 2232, 2232, 672: 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 689: 2232, 2232, 2232, 694: 2232, 757: 2232, 762: 2232, 769: 2232, 773: 2232, 2232},
{2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 1541, 2219, 2219, 2219, 2219, 2219, 590: 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 602: 2219, 605: 2219, 607: 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 632: 2219, 2219, 2219, 2219, 2219, 638: 2219, 2219, 641: 2219, 643: 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 665: 2219, 2219, 672: 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 689: 2219, 2219, 2219, 694: 2219, 757: 2219, 762: 2219, 769: 2219, 773: 2219, 2219},
{2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 1538, 2208, 4893, 2208, 2208, 2208, 590: 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 602: 2208, 605: 2208, 607: 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 632: 2208, 2208, 2208, 2208, 2208, 638: 2208, 2208, 641: 2208, 643: 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 665: 2208, 2208, 672: 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 689: 2208, 2208, 2208, 694: 2208, 757: 2208, 762: 2208, 769: 2208, 773: 2208, 2208},
{2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 1536, 2206, 2206, 2206, 2206, 2206, 590: 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 602: 2206, 605: 2206, 607: 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 632: 2206, 2206, 2206, 2206, 2206, 638: 2206, 2206, 641: 2206, 643: 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 665: 2206, 2206, 672: 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 689: 2206, 2206, 2206, 694: 2206, 757: 2206, 762: 2206, 769: 2206, 773: 2206, 2206},
// 795
{2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 1531, 2180, 2180, 2180, 2180, 2180, 590: 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 602: 2180, 605: 2180, 607: 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 632: 2180, 2180, 2180, 2180, 2180, 638: 2180, 2180, 641: 2180, 643: 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 665: 2180, 2180, 672: 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 689: 2180, 2180, 2180, 694: 2180, 757: 2180, 762: 2180, 769: 2180, 773: 2180, 2180},
{2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 1535, 2174, 2174, 2174, 2174, 2174, 590: 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 602: 2174, 605: 2174, 607: 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 632: 2174, 2174, 2174, 2174, 2174, 638: 2174, 2174, 641: 2174, 643: 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 665: 2174, 2174, 672: 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 689: 2174, 2174, 2174, 694: 2174, 757: 2174, 762: 2174, 769: 2174, 773: 2174, 2174},
{2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 4890, 2164, 2164, 2164, 2164, 2164, 590: 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 602: 2164, 605: 2164, 607: 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 632: 2164, 2164, 2164, 2164, 2164, 638: 2164, 2164, 641: 2164, 643: 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 665: 2164, 2164, 672: 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164, 689: 2164, 2164, 2164, 694: 2164, 757: 2164, 762: 2164, 769: 2164, 773: 2164, 2164},
{2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 1525, 2140, 2140, 2140, 2140, 2140, 590: 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 602: 2140, 605: 2140, 607: 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 632: 2140, 2140, 2140, 2140, 2140, 638: 2140, 2140, 641: 2140, 643: 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 665: 2140, 2140, 672: 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 2140, 689: 2140, 2140, 2140, 694: 2140, 757: 2140, 762: 2140, 769: 2140, 773: 2140, 2140},
{2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 1517, 2133, 4889, 2133, 2133, 2133, 590: 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 602: 2133, 605: 2133, 607: 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 632: 2133, 2133, 2133, 2133, 2133, 638: 2133, 2133, 641: 2133, 643: 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 665: 2133, 2133, 672: 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 2133, 689: 2133, 2133, 2133, 694: 2133, 757: 2133, 762: 2133, 769: 2133, 773: 2133, 2133},
// 800
{2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 1516, 2131, 4888, 2131, 2131, 2131, 590: 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 602: 2131, 605: 2131, 607: 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 632: 2131, 2131, 2131, 2131, 2131, 638: 2131, 2131, 641: 2131, 643: 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 665: 2131, 2131, 672: 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 2131, 689: 2131, 2131, 2131, 694: 2131, 757: 2131, 762: 2131, 769: 2131, 773: 2131, 2131},
{2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 1515, 2128, 2128, 2128, 2128, 2128, 590: 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 602: 2128, 605: 2128, 607: 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 632: 2128, 2128, 2128, 2128, 2128, 638: 2128, 2128, 641: 2128, 643: 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 665: 2128, 2128, 672: 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 689: 2128, 2128, 2128, 694: 2128, 757: 2128, 762: 2128, 769: 2128, 773: 2128, 2128},
{2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 1512, 2121, 2121, 2121, 2121, 2121, 590: 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 602: 2121, 605: 2121, 607: 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 632: 2121, 2121, 2121, 2121, 2121, 638: 2121, 2121, 641: 2121, 643: 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 665: 2121, 2121, 672: 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 689: 2121, 2121, 2121, 694: 2121, 757: 2121, 762: 2121, 769: 2121, 773: 2121, 2121},
{2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 1513, 2119, 2119, 2119, 2119, 2119, 590: 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 602: 2119, 605: 2119, 607: 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 632: 2119, 2119, 2119, 2119, 2119, 638: 2119, 2119, 641: 2119, 643: 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 665: 2119, 2119, 672: 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 689: 2119, 2119, 2119, 694: 2119, 757: 2119, 762: 2119, 769: 2119, 773: 2119, 2119},
{2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 4878, 2118, 2118, 2118, 2118, 2118, 590: 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 602: 2118, 605: 2118, 607: 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 632: 2118, 2118, 2118, 2118, 2118, 638: 2118, 2118, 641: 2118, 643: 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 665: 2118, 2118, 672: 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 689: 2118, 2118, 2118, 694: 2118, 757: 2118, 762: 2118, 769: 2118, 773: 2118, 2118},
// 805
{2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 1514, 2115, 2115, 2115, 2115, 2115, 590: 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 602: 2115, 605: 2115, 607: 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 632: 2115, 2115, 2115, 2115, 2115, 638: 2115, 2115, 641: 2115, 643: 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 665: 2115, 2115, 672: 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 689: 2115, 2115, 2115, 694: 2115, 757: 2115, 762: 2115, 769: 2115, 773: 2115, 2115},
{2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 1539, 2113, 2113, 2113, 2113, 2113, 590: 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 602: 2113, 605: 2113, 607: 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 632: 2113, 2113, 2113, 2113, 2113, 638: 2113, 2113, 641: 2113, 643: 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 665: 2113, 2113, 672: 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 689: 2113, 2113, 2113, 694: 2113, 757: 2113, 762: 2113, 769: 2113, 773: 2113, 2113},
{2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 1524, 2100, 2100, 2100, 2100, 2100, 590: 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 602: 2100, 605: 2100, 607: 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 632: 2100, 2100, 2100, 2100, 2100, 638: 2100, 2100, 641: 2100, 643: 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 665: 2100, 2100, 672: 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 689: 2100, 2100, 2100, 694: 2100, 757: 2100, 762: 2100, 769: 2100, 773: 2100, 2100},
{2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 1521, 2077, 2077, 2077, 2077, 2077, 590: 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 602: 2077, 605: 2077, 607: 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 632: 2077, 2077, 2077, 2077, 2077, 638: 2077, 2077, 641: 2077, 643: 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 665: 2077, 2077, 672: 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 689: 2077, 2077, 2077, 694: 2077, 757: 2077, 762: 2077, 769: 2077, 773: 2077, 2077},
{2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 1519, 2060, 2060, 2060, 2060, 2060, 590: 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 602: 2060, 605: 2060, 607: 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 632: 2060, 2060, 2060, 2060, 2060, 638: 2060, 2060, 641: 2060, 643: 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 665: 2060, 2060, 672: 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 689: 2060, 2060, 2060, 694: 2060, 757: 2060, 762: 2060, 769: 2060, 773: 2060, 2060},
// 810
{2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 1540, 2059, 2059, 2059, 2059, 2059, 590: 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 602: 2059, 605: 2059, 607: 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 632: 2059, 2059, 2059, 2059, 2059, 638: 2059, 2059, 641: 2059, 643: 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 665: 2059, 2059, 672: 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 689: 2059, 2059, 2059, 694: 2059, 757: 2059, 762: 2059, 769: 2059, 773: 2059, 2059},
{2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 1527, 2058, 2058, 2058, 2058, 2058, 590: 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 602: 2058, 605: 2058, 607: 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 632: 2058, 2058, 2058, 2058, 2058, 638: 2058, 2058, 641: 2058, 643: 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 665: 2058, 2058, 672: 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 689: 2058, 2058, 2058, 694: 2058, 757: 2058, 762: 2058, 769: 2058, 773: 2058, 2058},
{2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 1529, 2054, 2054, 2054, 2054, 2054, 590: 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 602: 2054, 605: 2054, 607: 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 632: 2054, 2054, 2054, 2054, 2054, 638: 2054, 2054, 641: 2054, 643: 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 665: 2054, 2054, 672: 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 689: 2054, 2054, 2054, 694: 2054, 757: 2054, 762: 2054, 769: 2054, 773: 2054, 2054},
{2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 1528, 2053, 2053, 2053, 2053, 2053, 590: 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 602: 2053, 605: 2053, 607: 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 632: 2053, 2053, 2053, 2053, 2053, 638: 2053, 2053, 641: 2053, 643: 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 665: 2053, 2053, 672: 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 689: 2053, 2053, 2053, 694: 2053, 757: 2053, 762: 2053, 769: 2053, 773: 2053, 2053},
{2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 1518, 2047, 2047, 2047, 2047, 2047, 590: 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 602: 2047, 605: 2047, 607: 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 632: 2047, 2047, 2047, 2047, 2047, 638: 2047, 2047, 641: 2047, 643: 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 665: 2047, 2047, 672: 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 689: 2047, 2047, 2047, 694: 2047, 757: 2047, 762: 2047, 769: 2047, 773: 2047, 2047},
// 815
{1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 4875, 1932, 1932, 1932, 1932, 1932, 590: 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 602: 1932, 605: 1932, 607: 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 632: 1932, 1932, 1932, 1932, 1932, 638: 1932, 1932, 641: 1932, 643: 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 665: 1932, 1932, 672: 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 689: 1932, 1932, 1932, 694: 1932, 757: 1932, 762: 1932, 769: 1932, 773: 1932, 1932},
{1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 4864, 1931, 1931, 1931, 1931, 1931, 590: 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 602: 1931, 605: 1931, 607: 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 632: 1931, 1931, 1931, 1931, 1931, 638: 1931, 1931, 641: 1931, 643: 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 665: 1931, 1931, 672: 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 689: 1931, 1931, 1931, 694: 1931, 757: 1931, 762: 1931, 769: 1931, 773: 1931, 1931},
{1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1455, 1801, 1801, 1801, 1801, 1801, 590: 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 602: 1801, 605: 1801, 607: 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 632: 1801, 1801, 1801, 1801, 1801, 638: 1801, 1801, 641: 1801, 643: 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 665: 1801, 1801, 672: 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 689: 1801, 1801, 1801, 694: 1801, 757: 1801, 762: 1801, 769: 1801, 773: 1801, 1801},
{1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 4861, 1793, 1793, 1793, 1793, 1793, 590: 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 602: 1793, 605: 1793, 607: 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 632: 1793, 1793, 1793, 1793, 1793, 638: 1793, 1793, 641: 1793, 643: 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 665: 1793, 1793, 672: 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 689: 1793, 1793, 1793, 694: 1793, 757: 1793, 762: 1793, 769: 1793, 773: 1793, 1793},
{1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 4852, 1781, 1781, 1781, 1781, 1781, 590: 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 602: 1781, 605: 1781, 607: 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 632: 1781, 1781, 1781, 1781, 1781, 638: 1781, 1781, 641: 1781, 643: 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 665: 1781, 1781, 672: 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 689: 1781, 1781, 1781, 694: 1781, 757: 1781, 762: 1781, 769: 1781, 773: 1781, 1781},
// 820
{1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1532, 1774, 1774, 1774, 1774, 1774, 590: 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 602: 1774, 605: 1774, 607: 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 632: 1774, 1774, 1774, 1774, 1774, 638: 1774, 1774, 641: 1774, 643: 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 665: 1774, 1774, 672: 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 689: 1774, 1774, 1774, 694: 1774, 757: 1774, 762: 1774, 769: 1774, 773: 1774, 1774},
{1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1454, 1757, 1757, 1757, 1757, 1757, 590: 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 602: 1757, 605: 1757, 607: 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 632: 1757, 1757, 1757, 1757, 1757, 638: 1757, 1757, 641: 1757, 643: 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 665: 1757, 1757, 672: 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 689: 1757, 1757, 1757, 694: 1757, 757: 1757, 762: 1757, 769: 1757, 773: 1757, 1757},
{1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 4845, 1744, 1744, 1744, 1744, 1744, 590: 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 602: 1744, 605: 1744, 607: 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 632: 1744, 1744, 1744, 1744, 1744, 638: 1744, 1744, 641: 1744, 643: 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 665: 1744, 1744, 672: 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 689: 1744, 1744, 1744, 694: 1744, 757: 1744, 762: 1744, 769: 1744, 773: 1744, 1744},
{1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 4838, 1743, 1743, 1743, 1743, 1743, 590: 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 602: 1743, 605: 1743, 607: 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 632: 1743, 1743, 1743, 1743, 1743, 638: 1743, 1743, 641: 1743, 643: 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 665: 1743, 1743, 672: 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 689: 1743, 1743, 1743, 694: 1743, 757: 1743, 762: 1743, 769: 1743, 773: 1743, 1743},
{1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 4818, 1722, 1722, 1722, 1722, 1722, 590: 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 602: 1722, 605: 1722, 607: 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 632: 1722, 1722, 1722, 1722, 1722, 638: 1722, 1722, 641: 1722, 643: 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 665: 1722, 1722, 672: 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 689: 1722, 1722, 1722, 694: 1722, 757: 1722, 762: 1722, 769: 1722, 773: 1722, 1722},
// 825
{1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 4810, 1721, 1721, 1721, 1721, 1721, 590: 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 602: 1721, 605: 1721, 607: 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 632: 1721, 1721, 1721, 1721, 1721, 638: 1721, 1721, 641: 1721, 643: 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 665: 1721, 1721, 672: 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 689: 1721, 1721, 1721, 694: 1721, 757: 1721, 762: 1721, 769: 1721, 773: 1721, 1721},
{1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 4804, 1720, 1720, 1720, 1720, 1720, 590: 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 602: 1720, 605: 1720, 607: 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 632: 1720, 1720, 1720, 1720, 1720, 638: 1720, 1720, 641: 1720, 643: 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 665: 1720, 1720, 672: 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 689: 1720, 1720, 1720, 694: 1720, 757: 1720, 762: 1720, 769: 1720, 773: 1720, 1720},
{1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 584: 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 601: 1634, 1634, 605: 1634, 607: 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 632: 1634, 1634, 1634, 1634, 1634, 638: 1634, 1634, 641: 1634, 643: 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 665: 1634, 1634, 672: 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 689: 1634, 1634, 1634, 694: 1634, 699: 1634, 712: 1634, 756: 1634, 1634, 1634, 1634, 1634, 1634, 1634},
{1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 584: 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 601: 1633, 1633, 605: 1633, 607: 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 632: 1633, 1633, 1633, 1633, 1633, 638: 1633, 1633, 641: 1633, 643: 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 665: 1633, 1633, 672: 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 689: 1633, 1633, 1633, 694: 1633, 699: 1633, 712: 1633, 756: 1633, 1633, 1633, 1633, 1633, 1633, 1633},
{1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 584: 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 601: 1632, 1632, 605: 1632, 607: 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 632: 1632, 1632, 1632, 1632, 1632, 638: 1632, 1632, 641: 1632, 643: 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 665: 1632, 1632, 672: 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 689: 1632, 1632, 1632, 694: 1632, 699: 1632, 712: 1632, 756: 1632, 1632, 1632, 1632, 1632, 1632, 1632},
// 830
{1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 584: 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 601: 1631, 1631, 605: 1631, 607: 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 632: 1631, 1631, 1631, 1631, 1631, 638: 1631, 1631, 641: 1631, 643: 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 665: 1631, 1631, 672: 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 689: 1631, 1631, 1631, 694: 1631, 699: 1631, 712: 1631, 756: 1631, 1631, 1631, 1631, 1631, 1631, 1631},
{1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 584: 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 601: 1630, 1630, 605: 1630, 607: 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 632: 1630, 1630, 1630, 1630, 1630, 638: 1630, 1630, 641: 1630, 643: 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 665: 1630, 1630, 672: 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 689: 1630, 1630, 1630, 694: 1630, 699: 1630, 712: 1630, 756: 1630, 1630, 1630, 1630, 1630, 1630, 1630},
{1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 584: 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 601: 1629, 1629, 605: 1629, 607: 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 632: 1629, 1629, 1629, 1629, 1629, 638: 1629, 1629, 641: 1629, 643: 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 665: 1629, 1629, 672: 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 689: 1629, 1629, 1629, 694: 1629, 699: 1629, 712: 1629, 756: 1629, 1629, 1629, 1629, 1629, 1629, 1629},
{1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 584: 1628, 4803, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 601: 1628, 1628, 605: 1628, 607: 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 632: 1628, 1628, 1628, 1628, 1628, 638: 1628, 1628, 641: 1628, 643: 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 665: 1628, 1628, 672: 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 689: 1628, 1628, 1628, 694: 1628, 699: 1628, 712: 1628, 756: 1628, 1628, 1628, 1628, 1628, 1628, 1628},
{585: 4800, 688: 4801, 693: 4802},
// 835
{1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 584: 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 601: 1626, 1626, 605: 1626, 607: 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 632: 1626, 1626, 1626, 1626, 1626, 638: 1626, 1626, 641: 1626, 643: 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 665: 1626, 1626, 672: 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 689: 1626, 1626, 1626, 694: 1626, 699: 1626, 712: 1626, 756: 1626, 1626, 1626, 1626, 1626, 1626, 1626},
{1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 584: 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 601: 1625, 1625, 605: 1625, 607: 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 632: 1625, 1625, 1625, 1625, 1625, 638: 1625, 1625, 641: 1625, 643: 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 665: 1625, 1625, 672: 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 689: 1625, 1625, 1625, 694: 1625, 699: 1625, 712: 1625, 756: 1625, 1625, 1625, 1625, 1625, 1625, 1625},
{1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 584: 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 601: 1622, 1622, 605: 1622, 607: 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 632: 1622, 1622, 1622, 1622, 1622, 638: 1622, 1622, 641: 1622, 643: 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 665: 1622, 1622, 672: 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 689: 1622, 1622, 1622, 694: 1622, 699: 1622, 712: 1622, 756: 1622, 1622, 1622, 1622, 1622, 1622, 1622},
{1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 584: 1589, 1589, 1589, 1589, 1589, 590: 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 602: 1589, 605: 1589, 607: 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 632: 1589, 1589, 1589, 1589, 1589, 638: 1589, 1589, 641: 1589, 643: 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 665: 1589, 1589, 672: 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 689: 1589, 1589, 1589, 694: 1589, 757: 1589, 762: 1589, 769: 4795, 773: 1589, 1589},
{1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 584: 1586, 1586, 1586, 1586, 1586, 590: 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 602: 1586, 605: 1586, 607: 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 632: 1586, 1586, 1586, 1586, 1586, 638: 1586, 1586, 641: 1586, 643: 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 665: 1586, 1586, 672: 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 689: 1586, 1586, 1586, 694: 1586, 757: 1586, 762: 1586, 773: 4791, 4792},
// 840
{1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 584: 1585, 1585, 1585, 1585, 1585, 590: 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 602: 1585, 605: 1585, 607: 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 632: 1585, 1585, 1585, 1585, 1585, 638: 1585, 1585, 641: 1585, 643: 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 665: 1585, 1585, 672: 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 689: 1585, 1585, 1585, 694: 1585, 757: 1585, 762: 1585},
{1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 584: 1584, 1584, 1584, 1584, 1584, 590: 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 602: 1584, 605: 1584, 607: 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 632: 1584, 1584, 1584, 1584, 1584, 638: 1584, 1584, 641: 1584, 643: 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 665: 1584, 1584, 672: 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 689: 1584, 1584, 1584, 694: 1584, 757: 1584, 762: 1584},
{1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 584: 1583, 1583, 1583, 1583, 1583, 590: 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 602: 1583, 605: 1583, 607: 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 632: 1583, 1583, 1583, 1583, 1583, 638: 1583, 1583, 641: 1583, 643: 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 665: 1583, 1583, 672: 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 689: 1583, 1583, 1583, 694: 1583, 757: 1583, 762: 1583},
{5, 5, 9: 5, 62: 5, 119: 5, 140: 5, 592: 4039, 757: 5, 762: 4040},
{1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 584: 1581, 1581, 1581, 1581, 1581, 590: 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 602: 1581, 605: 1581, 607: 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 632: 1581, 1581, 1581, 1581, 1581, 638: 1581, 1581, 641: 1581, 643: 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 665: 1581, 1581, 672: 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 689: 1581, 1581, 1581, 694: 1581, 757: 1581, 762: 1581},
// 845
{1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 584: 1580, 1580, 1580, 1580, 1580, 590: 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 602: 1580, 605: 1580, 607: 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 632: 1580, 1580, 1580, 1580, 1580, 638: 1580, 1580, 641: 1580, 643: 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 665: 1580, 1580, 672: 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 689: 1580, 1580, 1580, 694: 1580, 757: 1580, 762: 1580},
{1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 584: 1579, 1579, 1579, 1579, 1579, 590: 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 602: 1579, 605: 1579, 607: 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 632: 1579, 1579, 1579, 1579, 1579, 638: 1579, 1579, 641: 1579, 643: 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 665: 1579, 1579, 672: 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 689: 1579, 1579, 1579, 694: 1579, 757: 1579, 762: 1579},
{1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 584: 1578, 1578, 1578, 1578, 1578, 590: 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 602: 1578, 605: 1578, 607: 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 632: 1578, 1578, 1578, 1578, 1578, 638: 1578, 1578, 641: 1578, 643: 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 665: 1578, 1578, 672: 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 689: 1578, 1578, 1578, 694: 1578, 757: 1578, 762: 1578},
{1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 584: 1577, 1577, 1577, 1577, 1577, 590: 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 602: 1577, 605: 1577, 607: 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 632: 1577, 1577, 1577, 1577, 1577, 638: 1577, 1577, 641: 1577, 643: 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 665: 1577, 1577, 672: 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 689: 1577, 1577, 1577, 694: 1577, 757: 1577, 762: 1577},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 3963, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4790, 3944, 4026, 3943, 3940},
// 850
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 3963, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4789, 3944, 4026, 3943, 3940},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 3963, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4788, 3944, 4026, 3943, 3940},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 3963, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4787, 3944, 4026, 3943, 3940},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 3963, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4786, 3944, 4026, 3943, 3940},
{1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 584: 1570, 1570, 1570, 1570, 1570, 590: 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 602: 1570, 605: 1570, 607: 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 632: 1570, 1570, 1570, 1570, 1570, 638: 1570, 1570, 641: 1570, 643: 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 665: 1570, 1570, 672: 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 689: 1570, 1570, 1570, 694: 1570, 757: 1570, 762: 1570},
// 855
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 3149, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 4154, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 642: 3147, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 692: 3143, 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 4153, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4780, 861: 4156, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 4155, 4158, 4157, 909: 4781},
{583: 4775},
{583: 3150, 830: 4774},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4771, 3292, 3293, 3291},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 3963, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4770, 3944, 4026, 3943, 3940},
// 860
{583: 4763},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 643: 1384, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4750, 1441: 4751},
{583: 4684},
{583: 4209},
{583: 4198},
// 865
{583: 1537},
{583: 1534},
{583: 1533},
{583: 1530},
{583: 1526},
// 870
{583: 1523},
{583: 1522},
{583: 1520},
{1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 590: 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 602: 1509, 605: 1509, 607: 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 632: 1509, 1509, 1509, 1509, 1509, 638: 1509, 1509, 641: 1509, 643: 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 665: 1509, 1509, 672: 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 689: 1509, 1509, 1509, 694: 1509, 757: 1509, 762: 1509},
{1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 590: 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 602: 1508, 605: 1508, 607: 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 632: 1508, 1508, 1508, 1508, 1508, 638: 1508, 1508, 641: 1508, 643: 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 665: 1508, 1508, 672: 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 689: 1508, 1508, 1508, 694: 1508, 757: 1508, 762: 1508},
// 875
{1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 590: 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 602: 1507, 605: 1507, 607: 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 632: 1507, 1507, 1507, 1507, 1507, 638: 1507, 1507, 641: 1507, 643: 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 665: 1507, 1507, 672: 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 689: 1507, 1507, 1507, 694: 1507, 757: 1507, 762: 1507},
{1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 590: 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 602: 1506, 605: 1506, 607: 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 632: 1506, 1506, 1506, 1506, 1506, 638: 1506, 1506, 641: 1506, 643: 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 665: 1506, 1506, 672: 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 689: 1506, 1506, 1506, 694: 1506, 757: 1506, 762: 1506},
{1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 590: 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 602: 1505, 605: 1505, 607: 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 632: 1505, 1505, 1505, 1505, 1505, 638: 1505, 1505, 641: 1505, 643: 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 665: 1505, 1505, 672: 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 689: 1505, 1505, 1505, 694: 1505, 757: 1505, 762: 1505},
{1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 590: 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 602: 1504, 605: 1504, 607: 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 632: 1504, 1504, 1504, 1504, 1504, 638: 1504, 1504, 641: 1504, 643: 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 665: 1504, 1504, 672: 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 689: 1504, 1504, 1504, 694: 1504, 757: 1504, 762: 1504},
{1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 590: 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 602: 1503, 605: 1503, 607: 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 632: 1503, 1503, 1503, 1503, 1503, 638: 1503, 1503, 641: 1503, 643: 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 665: 1503, 1503, 672: 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 689: 1503, 1503, 1503, 694: 1503, 757: 1503, 762: 1503},
// 880
{1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 590: 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 602: 1502, 605: 1502, 607: 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 632: 1502, 1502, 1502, 1502, 1502, 638: 1502, 1502, 641: 1502, 643: 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 665: 1502, 1502, 672: 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 689: 1502, 1502, 1502, 694: 1502, 757: 1502, 762: 1502},
{1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 590: 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 602: 1501, 605: 1501, 607: 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 632: 1501, 1501, 1501, 1501, 1501, 638: 1501, 1501, 641: 1501, 643: 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 665: 1501, 1501, 672: 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 689: 1501, 1501, 1501, 694: 1501, 757: 1501, 762: 1501},
{1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 590: 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 602: 1500, 605: 1500, 607: 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 632: 1500, 1500, 1500, 1500, 1500, 638: 1500, 1500, 641: 1500, 643: 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 665: 1500, 1500, 672: 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 689: 1500, 1500, 1500, 694: 1500, 757: 1500, 762: 1500},
{1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 590: 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 602: 1499, 605: 1499, 607: 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 632: 1499, 1499, 1499, 1499, 1499, 638: 1499, 1499, 641: 1499, 643: 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 665: 1499, 1499, 672: 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 689: 1499, 1499, 1499, 694: 1499, 757: 1499, 762: 1499},
{583: 4681},
// 885
{583: 4678},
{1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 4675, 1511, 1511, 1511, 1511, 1511, 590: 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 602: 1511, 605: 1511, 607: 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 632: 1511, 1511, 1511, 1511, 1511, 638: 1511, 1511, 641: 1511, 643: 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 665: 1511, 1511, 672: 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 689: 1511, 1511, 1511, 694: 1511, 757: 1511, 762: 1511, 1299: 4676},
{583: 4673},
{1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 4669, 1416, 1416, 1416, 1416, 1416, 590: 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 602: 1416, 605: 1416, 607: 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 632: 1416, 1416, 1416, 1416, 1416, 638: 1416, 1416, 641: 1416, 643: 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 665: 1416, 1416, 672: 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 689: 1416, 1416, 1416, 694: 1416, 757: 1416, 762: 1416, 1451: 4668},
{583: 4660},
// 890
{583: 4656},
{583: 4651},
{583: 4648},
{583: 4643},
{583: 4634},
// 895
{583: 4627},
{583: 4622},
{583: 4617},
{583: 4603},
{583: 4586},
// 900
{1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 584: 1464, 1464, 1464, 1464, 1464, 590: 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 602: 1464, 605: 1464, 607: 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 632: 1464, 1464, 1464, 1464, 1464, 638: 1464, 1464, 641: 1464, 643: 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 665: 1464, 1464, 672: 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 689: 1464, 1464, 1464, 694: 1464, 757: 1464, 762: 1464},
{583: 4579},
{583: 1457},
{583: 1456},
{1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 584: 1448, 1448, 1448, 1448, 1448, 590: 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 602: 1448, 605: 1448, 607: 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 632: 1448, 1448, 1448, 1448, 1448, 638: 1448, 1448, 641: 1448, 643: 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 665: 1448, 1448, 672: 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 689: 1448, 1448, 1448, 694: 1448, 757: 1448, 762: 1448},
// 905
{583: 4576},
{583: 4573},
{583: 4565},
{583: 4557},
{583: 4549},
// 910
{583: 4535},
{583: 4526},
{583: 4521},
{583: 4516},
{583: 4511},
// 915
{583: 4506},
{583: 4501},
{583: 4496},
{583: 4483},
{583: 4480},
// 920
{583: 4477},
{583: 4474},
{583: 4471},
{583: 4468},
{583: 4464},
// 925
{583: 4458},
{583: 4445},
{583: 4440},
{583: 4435},
{583: 4029},
// 930
{1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 584: 1049, 1049, 1049, 1049, 1049, 590: 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 602: 1049, 605: 1049, 607: 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 632: 1049, 1049, 1049, 1049, 1049, 638: 1049, 1049, 641: 1049, 643: 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 665: 1049, 1049, 672: 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 689: 1049, 1049, 1049, 694: 1049, 757: 1049, 762: 1049},
{1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 584: 1048, 1048, 1048, 1048, 1048, 590: 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 602: 1048, 605: 1048, 607: 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 632: 1048, 1048, 1048, 1048, 1048, 638: 1048, 1048, 641: 1048, 643: 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 665: 1048, 1048, 672: 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 689: 1048, 1048, 1048, 694: 1048, 757: 1048, 762: 1048},
{1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 584: 1047, 1047, 1047, 1047, 1047, 590: 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 602: 1047, 605: 1047, 607: 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 632: 1047, 1047, 1047, 1047, 1047, 638: 1047, 1047, 641: 1047, 643: 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 665: 1047, 1047, 672: 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 689: 1047, 1047, 1047, 694: 1047, 757: 1047, 762: 1047},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4031},
{1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 584: 1046, 1046, 1046, 1046, 1046, 590: 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 602: 1046, 605: 1046, 607: 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 632: 1046, 1046, 1046, 1046, 1046, 638: 1046, 1046, 641: 1046, 643: 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 665: 1046, 1046, 672: 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 689: 1046, 1046, 1046, 694: 1046, 762: 1046, 772: 4433},
// 935
{9: 4364, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4363},
{583: 4335},
{2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 584: 2376, 2376, 2376, 2376, 591: 2376, 593: 2376, 2376, 2376, 2376, 602: 2376, 605: 4318, 607: 2376, 2376, 2376, 2376, 2376, 2376, 2376, 615: 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 632: 2376, 634: 2376, 2376, 2376, 638: 2376, 2376, 641: 2376, 643: 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376, 662: 2376, 665: 4315, 4313, 674: 4312, 4320, 4314, 4316, 4317, 4319, 1423: 4311, 1466: 4310},
{2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 584: 2347, 2347, 2347, 2347, 591: 2347, 593: 2347, 2347, 2347, 2347, 602: 2347, 605: 2347, 607: 2347, 2347, 2347, 2347, 2347, 2347, 2347, 615: 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 632: 2347, 634: 2347, 2347, 2347, 638: 2347, 2347, 641: 2347, 643: 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 662: 2347, 665: 2347, 2347, 674: 2347, 2347, 2347, 2347, 2347, 2347},
// 940
{2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 584: 2316, 2316, 2316, 2316, 4121, 590: 4120, 2316, 593: 2316, 2316, 2316, 2316, 4091, 4092, 4097, 602: 2316, 605: 2316, 607: 2316, 2316, 2316, 2316, 2316, 2316, 2316, 4093, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 632: 2316, 4125, 2316, 2316, 2316, 638: 2316, 2316, 641: 2316, 643: 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316, 4124, 2316, 665: 2316, 2316, 672: 4094, 4122, 2316, 2316, 2316, 2316, 2316, 2316, 4095, 4088, 4098, 4087, 4096, 4089, 4090, 689: 4126, 4134, 4135, 694: 4133, 949: 4123, 1329: 4127, 1410: 4129, 1456: 4131, 1462: 4128, 1468: 4130, 1523: 4132},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 1533, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4047},
{1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 584: 1590, 1590, 1590, 1590, 1590, 590: 1590, 1590, 4039, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 602: 1590, 605: 1590, 607: 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 632: 1590, 1590, 1590, 1590, 1590, 638: 1590, 1590, 641: 1590, 643: 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 665: 1590, 1590, 672: 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 689: 1590, 1590, 1590, 694: 1590, 762: 4040},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 637: 4044, 826: 4046, 3292, 3293, 3291, 860: 4043, 1048: 4042},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 3963, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4041, 3944, 4026, 3943, 3940},
// 945
{1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 584: 1572, 1572, 1572, 1572, 1572, 590: 1572, 1572, 4039, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 602: 1572, 605: 1572, 607: 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 632: 1572, 1572, 1572, 1572, 1572, 638: 1572, 1572, 641: 1572, 643: 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 665: 1572, 1572, 672: 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 689: 1572, 1572, 1572, 694: 1572, 757: 1572, 762: 1572},
{1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 584: 1582, 1582, 1582, 1582, 1582, 590: 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 602: 1582, 605: 1582, 607: 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 632: 1582, 1582, 1582, 1582, 1582, 638: 1582, 1582, 641: 1582, 643: 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 665: 1582, 1582, 672: 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 689: 1582, 1582, 1582, 694: 1582, 757: 1582, 762: 1582},
{1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 605: 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 632: 1053, 1053, 1053, 1053, 1053, 638: 1053, 1053, 641: 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 665: 1053, 1053, 672: 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 689: 1053, 1053, 1053, 1053, 694: 1053, 699: 1053, 712: 1053, 756: 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053},
{1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 605: 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 632: 1052, 1052, 1052, 1052, 1052, 638: 1052, 1052, 641: 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 665: 1052, 1052, 672: 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 689: 1052, 1052, 1052, 1052, 694: 1052, 699: 1052, 712: 1052, 756: 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052},
{492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 605: 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 632: 492, 492, 492, 492, 492, 492, 492, 492, 641: 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 665: 492, 492, 668: 492, 672: 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 689: 492, 492, 492, 492, 694: 492, 699: 492, 712: 492, 756: 492, 492, 492, 492, 492, 492, 492, 492, 492, 767: 492, 492, 771: 492, 492, 776: 492, 778: 492, 492, 781: 492},
// 950
{491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 605: 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 632: 491, 491, 491, 491, 491, 491, 491, 491, 641: 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 665: 491, 491, 668: 491, 672: 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 689: 491, 491, 491, 491, 694: 491, 699: 491, 712: 491, 756: 491, 491, 491, 491, 491, 491, 491, 491, 491, 767: 491, 491, 771: 491, 491, 776: 491, 778: 491, 491, 781: 491},
{133: 4076, 139: 4084, 163: 4072, 165: 4069, 4071, 4068, 4070, 4074, 4075, 4080, 4079, 4078, 4082, 4083, 4077, 4081, 4073, 620: 4054, 4052, 4053, 4051, 4049, 649: 4066, 4063, 4065, 4064, 4060, 4062, 4061, 4058, 4059, 4057, 4067, 856: 4050, 4048, 944: 4056, 957: 4055},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4119},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4118},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4117},
// 955
{2: 2366, 2366, 2366, 2366, 2366, 2366, 2366, 10: 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 64: 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 585: 2366, 588: 2366, 2366, 2366, 595: 2366, 2366, 2366, 2366, 2366, 2366, 2366, 603: 2366, 2366, 606: 2366, 631: 2366, 637: 2366, 640: 2366, 663: 2366, 2366, 667: 2366, 2366, 2366, 2366, 2366, 687: 2366, 2366, 693: 2366, 695: 2366, 2366, 2366, 2366, 700: 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 713: 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366, 765: 2366},
{2: 2365, 2365, 2365, 2365, 2365, 2365, 2365, 10: 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 64: 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 585: 2365, 588: 2365, 2365, 2365, 595: 2365, 2365, 2365, 2365, 2365, 2365, 2365, 603: 2365, 2365, 606: 2365, 631: 2365, 637: 2365, 640: 2365, 663: 2365, 2365, 667: 2365, 2365, 2365, 2365, 2365, 687: 2365, 2365, 693: 2365, 695: 2365, 2365, 2365, 2365, 700: 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 713: 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365, 765: 2365},
{2: 2364, 2364, 2364, 2364, 2364, 2364, 2364, 10: 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 64: 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 585: 2364, 588: 2364, 2364, 2364, 595: 2364, 2364, 2364, 2364, 2364, 2364, 2364, 603: 2364, 2364, 606: 2364, 631: 2364, 637: 2364, 640: 2364, 663: 2364, 2364, 667: 2364, 2364, 2364, 2364, 2364, 687: 2364, 2364, 693: 2364, 695: 2364, 2364, 2364, 2364, 700: 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 713: 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 765: 2364},
{2: 2363, 2363, 2363, 2363, 2363, 2363, 2363, 10: 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 64: 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 585: 2363, 588: 2363, 2363, 2363, 595: 2363, 2363, 2363, 2363, 2363, 2363, 2363, 603: 2363, 2363, 606: 2363, 631: 2363, 637: 2363, 640: 2363, 663: 2363, 2363, 667: 2363, 2363, 2363, 2363, 2363, 687: 2363, 2363, 693: 2363, 695: 2363, 2363, 2363, 2363, 700: 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 713: 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 765: 2363},
{597: 4085},
// 960
{1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 602: 1413, 1413, 605: 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 632: 1413, 1413, 1413, 1413, 1413, 638: 1413, 1413, 641: 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 665: 1413, 1413, 672: 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 689: 1413, 1413, 1413, 1413, 694: 1413, 763: 1413, 1413, 766: 1413},
{1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 602: 1412, 1412, 605: 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 632: 1412, 1412, 1412, 1412, 1412, 638: 1412, 1412, 641: 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 665: 1412, 1412, 672: 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 689: 1412, 1412, 1412, 1412, 694: 1412, 763: 1412, 1412, 766: 1412},
{1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 602: 1411, 1411, 605: 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 632: 1411, 1411, 1411, 1411, 1411, 638: 1411, 1411, 641: 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 665: 1411, 1411, 672: 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 689: 1411, 1411, 1411, 1411, 694: 1411, 763: 1411, 1411, 766: 1411},
{1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 602: 1410, 1410, 605: 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 632: 1410, 1410, 1410, 1410, 1410, 638: 1410, 1410, 641: 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 665: 1410, 1410, 672: 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 689: 1410, 1410, 1410, 1410, 694: 1410, 763: 1410, 1410, 766: 1410},
{1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 602: 1409, 1409, 605: 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 632: 1409, 1409, 1409, 1409, 1409, 638: 1409, 1409, 641: 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 665: 1409, 1409, 672: 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 689: 1409, 1409, 1409, 1409, 694: 1409, 763: 1409, 1409, 766: 1409},
// 965
{1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 602: 1408, 1408, 605: 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 632: 1408, 1408, 1408, 1408, 1408, 638: 1408, 1408, 641: 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 665: 1408, 1408, 672: 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 689: 1408, 1408, 1408, 1408, 694: 1408, 763: 1408, 1408, 766: 1408},
{1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 602: 1407, 1407, 605: 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 632: 1407, 1407, 1407, 1407, 1407, 638: 1407, 1407, 641: 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 665: 1407, 1407, 672: 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 689: 1407, 1407, 1407, 1407, 694: 1407, 763: 1407, 1407, 766: 1407},
{1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 602: 1406, 1406, 605: 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 632: 1406, 1406, 1406, 1406, 1406, 638: 1406, 1406, 641: 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 665: 1406, 1406, 672: 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 689: 1406, 1406, 1406, 1406, 694: 1406, 763: 1406, 1406, 766: 1406},
{1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 602: 1405, 1405, 605: 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 632: 1405, 1405, 1405, 1405, 1405, 638: 1405, 1405, 641: 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 665: 1405, 1405, 672: 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 689: 1405, 1405, 1405, 1405, 694: 1405, 763: 1405, 1405, 766: 1405},
{1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 602: 1404, 1404, 605: 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 632: 1404, 1404, 1404, 1404, 1404, 638: 1404, 1404, 641: 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 665: 1404, 1404, 672: 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 689: 1404, 1404, 1404, 1404, 694: 1404, 763: 1404, 1404, 766: 1404},
// 970
{1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 602: 1403, 1403, 605: 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 632: 1403, 1403, 1403, 1403, 1403, 638: 1403, 1403, 641: 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 665: 1403, 1403, 672: 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 689: 1403, 1403, 1403, 1403, 694: 1403, 763: 1403, 1403, 766: 1403},
{1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 602: 1402, 1402, 605: 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 632: 1402, 1402, 1402, 1402, 1402, 638: 1402, 1402, 641: 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 665: 1402, 1402, 672: 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 689: 1402, 1402, 1402, 1402, 694: 1402, 763: 1402, 1402, 766: 1402},
{1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 602: 1401, 1401, 605: 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 632: 1401, 1401, 1401, 1401, 1401, 638: 1401, 1401, 641: 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 665: 1401, 1401, 672: 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 689: 1401, 1401, 1401, 1401, 694: 1401, 763: 1401, 1401, 766: 1401},
{1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 602: 1400, 1400, 605: 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 632: 1400, 1400, 1400, 1400, 1400, 638: 1400, 1400, 641: 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 665: 1400, 1400, 672: 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 689: 1400, 1400, 1400, 1400, 694: 1400, 763: 1400, 1400, 766: 1400},
{1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 602: 1399, 1399, 605: 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 632: 1399, 1399, 1399, 1399, 1399, 638: 1399, 1399, 641: 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 665: 1399, 1399, 672: 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 689: 1399, 1399, 1399, 1399, 694: 1399, 763: 1399, 1399, 766: 1399},
// 975
{1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 602: 1398, 1398, 605: 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 632: 1398, 1398, 1398, 1398, 1398, 638: 1398, 1398, 641: 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 665: 1398, 1398, 672: 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 689: 1398, 1398, 1398, 1398, 694: 1398, 763: 1398, 1398, 766: 1398},
{1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 602: 1397, 1397, 605: 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 632: 1397, 1397, 1397, 1397, 1397, 638: 1397, 1397, 641: 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 665: 1397, 1397, 672: 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 689: 1397, 1397, 1397, 1397, 694: 1397, 763: 1397, 1397, 766: 1397},
{1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 602: 1396, 1396, 605: 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 632: 1396, 1396, 1396, 1396, 1396, 638: 1396, 1396, 641: 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 665: 1396, 1396, 672: 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 689: 1396, 1396, 1396, 1396, 694: 1396, 763: 1396, 1396, 766: 1396},
{1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 602: 1395, 1395, 605: 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 632: 1395, 1395, 1395, 1395, 1395, 638: 1395, 1395, 641: 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 665: 1395, 1395, 672: 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 689: 1395, 1395, 1395, 1395, 694: 1395, 763: 1395, 1395, 766: 1395},
{1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 602: 1394, 1394, 605: 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 632: 1394, 1394, 1394, 1394, 1394, 638: 1394, 1394, 641: 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 665: 1394, 1394, 672: 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 689: 1394, 1394, 1394, 1394, 694: 1394, 763: 1394, 1394, 766: 1394},
// 980
{1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 602: 1393, 1393, 605: 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 632: 1393, 1393, 1393, 1393, 1393, 638: 1393, 1393, 641: 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 665: 1393, 1393, 672: 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 689: 1393, 1393, 1393, 1393, 694: 1393, 763: 1393, 1393, 766: 1393},
{1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 602: 1392, 1392, 605: 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 632: 1392, 1392, 1392, 1392, 1392, 638: 1392, 1392, 641: 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 665: 1392, 1392, 672: 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 689: 1392, 1392, 1392, 1392, 694: 1392, 763: 1392, 1392, 766: 1392},
{1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 602: 1391, 1391, 605: 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 632: 1391, 1391, 1391, 1391, 1391, 638: 1391, 1391, 641: 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 665: 1391, 1391, 672: 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 689: 1391, 1391, 1391, 1391, 694: 1391, 763: 1391, 1391, 766: 1391},
{1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 602: 1390, 1390, 605: 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 632: 1390, 1390, 1390, 1390, 1390, 638: 1390, 1390, 641: 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 665: 1390, 1390, 672: 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 689: 1390, 1390, 1390, 1390, 694: 1390, 763: 1390, 1390, 766: 1390},
{1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 602: 1389, 1389, 605: 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 632: 1389, 1389, 1389, 1389, 1389, 638: 1389, 1389, 641: 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 665: 1389, 1389, 672: 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 689: 1389, 1389, 1389, 1389, 694: 1389, 763: 1389, 1389, 766: 1389},
// 985
{1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 602: 1388, 1388, 605: 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 632: 1388, 1388, 1388, 1388, 1388, 638: 1388, 1388, 641: 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 665: 1388, 1388, 672: 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 689: 1388, 1388, 1388, 1388, 694: 1388, 763: 1388, 1388, 766: 1388},
{1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 602: 1387, 1387, 605: 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 632: 1387, 1387, 1387, 1387, 1387, 638: 1387, 1387, 641: 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 665: 1387, 1387, 672: 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 689: 1387, 1387, 1387, 1387, 694: 1387, 763: 1387, 1387, 766: 1387},
{1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 602: 1386, 1386, 605: 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 632: 1386, 1386, 1386, 1386, 1386, 638: 1386, 1386, 641: 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 665: 1386, 1386, 672: 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 689: 1386, 1386, 1386, 1386, 694: 1386, 763: 1386, 1386, 766: 1386},
{1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 602: 1385, 1385, 605: 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 632: 1385, 1385, 1385, 1385, 1385, 638: 1385, 1385, 641: 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 665: 1385, 1385, 672: 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 689: 1385, 1385, 1385, 1385, 694: 1385, 763: 1385, 1385, 766: 1385},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4086},
// 990
{1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 584: 1597, 1597, 1597, 1597, 1597, 590: 1597, 1597, 593: 1597, 1597, 1597, 1597, 1597, 1597, 4097, 602: 1597, 605: 1597, 607: 1597, 1597, 1597, 1597, 1597, 1597, 1597, 4093, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 632: 1597, 1597, 1597, 1597, 1597, 638: 1597, 1597, 641: 1597, 643: 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 665: 1597, 1597, 672: 4094, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 4095, 1597, 4098, 1597, 4096, 1597, 1597, 689: 1597, 1597, 1597, 694: 1597},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4116},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4115},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4114},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4113},
// 995
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4110, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4109},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4106, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4105},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4104},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4103},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4102},
// 1000
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4101},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4100},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4099},
{1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 584: 1591, 1591, 1591, 1591, 1591, 590: 1591, 1591, 593: 1591, 1591, 1591, 1591, 1591, 1591, 1591, 602: 1591, 605: 1591, 607: 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 632: 1591, 1591, 1591, 1591, 1591, 638: 1591, 1591, 641: 1591, 643: 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 665: 1591, 1591, 672: 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 689: 1591, 1591, 1591, 694: 1591},
{1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 584: 1592, 1592, 1592, 1592, 1592, 590: 1592, 1592, 593: 1592, 1592, 1592, 1592, 1592, 1592, 1592, 602: 1592, 605: 1592, 607: 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 632: 1592, 1592, 1592, 1592, 1592, 638: 1592, 1592, 641: 1592, 643: 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 665: 1592, 1592, 672: 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 4098, 1592, 1592, 1592, 1592, 689: 1592, 1592, 1592, 694: 1592},
// 1005
{1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 584: 1593, 1593, 1593, 1593, 1593, 590: 1593, 1593, 593: 1593, 1593, 1593, 1593, 1593, 1593, 1593, 602: 1593, 605: 1593, 607: 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 632: 1593, 1593, 1593, 1593, 1593, 638: 1593, 1593, 641: 1593, 643: 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 665: 1593, 1593, 672: 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 4098, 1593, 1593, 1593, 1593, 689: 1593, 1593, 1593, 694: 1593},
{1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 584: 1594, 1594, 1594, 1594, 1594, 590: 1594, 1594, 593: 1594, 1594, 1594, 1594, 1594, 1594, 1594, 602: 1594, 605: 1594, 607: 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 632: 1594, 1594, 1594, 1594, 1594, 638: 1594, 1594, 641: 1594, 643: 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 665: 1594, 1594, 672: 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 4098, 1594, 1594, 1594, 1594, 689: 1594, 1594, 1594, 694: 1594},
{1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 584: 1595, 1595, 1595, 1595, 1595, 590: 1595, 1595, 593: 1595, 1595, 1595, 1595, 1595, 1595, 1595, 602: 1595, 605: 1595, 607: 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 632: 1595, 1595, 1595, 1595, 1595, 638: 1595, 1595, 641: 1595, 643: 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 665: 1595, 1595, 672: 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 4098, 1595, 1595, 1595, 1595, 689: 1595, 1595, 1595, 694: 1595},
{1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 584: 1596, 1596, 1596, 1596, 1596, 590: 1596, 1596, 593: 1596, 1596, 1596, 1596, 1596, 1596, 1596, 602: 1596, 605: 1596, 607: 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 632: 1596, 1596, 1596, 1596, 1596, 638: 1596, 1596, 641: 1596, 643: 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 665: 1596, 1596, 672: 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 4098, 1596, 1596, 1596, 1596, 689: 1596, 1596, 1596, 694: 1596},
{1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 584: 1600, 1600, 1600, 1600, 1600, 590: 1600, 1600, 593: 1600, 1600, 1600, 1600, 1600, 1600, 4097, 602: 1600, 605: 1600, 607: 1600, 1600, 1600, 1600, 1600, 1600, 1600, 4093, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 632: 1600, 1600, 1600, 1600, 1600, 638: 1600, 1600, 641: 1600, 643: 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 665: 1600, 1600, 672: 4094, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 4095, 1600, 4098, 1600, 4096, 1600, 1600, 689: 1600, 1600, 1600, 694: 1600},
// 1010
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 1533, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4107},
{133: 4076, 139: 4084, 163: 4072, 165: 4069, 4071, 4068, 4070, 4074, 4075, 4080, 4079, 4078, 4082, 4083, 4077, 4081, 4073, 620: 4054, 4052, 4053, 4051, 4049, 649: 4066, 4063, 4065, 4064, 4060, 4062, 4061, 4058, 4059, 4057, 4067, 856: 4050, 4048, 944: 4056, 957: 4108},
{1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 584: 1598, 1598, 1598, 1598, 1598, 590: 1598, 1598, 593: 1598, 1598, 1598, 1598, 1598, 1598, 1598, 602: 1598, 605: 1598, 607: 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 632: 1598, 1598, 1598, 1598, 1598, 638: 1598, 1598, 641: 1598, 643: 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 665: 1598, 1598, 672: 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 689: 1598, 1598, 1598, 694: 1598},
{1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 584: 1601, 1601, 1601, 1601, 1601, 590: 1601, 1601, 593: 1601, 1601, 1601, 1601, 1601, 1601, 4097, 602: 1601, 605: 1601, 607: 1601, 1601, 1601, 1601, 1601, 1601, 1601, 4093, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 632: 1601, 1601, 1601, 1601, 1601, 638: 1601, 1601, 641: 1601, 643: 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 665: 1601, 1601, 672: 4094, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 4095, 1601, 4098, 1601, 4096, 1601, 1601, 689: 1601, 1601, 1601, 694: 1601},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 1533, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4111},
// 1015
{133: 4076, 139: 4084, 163: 4072, 165: 4069, 4071, 4068, 4070, 4074, 4075, 4080, 4079, 4078, 4082, 4083, 4077, 4081, 4073, 620: 4054, 4052, 4053, 4051, 4049, 649: 4066, 4063, 4065, 4064, 4060, 4062, 4061, 4058, 4059, 4057, 4067, 856: 4050, 4048, 944: 4056, 957: 4112},
{1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 584: 1599, 1599, 1599, 1599, 1599, 590: 1599, 1599, 593: 1599, 1599, 1599, 1599, 1599, 1599, 1599, 602: 1599, 605: 1599, 607: 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 632: 1599, 1599, 1599, 1599, 1599, 638: 1599, 1599, 641: 1599, 643: 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 665: 1599, 1599, 672: 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 689: 1599, 1599, 1599, 694: 1599},
{1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 584: 1602, 1602, 1602, 1602, 1602, 590: 1602, 1602, 593: 1602, 1602, 1602, 1602, 4091, 4092, 4097, 602: 1602, 605: 1602, 607: 1602, 1602, 1602, 1602, 1602, 1602, 1602, 4093, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 632: 1602, 1602, 1602, 1602, 1602, 638: 1602, 1602, 641: 1602, 643: 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 665: 1602, 1602, 672: 4094, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 4095, 1602, 4098, 1602, 4096, 1602, 1602, 689: 1602, 1602, 1602, 694: 1602},
{1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 584: 1603, 1603, 1603, 1603, 1603, 590: 1603, 1603, 593: 1603, 1603, 1603, 1603, 4091, 4092, 4097, 602: 1603, 605: 1603, 607: 1603, 1603, 1603, 1603, 1603, 1603, 1603, 4093, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 632: 1603, 1603, 1603, 1603, 1603, 638: 1603, 1603, 641: 1603, 643: 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 665: 1603, 1603, 672: 4094, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 4095, 1603, 4098, 1603, 4096, 1603, 1603, 689: 1603, 1603, 1603, 694: 1603},
{1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 584: 1604, 1604, 1604, 1604, 1604, 590: 1604, 1604, 593: 1604, 1604, 1604, 1604, 4091, 4092, 4097, 602: 1604, 605: 1604, 607: 1604, 1604, 1604, 1604, 1604, 1604, 1604, 4093, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 632: 1604, 1604, 1604, 1604, 1604, 638: 1604, 1604, 641: 1604, 643: 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 665: 1604, 1604, 672: 4094, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 4095, 1604, 4098, 1604, 4096, 4089, 4090, 689: 1604, 1604, 1604, 694: 1604},
// 1020
{1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 584: 1605, 1605, 1605, 1605, 1605, 590: 1605, 1605, 593: 1605, 1605, 1605, 1605, 4091, 4092, 4097, 602: 1605, 605: 1605, 607: 1605, 1605, 1605, 1605, 1605, 1605, 1605, 4093, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 632: 1605, 1605, 1605, 1605, 1605, 638: 1605, 1605, 641: 1605, 643: 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 665: 1605, 1605, 672: 4094, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 4095, 4088, 4098, 1605, 4096, 4089, 4090, 689: 1605, 1605, 1605, 694: 1605},
{2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 584: 2382, 2382, 2382, 2382, 591: 2382, 593: 2382, 2382, 2382, 2382, 602: 2382, 607: 2382, 2382, 2382, 2382, 2382, 2382, 2382, 615: 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 632: 2382, 634: 2382, 2382, 2382, 638: 2382, 2382, 641: 2382, 643: 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 2382, 662: 2382, 856: 4050, 4048},
{2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 584: 2383, 2383, 2383, 2383, 591: 2383, 593: 2383, 2383, 2383, 2383, 602: 2383, 607: 2383, 2383, 2383, 2383, 2383, 2383, 2383, 615: 2383, 2383, 2383, 2383, 2383, 4054, 2383, 4053, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 632: 2383, 634: 2383, 2383, 2383, 638: 2383, 2383, 641: 2383, 643: 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 2383, 662: 2383, 856: 4050, 4048},
{2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 584: 2384, 2384, 2384, 2384, 591: 2384, 593: 2384, 2384, 2384, 2384, 602: 2384, 607: 2384, 2384, 2384, 2384, 2384, 2384, 2384, 615: 2384, 2384, 2384, 2384, 2384, 4054, 2384, 4053, 2384, 4049, 2384, 2384, 2384, 2384, 2384, 2384, 632: 2384, 634: 2384, 2384, 2384, 638: 2384, 2384, 641: 2384, 643: 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 662: 2384, 856: 4050, 4048},
{236: 2797, 262: 2797, 601: 2797, 633: 2797, 661: 2797, 667: 2797, 669: 2797, 673: 2797, 689: 2797, 2797, 2797, 701: 2797},
// 1025
{236: 2796, 262: 2796, 601: 2796, 633: 2796, 661: 2796, 667: 2796, 669: 2796, 673: 2796, 689: 2796, 2796, 2796, 701: 2796},
{2: 2338, 2338, 2338, 2338, 2338, 2338, 2338, 10: 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 64: 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 585: 2338, 588: 2338, 2338, 595: 2338, 2338, 2338, 2338, 2338, 2338, 2338, 603: 2338, 2338, 606: 2338, 631: 2338, 637: 2338, 640: 2338, 663: 2338, 2338, 667: 2338, 2338, 2338, 2338, 2338, 687: 2338, 2338, 693: 2338, 695: 2338, 2338, 2338, 2338, 700: 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 713: 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338, 2338},
{633: 4307, 661: 4306, 673: 4305, 689: 4308, 4134, 4135, 1329: 4309},
{583: 2334},
{2: 2332, 2332, 2332, 2332, 2332, 2332, 2332, 10: 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 64: 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 585: 2332, 588: 2332, 2332, 595: 2332, 2332, 2332, 2332, 2332, 2332, 2332, 603: 2332, 2332, 606: 2332, 631: 2332, 637: 2332, 640: 2332, 663: 2332, 2332, 667: 2332, 2332, 2332, 2332, 2332, 687: 2332, 2332, 693: 2332, 695: 2332, 2332, 2332, 2332, 700: 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 713: 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332, 2332},
// 1030
{2: 2330, 2330, 2330, 2330, 2330, 2330, 2330, 10: 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 64: 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 585: 2330, 588: 2330, 2330, 595: 2330, 2330, 2330, 2330, 2330, 2330, 2330, 603: 2330, 2330, 606: 2330, 631: 2330, 637: 2330, 640: 2330, 663: 2330, 2330, 667: 2330, 2330, 2330, 2330, 2330, 687: 2330, 2330, 693: 2330, 695: 2330, 2330, 2330, 2330, 700: 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 713: 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330, 2330},
{2: 2328, 2328, 2328, 2328, 2328, 2328, 2328, 10: 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 64: 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 585: 2328, 588: 2328, 2328, 595: 2328, 2328, 2328, 2328, 2328, 2328, 2328, 603: 2328, 2328, 606: 2328, 631: 2328, 637: 2328, 640: 2328, 663: 2328, 2328, 667: 2328, 2328, 2328, 2328, 2328, 687: 2328, 2328, 693: 2328, 695: 2328, 2328, 2328, 2328, 700: 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 713: 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328, 2328},
{583: 4149, 830: 4150},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4146},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 3963, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4144, 3944, 4026, 3943, 3940},
// 1035
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 3963, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4140, 3944, 4026, 3943, 3940},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 3963, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4139, 3944, 4026, 3943, 3940},
{583: 4136},
{2: 2315, 2315, 2315, 2315, 2315, 2315, 2315, 10: 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 64: 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 585: 2315, 588: 2315, 2315, 595: 2315, 2315, 2315, 2315, 2315, 2315, 2315, 603: 2315, 2315, 606: 2315, 631: 2315, 637: 2315, 640: 2315, 663: 2315, 2315, 667: 2315, 2315, 2315, 2315, 2315, 687: 2315, 2315, 693: 2315, 695: 2315, 2315, 2315, 2315, 700: 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 713: 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315, 2315},
{2: 2314, 2314, 2314, 2314, 2314, 2314, 2314, 10: 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 64: 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 585: 2314, 588: 2314, 2314, 595: 2314, 2314, 2314, 2314, 2314, 2314, 2314, 603: 2314, 2314, 606: 2314, 631: 2314, 637: 2314, 640: 2314, 663: 2314, 2314, 667: 2314, 2314, 2314, 2314, 2314, 687: 2314, 2314, 693: 2314, 695: 2314, 2314, 2314, 2314, 700: 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 713: 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314, 2314},
// 1040
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 3963, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4137, 3944, 4026, 3943, 3940},
{63: 4138, 592: 4039, 762: 4040},
{2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 584: 2317, 2317, 2317, 2317, 591: 2317, 593: 2317, 2317, 2317, 2317, 602: 2317, 605: 2317, 607: 2317, 2317, 2317, 2317, 2317, 2317, 2317, 615: 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 632: 2317, 634: 2317, 2317, 2317, 638: 2317, 2317, 641: 2317, 643: 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 2317, 662: 2317, 665: 2317, 2317, 674: 2317, 2317, 2317, 2317, 2317, 2317},
{2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 584: 2318, 2318, 2318, 2318, 591: 2318, 4039, 2318, 2318, 2318, 2318, 602: 2318, 605: 2318, 607: 2318, 2318, 2318, 2318, 2318, 2318, 2318, 615: 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 632: 2318, 634: 2318, 2318, 2318, 638: 2318, 2318, 641: 2318, 643: 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318, 662: 2318, 665: 2318, 2318, 674: 2318, 2318, 2318, 2318, 2318, 2318, 762: 4040},
{2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 4142, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 584: 2313, 2313, 2313, 2313, 591: 2313, 4039, 2313, 2313, 2313, 2313, 602: 2313, 605: 2313, 607: 2313, 2313, 2313, 2313, 2313, 2313, 2313, 615: 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 632: 2313, 634: 2313, 2313, 2313, 638: 2313, 2313, 641: 2313, 643: 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 662: 2313, 665: 2313, 2313, 674: 2313, 2313, 2313, 2313, 2313, 2313, 762: 4040, 1273: 4141},
// 1045
{2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 584: 2319, 2319, 2319, 2319, 591: 2319, 593: 2319, 2319, 2319, 2319, 602: 2319, 605: 2319, 607: 2319, 2319, 2319, 2319, 2319, 2319, 2319, 615: 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 632: 2319, 634: 2319, 2319, 2319, 638: 2319, 2319, 641: 2319, 643: 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 2319, 662: 2319, 665: 2319, 2319, 674: 2319, 2319, 2319, 2319, 2319, 2319},
{585: 4143},
{2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 584: 2312, 2312, 2312, 2312, 591: 2312, 593: 2312, 2312, 2312, 2312, 602: 2312, 605: 2312, 607: 2312, 2312, 2312, 2312, 2312, 2312, 2312, 615: 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 632: 2312, 634: 2312, 2312, 2312, 638: 2312, 2312, 641: 2312, 643: 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 662: 2312, 665: 2312, 2312, 674: 2312, 2312, 2312, 2312, 2312, 2312},
{2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 4142, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 584: 2313, 2313, 2313, 2313, 591: 2313, 4039, 2313, 2313, 2313, 2313, 602: 2313, 605: 2313, 607: 2313, 2313, 2313, 2313, 2313, 2313, 2313, 615: 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 632: 2313, 634: 2313, 2313, 2313, 638: 2313, 2313, 641: 2313, 643: 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 662: 2313, 665: 2313, 2313, 674: 2313, 2313, 2313, 2313, 2313, 2313, 762: 4040, 1273: 4145},
{2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 584: 2320, 2320, 2320, 2320, 591: 2320, 593: 2320, 2320, 2320, 2320, 602: 2320, 605: 2320, 607: 2320, 2320, 2320, 2320, 2320, 2320, 2320, 615: 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 632: 2320, 634: 2320, 2320, 2320, 638: 2320, 2320, 641: 2320, 643: 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 662: 2320, 665: 2320, 2320, 674: 2320, 2320, 2320, 2320, 2320, 2320},
// 1050
{597: 4091, 4092, 4097, 614: 4093, 620: 4147, 672: 4094, 680: 4095, 4088, 4098, 4087, 4096, 4089, 4090},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4148},
{2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 584: 2321, 2321, 2321, 2321, 591: 2321, 593: 2321, 2321, 2321, 2321, 602: 2321, 605: 2321, 607: 2321, 2321, 2321, 2321, 2321, 2321, 2321, 615: 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 632: 2321, 634: 2321, 2321, 2321, 638: 2321, 2321, 641: 2321, 643: 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 662: 2321, 665: 2321, 2321, 674: 2321, 2321, 2321, 2321, 2321, 2321},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 3149, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 4154, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 642: 3147, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 692: 3143, 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 4153, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4151, 861: 4156, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 4155, 4158, 4157, 909: 4152},
{2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 584: 2322, 2322, 2322, 2322, 591: 2322, 593: 2322, 2322, 2322, 2322, 602: 2322, 605: 2322, 607: 2322, 2322, 2322, 2322, 2322, 2322, 2322, 615: 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 632: 2322, 634: 2322, 2322, 2322, 638: 2322, 2322, 641: 2322, 643: 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 2322, 662: 2322, 665: 2322, 2322, 674: 2322, 2322, 2322, 2322, 2322, 2322},
// 1055
{2362, 2362, 9: 2362, 63: 2362, 197: 2362, 594: 2362, 619: 2362, 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{9: 4302, 63: 4303},
{9: 1570, 63: 1570, 588: 1570, 590: 1570, 592: 1570, 1112, 597: 1570, 1570, 1570, 605: 1570, 607: 1112, 1112, 610: 4168, 612: 4167, 614: 1570, 619: 4166, 1570, 1570, 1570, 1570, 1570, 633: 1570, 661: 1570, 665: 1570, 1570, 672: 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 1570, 689: 1570, 1570, 1570, 694: 1570, 762: 1570, 897: 4169, 4170},
{583: 4198, 695: 4201, 1103: 4200, 1171: 4199},
{583: 3150, 600: 3148, 642: 3147, 692: 3143, 830: 4163, 861: 4162, 3144, 3145, 3146, 866: 3155, 3153, 4164, 4165},
// 1060
{63: 4161, 593: 1113, 607: 1113, 1113},
{63: 4160},
{63: 4159},
{1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 590: 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 602: 1140, 605: 1140, 607: 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 632: 1140, 1140, 1140, 1140, 1140, 638: 1140, 1140, 641: 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 665: 1140, 1140, 672: 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 689: 1140, 1140, 1140, 1140, 694: 1140, 757: 1140, 762: 1140, 766: 1140, 858: 1140},
{1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 590: 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 602: 1141, 605: 1141, 607: 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 632: 1141, 1141, 1141, 1141, 1141, 638: 1141, 1141, 641: 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 665: 1141, 1141, 672: 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 689: 1141, 1141, 1141, 1141, 694: 1141, 757: 1141, 762: 1141, 766: 1141, 858: 1141},
// 1065
{1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 590: 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 602: 1142, 605: 1142, 607: 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 632: 1142, 1142, 1142, 1142, 1142, 638: 1142, 1142, 641: 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 665: 1142, 1142, 672: 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 689: 1142, 1142, 1142, 1142, 694: 1142, 757: 1142, 762: 1142, 766: 1142, 858: 1142},
{1301, 1301, 16: 1301, 63: 1301, 584: 1301, 586: 1301, 593: 1113, 1301, 607: 1113, 1113},
{1300, 1300, 16: 1300, 63: 1300, 584: 1300, 586: 1300, 593: 1112, 1300, 607: 1112, 1112, 610: 4168, 612: 4167, 619: 4166, 897: 4169, 4170},
{1125, 1125, 16: 1125, 63: 1125, 584: 1125, 586: 1125, 594: 1125},
{1124, 1124, 16: 1124, 63: 1124, 584: 1124, 586: 1124, 594: 1124},
// 1070
{776: 4189},
{604: 3284, 697: 4177, 854: 4175, 865: 4176, 1061: 4184},
{11: 4172, 276: 4173, 1447: 4174},
{1118, 1118, 16: 1118, 63: 1118, 584: 1118, 586: 1118, 594: 1118, 610: 4168, 612: 4167, 898: 4171},
{1117, 1117, 16: 1117, 63: 1117, 584: 1117, 586: 1117, 594: 1117},
// 1075
{1116, 1116, 16: 1116, 63: 1116, 584: 1116, 586: 1116, 594: 1116},
{604: 1175, 641: 1175, 695: 1175, 697: 1175},
{604: 1174, 641: 1174, 695: 1174, 697: 1174},
{604: 3284, 641: 1173, 695: 1173, 697: 4177, 854: 4175, 865: 4176, 1061: 4178, 1442: 4179},
{2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 16: 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 63: 2395, 69: 2395, 2395, 2395, 73: 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 132: 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 141: 2395, 2395, 144: 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 163: 2395, 165: 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 2395, 222: 2395, 2395, 252: 2395, 259: 2395, 300: 2395, 583: 2395, 2395, 586: 2395, 2395, 589: 2395, 591: 2395, 2395, 2395, 2395, 600: 2395, 602: 2395, 2395, 606: 2395, 2395, 2395, 2395, 611: 2395, 613: 2395, 615: 2395, 2395, 618: 2395, 641: 2395, 2395, 692: 2395, 695: 2395, 763: 2395, 2395, 766: 2395, 768: 2395},
// 1080
{1179, 1179, 9: 1179, 16: 1179, 63: 1179, 252: 1179, 584: 1179, 586: 1179, 593: 1179, 1179, 607: 1179, 1179, 613: 1179, 615: 1179, 1179, 641: 1179, 695: 1179},
{1178, 1178, 9: 1178, 16: 1178, 63: 1178, 252: 1178, 584: 1178, 586: 1178, 593: 1178, 1178, 607: 1178, 1178, 613: 1178, 615: 1178, 1178, 641: 1178, 695: 1178},
{641: 1172, 695: 1172},
{641: 4181, 695: 4180, 1531: 4182},
{241: 1177},
// 1085
{241: 1176},
{241: 4183},
{1168, 1168, 16: 1168, 63: 1168, 584: 1168, 586: 1168, 593: 1168, 1168, 607: 1168, 1168, 613: 1168, 615: 1168, 1168},
{1171, 1171, 9: 4185, 16: 1171, 63: 1171, 252: 4186, 584: 1171, 586: 1171, 593: 1171, 1171, 607: 1171, 1171, 613: 1171, 615: 1171, 1171},
{604: 3284, 697: 4177, 854: 4175, 865: 4176, 1061: 4188},
// 1090
{604: 3284, 697: 4177, 854: 4175, 865: 4176, 1061: 4187},
{1169, 1169, 16: 1169, 63: 1169, 584: 1169, 586: 1169, 593: 1169, 1169, 607: 1169, 1169, 613: 1169, 615: 1169, 1169},
{1170, 1170, 16: 1170, 63: 1170, 584: 1170, 586: 1170, 593: 1170, 1170, 607: 1170, 1170, 613: 1170, 615: 1170, 1170},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4190, 1047: 4192, 1085: 4191},
{1614, 1614, 9: 1614, 16: 1614, 63: 1614, 197: 1614, 584: 1614, 586: 1614, 593: 1614, 1614, 607: 1614, 1614, 610: 1614, 612: 1614, 1614, 615: 1614, 1614, 619: 1614, 4054, 4052, 4053, 4051, 4049, 626: 1614, 628: 1614, 632: 4197, 641: 1614, 645: 1614, 648: 1614, 660: 4196, 856: 4050, 4048, 1496: 4195},
// 1095
{1617, 1617, 9: 4193, 16: 1617, 63: 1617, 197: 1617, 584: 1617, 586: 1617, 593: 1617, 1617, 607: 1617, 1617, 610: 1617, 612: 1617, 1617, 615: 1617, 1617},
{1616, 1616, 9: 1616, 16: 1616, 63: 1616, 197: 1616, 584: 1616, 586: 1616, 593: 1616, 1616, 607: 1616, 1616, 610: 1616, 612: 1616, 1616, 615: 1616, 1616, 619: 1616, 626: 1616, 628: 1616, 641: 1616, 645: 1616, 648: 1616},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4190, 1047: 4194},
{1615, 1615, 9: 1615, 16: 1615, 63: 1615, 197: 1615, 584: 1615, 586: 1615, 593: 1615, 1615, 607: 1615, 1615, 610: 1615, 612: 1615, 1615, 615: 1615, 1615, 619: 1615, 626: 1615, 628: 1615, 641: 1615, 645: 1615, 648: 1615},
{1613, 1613, 9: 1613, 16: 1613, 63: 1613, 197: 1613, 584: 1613, 586: 1613, 593: 1613, 1613, 607: 1613, 1613, 610: 1613, 612: 1613, 1613, 615: 1613, 1613, 619: 1613, 626: 1613, 628: 1613, 641: 1613, 645: 1613, 648: 1613},
// 1100
{1612, 1612, 9: 1612, 16: 1612, 63: 1612, 197: 1612, 584: 1612, 586: 1612, 593: 1612, 1612, 607: 1612, 1612, 610: 1612, 612: 1612, 1612, 615: 1612, 1612, 619: 1612, 626: 1612, 628: 1612, 641: 1612, 645: 1612, 648: 1612},
{1611, 1611, 9: 1611, 16: 1611, 63: 1611, 197: 1611, 584: 1611, 586: 1611, 593: 1611, 1611, 607: 1611, 1611, 610: 1611, 612: 1611, 1611, 615: 1611, 1611, 619: 1611, 626: 1611, 628: 1611, 641: 1611, 645: 1611, 648: 1611},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4210, 3292, 3293, 3291, 834: 4299},
{1607, 1607, 9: 4222, 16: 1607, 63: 1607, 584: 1607, 586: 1607, 593: 1607, 1607, 607: 1607, 1607, 610: 1607, 612: 1607, 1607, 615: 1607, 1607, 619: 4166, 897: 4220, 971: 4221},
{166, 166, 9: 166, 16: 166, 63: 166, 584: 166, 586: 166, 593: 166, 166, 607: 166, 166, 610: 166, 612: 166, 166, 615: 166, 166, 619: 166},
// 1105
{583: 4202, 1010: 4203},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 1647, 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 4208, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4204, 947: 4207, 1585: 4206, 4205},
{164, 164, 9: 164, 16: 164, 63: 164, 584: 164, 586: 164, 593: 164, 164, 607: 164, 164, 610: 164, 612: 164, 164, 615: 164, 164, 619: 164},
{1643, 1643, 9: 1643, 16: 1643, 63: 1643, 584: 1643, 586: 1643, 594: 1643, 609: 1643, 612: 1643, 617: 1643, 619: 1643, 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{63: 4219},
// 1110
{9: 4217, 63: 1646},
{9: 1644, 63: 1644},
{1642, 1642, 9: 1642, 16: 1642, 63: 1642, 583: 4209, 1642, 586: 1642, 594: 1642, 609: 1642, 612: 1642, 617: 1642, 619: 1642},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4210, 3292, 3293, 3291, 834: 4211},
{63: 1589, 605: 1589, 769: 4213},
// 1115
{63: 4212},
{1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 584: 1558, 1558, 1558, 1558, 1558, 590: 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 602: 1558, 605: 1558, 607: 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 632: 1558, 1558, 1558, 1558, 1558, 638: 1558, 1558, 641: 1558, 643: 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 665: 1558, 1558, 672: 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 689: 1558, 1558, 1558, 694: 1558, 757: 1558, 762: 1558},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4214, 3292, 3293, 3291},
{63: 1588, 605: 1588, 769: 4215},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4216, 3292, 3293, 3291},
// 1120
{1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 584: 1587, 1587, 1587, 1587, 1587, 590: 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 602: 1587, 605: 1587, 607: 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 632: 1587, 1587, 1587, 1587, 1587, 638: 1587, 1587, 641: 1587, 643: 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 665: 1587, 1587, 672: 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 689: 1587, 1587, 1587, 694: 1587, 757: 1587, 762: 1587, 773: 1587, 1587},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 4208, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4204, 947: 4218},
{9: 1645, 63: 1645},
{1648, 1648, 9: 1648, 16: 1648, 63: 1648, 132: 1648, 584: 1648, 586: 1648, 593: 1648, 1648, 607: 1648, 1648, 610: 1648, 612: 1648, 1648, 615: 1648, 1648, 619: 1648, 1648},
{1606, 1606, 16: 1606, 63: 1606, 197: 1606, 584: 1606, 586: 1606, 593: 1606, 1606, 607: 1606, 1606, 610: 1606, 612: 1606, 1606, 615: 1606, 1606},
// 1125
{1167, 1167, 16: 1167, 63: 1167, 584: 1167, 586: 1167, 593: 1167, 1167, 607: 1167, 1167, 610: 4168, 612: 4167, 1167, 615: 1167, 1167, 898: 4225, 990: 4224},
{695: 4201, 1103: 4223},
{165, 165, 9: 165, 16: 165, 63: 165, 584: 165, 586: 165, 593: 165, 165, 607: 165, 165, 610: 165, 612: 165, 165, 615: 165, 165, 619: 165},
{1138, 1138, 16: 1138, 63: 1138, 584: 1138, 586: 1138, 593: 1138, 1138, 607: 1138, 1138, 613: 4227, 615: 4228, 1138, 1071: 4226},
{1166, 1166, 16: 1166, 63: 1166, 584: 1166, 586: 1166, 593: 1166, 1166, 607: 1166, 1166, 613: 1166, 615: 1166, 1166},
// 1130
{1144, 1144, 16: 1144, 63: 1144, 584: 1144, 586: 1144, 593: 1144, 1144, 607: 1144, 1144, 616: 4256, 1072: 4255},
{383: 4233, 766: 4232},
{661: 4229},
{383: 4230},
{301: 4231},
// 1135
{1130, 1130, 16: 1130, 63: 1130, 584: 1130, 586: 1130, 593: 1130, 1130, 607: 1130, 1130, 616: 1130},
{1129, 1129, 16: 1129, 63: 1129, 240: 1129, 243: 1129, 263: 1129, 584: 1129, 586: 1129, 593: 1129, 1129, 607: 1129, 1129, 616: 1129, 1290: 4235, 4249},
{1129, 1129, 16: 1129, 63: 1129, 240: 1129, 243: 1129, 584: 1129, 586: 1129, 593: 1129, 1129, 607: 1129, 1129, 616: 1129, 1290: 4235, 4234},
{1136, 1136, 16: 1136, 63: 1136, 240: 4246, 243: 4247, 584: 1136, 586: 1136, 593: 1136, 1136, 607: 1136, 1136, 616: 1136},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 4238, 939: 4239},
// 1140
{1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 632: 1358, 1358, 1358, 1358, 1358, 638: 1358, 1358, 641: 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 665: 1358, 1358, 672: 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 689: 1358, 1358, 1358, 1358, 694: 1358, 699: 1358, 703: 1358, 712: 1358, 756: 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 4244, 1358, 775: 1358, 1358, 1358, 1358, 788: 1358, 1358, 792: 1358, 794: 1358, 816: 1358, 819: 1358, 1358, 1358, 1358, 1358, 1358, 1358},
{769: 4242},
{1355, 1355, 9: 1355, 16: 1355, 63: 1355, 240: 1355, 243: 1355, 263: 1355, 584: 1355, 586: 1355, 593: 1355, 1355, 607: 1355, 1355, 616: 1355, 1355, 646: 1355, 767: 1355, 788: 1355},
{1128, 1128, 9: 4240, 16: 1128, 63: 1128, 240: 1128, 243: 1128, 263: 1128, 584: 1128, 586: 1128, 593: 1128, 1128, 607: 1128, 1128, 616: 1128},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 4241},
// 1145
{1354, 1354, 9: 1354, 16: 1354, 63: 1354, 240: 1354, 243: 1354, 253: 1354, 263: 1354, 584: 1354, 586: 1354, 593: 1354, 1354, 607: 1354, 1354, 616: 1354, 1354, 646: 1354, 767: 1354, 770: 1354, 788: 1354, 819: 1354, 1354},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4243, 3292, 3293, 3291},
{1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 632: 1356, 1356, 1356, 1356, 1356, 638: 1356, 1356, 641: 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 665: 1356, 1356, 672: 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 689: 1356, 1356, 1356, 1356, 694: 1356, 699: 1356, 703: 1356, 712: 1356, 756: 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 770: 1356, 775: 1356, 1356, 1356, 1356, 788: 1356, 1356, 792: 1356, 794: 1356, 816: 1356, 819: 1356, 1356, 1356, 1356, 1356, 1356, 1356},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4245, 3292, 3293, 3291},
{1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 632: 1357, 1357, 1357, 1357, 1357, 638: 1357, 1357, 641: 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 665: 1357, 1357, 672: 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 689: 1357, 1357, 1357, 1357, 694: 1357, 699: 1357, 703: 1357, 712: 1357, 756: 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 770: 1357, 775: 1357, 1357, 1357, 1357, 788: 1357, 1357, 792: 1357, 794: 1357, 816: 1357, 819: 1357, 1357, 1357, 1357, 1357, 1357, 1357},
// 1150
{1133, 1133, 16: 1133, 63: 1133, 584: 1133, 586: 1133, 593: 1133, 1133, 607: 1133, 1133, 616: 1133},
{360: 4248},
{1131, 1131, 16: 1131, 63: 1131, 584: 1131, 586: 1131, 593: 1131, 1131, 607: 1131, 1131, 616: 1131},
{1137, 1137, 16: 1137, 63: 1137, 240: 4250, 243: 4252, 263: 4251, 584: 1137, 586: 1137, 593: 1137, 1137, 607: 1137, 1137, 616: 1137},
{1135, 1135, 16: 1135, 63: 1135, 584: 1135, 586: 1135, 593: 1135, 1135, 607: 1135, 1135, 616: 1135},
// 1155
{604: 3284, 854: 4254},
{360: 4253},
{1132, 1132, 16: 1132, 63: 1132, 584: 1132, 586: 1132, 593: 1132, 1132, 607: 1132, 1132, 616: 1132},
{1134, 1134, 16: 1134, 63: 1134, 584: 1134, 586: 1134, 593: 1134, 1134, 607: 1134, 1134, 616: 1134},
{1302, 1302, 16: 1302, 63: 1302, 584: 1302, 586: 1302, 593: 1302, 1302, 607: 1302, 1302},
// 1160
{1498: 4257},
{585: 4258},
{301, 301, 16: 301, 63: 301, 157: 4262, 184: 4261, 584: 301, 586: 301, 593: 301, 301, 607: 301, 301, 778: 301, 998: 4260, 1247: 4259},
{286, 286, 16: 286, 63: 286, 584: 286, 586: 286, 593: 286, 286, 607: 286, 286, 778: 4290, 1277: 4289},
{164: 4269, 907: 4265, 911: 4267, 919: 4268, 4266, 1245: 4264, 1445: 4263},
// 1165
{299, 299, 19: 299, 70: 299, 73: 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 164: 299, 583: 299, 299, 617: 299, 661: 299, 768: 299, 907: 299, 911: 299, 919: 299, 299},
{298, 298, 19: 298, 70: 298, 73: 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, 164: 298, 583: 298, 298, 617: 298, 661: 298, 768: 298, 907: 298, 911: 298, 919: 298, 298},
{300, 300, 16: 300, 63: 300, 164: 4269, 583: 300, 300, 586: 300, 593: 300, 300, 602: 300, 607: 300, 300, 611: 300, 778: 300, 907: 4265, 911: 4267, 919: 4268, 4266, 1245: 4288},
{296, 296, 16: 296, 63: 296, 164: 296, 583: 296, 296, 586: 296, 593: 296, 296, 602: 296, 607: 296, 296, 611: 296, 778: 296, 907: 296, 911: 296, 919: 296, 296},
{776: 4286},
// 1170
{585: 4280, 688: 4281, 693: 4282, 1030: 4285},
{776: 4283},
{776: 4278},
{601: 4270},
{776: 4271},
// 1175
{585: 4272, 688: 4273, 693: 4274, 1107: 4275},
{497, 497, 9: 497, 16: 497, 63: 497, 164: 497, 583: 497, 497, 586: 497, 593: 497, 497, 602: 497, 607: 497, 497, 611: 497, 778: 497, 907: 497, 911: 497, 919: 497, 497, 1098: 497},
{496, 496, 9: 496, 16: 496, 63: 496, 164: 496, 583: 496, 496, 586: 496, 593: 496, 496, 602: 496, 607: 496, 496, 611: 496, 778: 496, 907: 496, 911: 496, 919: 496, 496, 1098: 496},
{495, 495, 9: 495, 16: 495, 63: 495, 164: 495, 583: 495, 495, 586: 495, 593: 495, 495, 602: 495, 607: 495, 495, 611: 495, 778: 495, 907: 495, 911: 495, 919: 495, 495, 1098: 495},
{291, 291, 16: 291, 63: 291, 164: 291, 583: 291, 291, 586: 291, 593: 291, 291, 602: 291, 607: 291, 291, 611: 291, 778: 291, 907: 291, 911: 291, 919: 291, 291, 1098: 4276},
// 1180
{911: 4277},
{290, 290, 16: 290, 63: 290, 164: 290, 583: 290, 290, 586: 290, 593: 290, 290, 602: 290, 607: 290, 290, 611: 290, 778: 290, 907: 290, 911: 290, 919: 290, 290},
{585: 4280, 688: 4281, 693: 4282, 1030: 4279},
{292, 292, 16: 292, 63: 292, 164: 292, 583: 292, 292, 586: 292, 593: 292, 292, 602: 292, 607: 292, 292, 611: 292, 778: 292, 907: 292, 911: 292, 919: 292, 292},
{289, 289, 16: 289, 63: 289, 164: 289, 583: 289, 289, 586: 289, 593: 289, 289, 602: 289, 607: 289, 289, 611: 289, 778: 289, 907: 289, 911: 289, 919: 289, 289},
// 1185
{288, 288, 16: 288, 63: 288, 164: 288, 583: 288, 288, 586: 288, 593: 288, 288, 602: 288, 607: 288, 288, 611: 288, 778: 288, 907: 288, 911: 288, 919: 288, 288},
{287, 287, 16: 287, 63: 287, 164: 287, 583: 287, 287, 586: 287, 593: 287, 287, 602: 287, 607: 287, 287, 611: 287, 778: 287, 907: 287, 911: 287, 919: 287, 287},
{585: 4280, 688: 4281, 693: 4282, 1030: 4284},
{293, 293, 16: 293, 63: 293, 164: 293, 583: 293, 293, 586: 293, 593: 293, 293, 602: 293, 607: 293, 293, 611: 293, 778: 293, 907: 293, 911: 293, 919: 293, 293},
{294, 294, 16: 294, 63: 294, 164: 294, 583: 294, 294, 586: 294, 593: 294, 294, 602: 294, 607: 294, 294, 611: 294, 778: 294, 907: 294, 911: 294, 919: 294, 294},
// 1190
{585: 4280, 688: 4281, 693: 4282, 1030: 4287},
{295, 295, 16: 295, 63: 295, 164: 295, 583: 295, 295, 586: 295, 593: 295, 295, 602: 295, 607: 295, 295, 611: 295, 778: 295, 907: 295, 911: 295, 919: 295, 295},
{297, 297, 16: 297, 63: 297, 164: 297, 583: 297, 297, 586: 297, 593: 297, 297, 602: 297, 607: 297, 297, 611: 297, 778: 297, 907: 297, 911: 297, 919: 297, 297},
{1143, 1143, 16: 1143, 63: 1143, 584: 1143, 586: 1143, 593: 1143, 1143, 607: 1143, 1143},
{284, 284, 16: 284, 63: 284, 583: 284, 284, 586: 284, 593: 284, 284, 602: 284, 607: 284, 284, 611: 284, 907: 284, 1557: 4291, 4292},
// 1195
{282, 282, 16: 282, 63: 282, 583: 282, 282, 586: 282, 593: 282, 282, 602: 282, 607: 282, 282, 611: 282, 907: 4296, 1470: 4295},
{776: 4293},
{585: 4280, 688: 4281, 693: 4282, 1030: 4294},
{283, 283, 16: 283, 63: 283, 583: 283, 283, 586: 283, 593: 283, 283, 602: 283, 607: 283, 283, 611: 283, 907: 283},
{285, 285, 16: 285, 63: 285, 583: 285, 285, 586: 285, 593: 285, 285, 602: 285, 607: 285, 285, 611: 285},
// 1200
{776: 4297},
{585: 4280, 688: 4281, 693: 4282, 1030: 4298},
{281, 281, 16: 281, 63: 281, 583: 281, 281, 586: 281, 593: 281, 281, 602: 281, 607: 281, 281, 611: 281},
{63: 4300},
{1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 584: 1557, 1557, 1557, 1557, 1557, 590: 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 602: 1557, 605: 1557, 607: 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 632: 1557, 1557, 1557, 1557, 1557, 638: 1557, 1557, 641: 1557, 643: 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 665: 1557, 1557, 672: 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 689: 1557, 1557, 1557, 694: 1557, 757: 1557, 762: 1557},
// 1205
{1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 590: 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 602: 1139, 605: 1139, 607: 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 632: 1139, 1139, 1139, 1139, 1139, 638: 1139, 1139, 641: 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 665: 1139, 1139, 672: 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 689: 1139, 1139, 1139, 1139, 694: 1139, 757: 1139, 762: 1139, 766: 1139, 858: 1139},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4304},
{2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 584: 2323, 2323, 2323, 2323, 591: 2323, 593: 2323, 2323, 2323, 2323, 602: 2323, 605: 2323, 607: 2323, 2323, 2323, 2323, 2323, 2323, 2323, 615: 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 632: 2323, 634: 2323, 2323, 2323, 638: 2323, 2323, 641: 2323, 643: 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 2323, 662: 2323, 665: 2323, 2323, 674: 2323, 2323, 2323, 2323, 2323, 2323},
{2361, 2361, 9: 2361, 63: 2361, 197: 2361, 594: 2361, 619: 2361, 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{2: 2337, 2337, 2337, 2337, 2337, 2337, 2337, 10: 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 64: 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 585: 2337, 588: 2337, 2337, 595: 2337, 2337, 2337, 2337, 2337, 2337, 2337, 603: 2337, 2337, 606: 2337, 631: 2337, 637: 2337, 640: 2337, 663: 2337, 2337, 667: 2337, 2337, 2337, 2337, 2337, 687: 2337, 2337, 693: 2337, 695: 2337, 2337, 2337, 2337, 700: 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 713: 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337, 2337},
// 1210
{583: 2333},
{2: 2331, 2331, 2331, 2331, 2331, 2331, 2331, 10: 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 64: 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 585: 2331, 588: 2331, 2331, 595: 2331, 2331, 2331, 2331, 2331, 2331, 2331, 603: 2331, 2331, 606: 2331, 631: 2331, 637: 2331, 640: 2331, 663: 2331, 2331, 667: 2331, 2331, 2331, 2331, 2331, 687: 2331, 2331, 693: 2331, 695: 2331, 2331, 2331, 2331, 700: 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 713: 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331},
{2: 2329, 2329, 2329, 2329, 2329, 2329, 2329, 10: 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 64: 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 585: 2329, 588: 2329, 2329, 595: 2329, 2329, 2329, 2329, 2329, 2329, 2329, 603: 2329, 2329, 606: 2329, 631: 2329, 637: 2329, 640: 2329, 663: 2329, 2329, 667: 2329, 2329, 2329, 2329, 2329, 687: 2329, 2329, 693: 2329, 695: 2329, 2329, 2329, 2329, 700: 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 713: 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329, 2329},
{2: 2327, 2327, 2327, 2327, 2327, 2327, 2327, 10: 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 64: 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 585: 2327, 588: 2327, 2327, 595: 2327, 2327, 2327, 2327, 2327, 2327, 2327, 603: 2327, 2327, 606: 2327, 631: 2327, 637: 2327, 640: 2327, 663: 2327, 2327, 667: 2327, 2327, 2327, 2327, 2327, 687: 2327, 2327, 693: 2327, 695: 2327, 2327, 2327, 2327, 700: 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 713: 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327, 2327},
{262: 4333, 601: 4334, 667: 4332, 669: 4331},
// 1215
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 4325, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 4326, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4324, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 770: 4327, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4322, 1402: 4323},
{2: 2346, 2346, 2346, 2346, 2346, 2346, 2346, 10: 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 64: 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 585: 2346, 588: 2346, 2346, 595: 2346, 2346, 2346, 2346, 2346, 2346, 2346, 603: 2346, 2346, 606: 2346, 631: 2346, 637: 2346, 640: 2346, 663: 2346, 2346, 667: 2346, 2346, 2346, 2346, 2346, 687: 2346, 2346, 693: 2346, 695: 2346, 2346, 2346, 2346, 700: 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 713: 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 2346, 770: 2346},
{2: 2345, 2345, 2345, 2345, 2345, 2345, 2345, 10: 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 64: 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 585: 2345, 588: 2345, 2345, 595: 2345, 2345, 2345, 2345, 2345, 2345, 2345, 603: 2345, 2345, 606: 2345, 631: 2345, 637: 2345, 640: 2345, 663: 2345, 2345, 667: 2345, 2345, 2345, 2345, 2345, 687: 2345, 2345, 693: 2345, 695: 2345, 2345, 2345, 2345, 700: 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 713: 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 2345, 770: 2345},
{2: 2344, 2344, 2344, 2344, 2344, 2344, 2344, 10: 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 64: 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 585: 2344, 588: 2344, 2344, 595: 2344, 2344, 2344, 2344, 2344, 2344, 2344, 603: 2344, 2344, 606: 2344, 631: 2344, 637: 2344, 640: 2344, 663: 2344, 2344, 667: 2344, 2344, 2344, 2344, 2344, 687: 2344, 2344, 693: 2344, 695: 2344, 2344, 2344, 2344, 700: 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 713: 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 2344, 770: 2344},
{2: 2343, 2343, 2343, 2343, 2343, 2343, 2343, 10: 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 64: 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 585: 2343, 588: 2343, 2343, 595: 2343, 2343, 2343, 2343, 2343, 2343, 2343, 603: 2343, 2343, 606: 2343, 631: 2343, 637: 2343, 640: 2343, 663: 2343, 2343, 667: 2343, 2343, 2343, 2343, 2343, 687: 2343, 2343, 693: 2343, 695: 2343, 2343, 2343, 2343, 700: 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 713: 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 770: 2343},
// 1220
{2: 2342, 2342, 2342, 2342, 2342, 2342, 2342, 10: 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 64: 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 585: 2342, 588: 2342, 2342, 595: 2342, 2342, 2342, 2342, 2342, 2342, 2342, 603: 2342, 2342, 606: 2342, 631: 2342, 637: 2342, 640: 2342, 663: 2342, 2342, 667: 2342, 2342, 2342, 2342, 2342, 687: 2342, 2342, 693: 2342, 695: 2342, 2342, 2342, 2342, 700: 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 713: 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 2342, 770: 2342},
{2: 2341, 2341, 2341, 2341, 2341, 2341, 2341, 10: 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 64: 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 585: 2341, 588: 2341, 2341, 595: 2341, 2341, 2341, 2341, 2341, 2341, 2341, 603: 2341, 2341, 606: 2341, 631: 2341, 637: 2341, 640: 2341, 663: 2341, 2341, 667: 2341, 2341, 2341, 2341, 2341, 687: 2341, 2341, 693: 2341, 695: 2341, 2341, 2341, 2341, 700: 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 713: 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 2341, 770: 2341},
{2: 2340, 2340, 2340, 2340, 2340, 2340, 2340, 10: 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 64: 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 585: 2340, 588: 2340, 2340, 595: 2340, 2340, 2340, 2340, 2340, 2340, 2340, 603: 2340, 2340, 606: 2340, 631: 2340, 637: 2340, 640: 2340, 663: 2340, 2340, 667: 2340, 2340, 2340, 2340, 2340, 687: 2340, 2340, 693: 2340, 695: 2340, 2340, 2340, 2340, 700: 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 713: 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 2340, 770: 2340},
{2: 2339, 2339, 2339, 2339, 2339, 2339, 2339, 10: 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 64: 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 585: 2339, 588: 2339, 2339, 595: 2339, 2339, 2339, 2339, 2339, 2339, 2339, 603: 2339, 2339, 606: 2339, 631: 2339, 637: 2339, 640: 2339, 663: 2339, 2339, 667: 2339, 2339, 2339, 2339, 2339, 687: 2339, 2339, 693: 2339, 695: 2339, 2339, 2339, 2339, 700: 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 713: 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 2339, 770: 2339},
{262: 2336, 588: 4121, 590: 4120, 601: 2336, 667: 2336, 669: 2336, 949: 4321},
// 1225
{262: 2335, 601: 2335, 667: 2335, 669: 2335},
{2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 584: 2350, 2350, 2350, 2350, 591: 2350, 593: 2350, 2350, 2350, 2350, 602: 2350, 605: 2350, 607: 2350, 2350, 2350, 2350, 2350, 2350, 2350, 615: 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 632: 2350, 634: 2350, 2350, 2350, 638: 2350, 2350, 641: 2350, 643: 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 2350, 662: 2350, 665: 2350, 2350, 674: 2350, 2350, 2350, 2350, 2350, 2350},
{583: 3150, 830: 4330},
{1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 584: 1046, 1046, 1046, 1046, 1046, 590: 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 602: 1046, 605: 1046, 607: 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 632: 1046, 1046, 1046, 1046, 1046, 638: 1046, 1046, 641: 1046, 643: 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 665: 1046, 1046, 672: 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 689: 1046, 1046, 1046, 694: 1046, 762: 1046, 772: 4328},
{2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2326, 2117, 2117, 2117, 2117, 2117, 590: 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 602: 2117, 605: 2117, 607: 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 632: 2117, 2117, 2117, 2117, 2117, 638: 2117, 2117, 641: 2117, 643: 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 665: 2117, 2117, 672: 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 689: 2117, 2117, 2117, 694: 2117, 762: 2117, 769: 2117, 773: 2117, 2117},
// 1230
{2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2325, 2116, 2116, 2116, 2116, 2116, 590: 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 602: 2116, 605: 2116, 607: 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 632: 2116, 2116, 2116, 2116, 2116, 638: 2116, 2116, 641: 2116, 643: 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 665: 2116, 2116, 672: 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 689: 2116, 2116, 2116, 694: 2116, 762: 2116, 769: 2116, 773: 2116, 2116},
{583: 2324},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4329},
{2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 584: 2348, 2348, 2348, 2348, 591: 2348, 593: 2348, 2348, 2348, 2348, 602: 2348, 605: 2348, 607: 2348, 2348, 2348, 2348, 2348, 2348, 2348, 615: 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 632: 2348, 634: 2348, 2348, 2348, 638: 2348, 2348, 641: 2348, 643: 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 662: 2348, 665: 2348, 2348, 674: 2348, 2348, 2348, 2348, 2348, 2348},
{2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 584: 2349, 2349, 2349, 2349, 591: 2349, 593: 2349, 2349, 2349, 2349, 602: 2349, 605: 2349, 607: 2349, 2349, 2349, 2349, 2349, 2349, 2349, 615: 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 632: 2349, 634: 2349, 2349, 2349, 638: 2349, 2349, 641: 2349, 643: 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 662: 2349, 665: 2349, 2349, 674: 2349, 2349, 2349, 2349, 2349, 2349},
// 1235
{2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 584: 2379, 2379, 2379, 2379, 591: 2379, 593: 2379, 2379, 2379, 2379, 602: 2379, 607: 2379, 2379, 2379, 2379, 2379, 2379, 2379, 615: 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 632: 2379, 634: 2379, 2379, 2379, 638: 2379, 2379, 641: 2379, 643: 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 2379, 662: 2379},
{2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 584: 2378, 2378, 2378, 2378, 591: 2378, 593: 2378, 2378, 2378, 2378, 602: 2378, 607: 2378, 2378, 2378, 2378, 2378, 2378, 2378, 615: 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 632: 2378, 634: 2378, 2378, 2378, 638: 2378, 2378, 641: 2378, 643: 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 662: 2378},
{2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 584: 2377, 2377, 2377, 2377, 591: 2377, 593: 2377, 2377, 2377, 2377, 602: 2377, 607: 2377, 2377, 2377, 2377, 2377, 2377, 2377, 615: 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 632: 2377, 634: 2377, 2377, 2377, 638: 2377, 2377, 641: 2377, 643: 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377, 662: 2377},
{2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 584: 2351, 2351, 2351, 2351, 591: 2351, 593: 2351, 2351, 2351, 2351, 602: 2351, 605: 2351, 607: 2351, 2351, 2351, 2351, 2351, 2351, 2351, 615: 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 632: 2351, 634: 2351, 2351, 2351, 638: 2351, 2351, 641: 2351, 643: 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 2351, 662: 2351, 665: 2351, 2351, 674: 2351, 2351, 2351, 2351, 2351, 2351},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4336, 3292, 3293, 3291, 876: 4337, 959: 4338},
// 1240
{2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 587: 2820, 605: 2820, 2820, 611: 2820, 2820, 632: 2820, 637: 2820, 646: 2820, 660: 2820, 763: 2820, 769: 4359, 772: 2820, 782: 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 793: 2820, 795: 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820, 2820},
{9: 2817, 63: 2817},
{9: 4339, 63: 4340},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4336, 3292, 3293, 3291, 876: 4358},
{409: 4341},
// 1245
{583: 4342},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4343},
{63: 2371, 586: 4346, 597: 4091, 4092, 4097, 614: 4093, 661: 4345, 672: 4094, 680: 4095, 4088, 4098, 4087, 4096, 4089, 4090, 1450: 4344},
{63: 4357},
{199: 4350, 634: 4349},
// 1250
{196: 4347},
{345: 4348},
{63: 2367},
{446: 4352},
{301: 4351},
// 1255
{63: 2368},
{301: 4353},
{63: 2370, 586: 4354},
{196: 4355},
{345: 4356},
// 1260
{63: 2369},
{2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 584: 2380, 2380, 2380, 2380, 591: 2380, 593: 2380, 2380, 2380, 2380, 602: 2380, 607: 2380, 2380, 2380, 2380, 2380, 2380, 2380, 615: 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 632: 2380, 634: 2380, 2380, 2380, 638: 2380, 2380, 641: 2380, 643: 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 2380, 662: 2380},
{9: 2816, 63: 2816},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4360, 3292, 3293, 3291},
{2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 587: 2819, 605: 2819, 2819, 611: 2819, 2819, 632: 2819, 637: 2819, 646: 2819, 660: 2819, 763: 2819, 769: 4361, 772: 2819, 782: 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 793: 2819, 795: 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819, 2819},
// 1265
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4362, 3292, 3293, 3291},
{2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 587: 2818, 605: 2818, 2818, 611: 2818, 2818, 632: 2818, 637: 2818, 646: 2818, 660: 2818, 763: 2818, 772: 2818, 782: 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 793: 2818, 795: 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818, 2818},
{2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 584: 2381, 2381, 2381, 2381, 591: 2381, 593: 2381, 2381, 2381, 2381, 602: 2381, 607: 2381, 2381, 2381, 2381, 2381, 2381, 2381, 615: 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 632: 2381, 634: 2381, 2381, 2381, 638: 2381, 2381, 641: 2381, 643: 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 2381, 662: 2381, 856: 4050, 4048},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 3963, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4365, 3944, 4026, 3943, 3940},
{63: 4366, 592: 4039, 762: 4040},
// 1270
{232: 1237, 602: 1237, 617: 4368, 875: 1237, 1487: 4367},
{232: 4372, 602: 4373, 875: 1240, 1068: 4371},
{11: 4369, 273: 4370},
{232: 1236, 602: 1236, 875: 1236},
{232: 1235, 602: 1235, 875: 1235},
// 1275
{875: 4376, 888: 4377},
{367: 4375},
{367: 4374},
{875: 1238},
{875: 1239},
// 1280
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 4379, 826: 4378, 3292, 3293, 3291, 1111: 4381, 1388: 4382, 1602: 4380},
{1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 584: 1246, 1246, 1246, 1246, 1246, 590: 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 602: 1246, 605: 1246, 607: 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 632: 1246, 1246, 1246, 1246, 1246, 638: 1246, 1246, 641: 1246, 643: 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 665: 1246, 1246, 672: 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 689: 1246, 1246, 1246, 694: 1246, 757: 1246, 762: 1246},
{1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 584: 1288, 1288, 1288, 1288, 1288, 590: 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 602: 1288, 605: 1288, 607: 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 632: 1288, 1288, 1288, 1288, 1288, 638: 1288, 1288, 641: 1288, 643: 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 665: 1288, 1288, 672: 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 1288, 689: 1288, 1288, 1288, 694: 1288, 757: 1288, 762: 1288},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 1285, 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 587: 1285, 619: 1285, 641: 1285, 645: 1285, 648: 1285, 826: 4378, 3292, 3293, 3291, 1111: 4385, 1486: 4384, 1603: 4383},
{1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 584: 1259, 1259, 1259, 1259, 1259, 590: 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 602: 1259, 605: 1259, 607: 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 632: 1259, 1259, 1259, 1259, 1259, 638: 1259, 1259, 641: 1259, 643: 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 665: 1259, 1259, 672: 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 689: 1259, 1259, 1259, 694: 1259, 757: 1259, 762: 1259},
// 1285
{1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 584: 1258, 1258, 1258, 1258, 1258, 590: 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 602: 1258, 605: 1258, 607: 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 632: 1258, 1258, 1258, 1258, 1258, 638: 1258, 1258, 641: 1258, 643: 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 665: 1258, 1258, 672: 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 689: 1258, 1258, 1258, 694: 1258, 757: 1258, 762: 1258},
{1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 584: 1257, 1257, 1257, 1257, 1257, 590: 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 602: 1257, 605: 1257, 607: 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 632: 1257, 1257, 1257, 1257, 1257, 638: 1257, 1257, 641: 1257, 643: 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 665: 1257, 1257, 672: 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 689: 1257, 1257, 1257, 694: 1257, 757: 1257, 762: 1257},
{63: 4432},
{63: 1283, 587: 4387, 619: 1283, 641: 1283, 645: 1283, 648: 1283, 1490: 4386},
{63: 1284, 587: 1284, 619: 1284, 641: 1284, 645: 1284, 648: 1284},
// 1290
{63: 1281, 619: 4391, 641: 1281, 645: 1281, 648: 1281, 1495: 4390},
{776: 4388},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4190, 1047: 4192, 1085: 4389},
{9: 4193, 63: 1282, 619: 1282, 641: 1282, 645: 1282, 648: 1282},
{63: 1279, 641: 4396, 645: 4397, 648: 4398, 1494: 4394, 1601: 4395},
// 1295
{776: 4392},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4190, 1047: 4192, 1085: 4393},
{9: 4193, 63: 1280, 641: 1280, 645: 1280, 648: 1280},
{63: 1286},
{228: 4409, 246: 4405, 604: 4399, 670: 4401, 4400, 673: 4410, 696: 4408, 4407, 962: 4406, 1174: 4403, 1599: 4404, 4402},
// 1300
{228: 1277, 246: 1277, 604: 1277, 670: 1277, 1277, 673: 1277, 696: 1277, 1277},
{228: 1276, 246: 1276, 604: 1276, 670: 1276, 1276, 673: 1276, 696: 1276, 1276},
{228: 1275, 246: 1275, 604: 1275, 670: 1275, 1275, 673: 1275, 696: 1275, 1275},
{2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 17: 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 63: 2693, 161: 2693, 186: 2693, 2693, 207: 2693, 237: 2693, 583: 2693, 2693, 586: 2693, 2693, 2693, 2693, 2693, 2693, 2693, 2693, 600: 2693, 2693, 2693, 2693, 606: 2693, 618: 2693, 642: 2693, 692: 2693, 699: 2693, 712: 2693, 756: 2693, 758: 2693, 2693, 2693, 2693, 763: 2693, 2693},
{2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 17: 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 63: 2692, 161: 2692, 186: 2692, 2692, 207: 2692, 237: 2692, 275: 2692, 281: 2692, 583: 2692, 2692, 586: 2692, 2692, 2692, 2692, 2692, 2692, 2692, 2692, 600: 2692, 2692, 2692, 2692, 606: 2692, 618: 2692, 642: 2692, 692: 2692, 699: 2692, 712: 2692, 756: 2692, 758: 2692, 2692, 2692, 2692, 763: 2692, 2692},
// 1305
{2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 17: 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 63: 2691, 161: 2691, 186: 2691, 2691, 207: 2691, 237: 2691, 275: 2691, 281: 2691, 583: 2691, 2691, 586: 2691, 2691, 2691, 2691, 2691, 2691, 2691, 2691, 600: 2691, 2691, 2691, 2691, 606: 2691, 618: 2691, 642: 2691, 692: 2691, 699: 2691, 712: 2691, 756: 2691, 758: 2691, 2691, 2691, 2691, 763: 2691, 2691},
{63: 1278},
{63: 1274},
{63: 1273},
{207: 4427},
// 1310
{207: 4425},
{207: 4423},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4430},
{695: 4429},
{228: 4409, 246: 4411, 604: 4399, 670: 4401, 4400, 696: 4414, 4413, 962: 4412, 1174: 4416, 1387: 4415},
// 1315
{207: 4427, 237: 4428},
{207: 4425, 237: 4426},
{207: 4423, 237: 4424},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4419},
{620: 4417},
// 1320
{63: 1266, 620: 1266},
{228: 4409, 246: 4411, 604: 4399, 670: 4401, 4400, 696: 4414, 4413, 962: 4412, 1174: 4416, 1387: 4418},
{63: 1267},
{133: 4076, 139: 4084, 163: 4072, 165: 4069, 4071, 4068, 4070, 4074, 4075, 4080, 4079, 4078, 4082, 4083, 4077, 4081, 4073, 620: 4054, 4052, 4053, 4051, 4049, 649: 4066, 4063, 4065, 4064, 4060, 4062, 4061, 4058, 4059, 4057, 4067, 856: 4050, 4048, 944: 4056, 957: 4420},
{207: 4421, 237: 4422},
// 1325
{63: 1269, 620: 1269},
{63: 1262, 620: 1262},
{63: 1270, 620: 1270},
{63: 1263, 620: 1263},
{63: 1271, 620: 1271},
// 1330
{63: 1264, 620: 1264},
{63: 1272, 620: 1272},
{63: 1265, 620: 1265},
{63: 1268, 620: 1268},
{133: 4076, 139: 4084, 163: 4072, 165: 4069, 4071, 4068, 4070, 4074, 4075, 4080, 4079, 4078, 4082, 4083, 4077, 4081, 4073, 620: 4054, 4052, 4053, 4051, 4049, 649: 4066, 4063, 4065, 4064, 4060, 4062, 4061, 4058, 4059, 4057, 4067, 856: 4050, 4048, 944: 4056, 957: 4431},
// 1335
{207: 4421},
{1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 584: 1287, 1287, 1287, 1287, 1287, 590: 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 602: 1287, 605: 1287, 607: 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 632: 1287, 1287, 1287, 1287, 1287, 638: 1287, 1287, 641: 1287, 643: 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 665: 1287, 1287, 672: 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 689: 1287, 1287, 1287, 694: 1287, 757: 1287, 762: 1287},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4434},
{2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 584: 2385, 2385, 2385, 2385, 591: 2385, 593: 2385, 2385, 2385, 2385, 602: 2385, 607: 2385, 2385, 2385, 2385, 2385, 2385, 2385, 615: 2385, 2385, 2385, 2385, 2385, 4054, 4052, 4053, 4051, 4049, 2385, 2385, 2385, 2385, 2385, 2385, 632: 2385, 634: 2385, 2385, 2385, 638: 2385, 2385, 641: 2385, 643: 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385, 662: 2385, 856: 4050, 4048},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4436},
// 1340
{63: 4437, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{232: 4372, 602: 4373, 875: 1240, 1068: 4438},
{875: 4376, 888: 4439},
{1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 584: 1247, 1247, 1247, 1247, 1247, 590: 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 602: 1247, 605: 1247, 607: 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 632: 1247, 1247, 1247, 1247, 1247, 638: 1247, 1247, 641: 1247, 643: 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 665: 1247, 1247, 672: 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 689: 1247, 1247, 1247, 694: 1247, 757: 1247, 762: 1247},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4441},
// 1345
{63: 4442, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{232: 4372, 602: 4373, 875: 1240, 1068: 4443},
{875: 4376, 888: 4444},
{1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 584: 1248, 1248, 1248, 1248, 1248, 590: 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 602: 1248, 605: 1248, 607: 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 632: 1248, 1248, 1248, 1248, 1248, 638: 1248, 1248, 641: 1248, 643: 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 665: 1248, 1248, 672: 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 689: 1248, 1248, 1248, 694: 1248, 757: 1248, 762: 1248},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4446},
// 1350
{9: 4448, 63: 1245, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048, 1301: 4447},
{63: 4455},
{604: 4399, 670: 4401, 4400, 697: 4450, 962: 4449},
{9: 4452, 63: 1242, 1302: 4454},
{9: 4452, 63: 1242, 1302: 4451},
// 1355
{63: 1243},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4453},
{63: 1241, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{63: 1244},
{232: 4372, 602: 4373, 875: 1240, 1068: 4456},
// 1360
{875: 4376, 888: 4457},
{1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 584: 1249, 1249, 1249, 1249, 1249, 590: 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 602: 1249, 605: 1249, 607: 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 632: 1249, 1249, 1249, 1249, 1249, 638: 1249, 1249, 641: 1249, 643: 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 665: 1249, 1249, 672: 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 689: 1249, 1249, 1249, 694: 1249, 757: 1249, 762: 1249},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4459},
{9: 4448, 63: 1245, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048, 1301: 4460},
{63: 4461},
// 1365
{232: 4372, 602: 4373, 875: 1240, 1068: 4462},
{875: 4376, 888: 4463},
{1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 584: 1250, 1250, 1250, 1250, 1250, 590: 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 602: 1250, 605: 1250, 607: 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 632: 1250, 1250, 1250, 1250, 1250, 638: 1250, 1250, 641: 1250, 643: 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 665: 1250, 1250, 672: 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 689: 1250, 1250, 1250, 694: 1250, 757: 1250, 762: 1250},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 3963, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4465, 3944, 4026, 3943, 3940},
{63: 4466, 592: 4039, 762: 4040},
// 1370
{875: 4376, 888: 4467},
{1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 584: 1251, 1251, 1251, 1251, 1251, 590: 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 602: 1251, 605: 1251, 607: 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 632: 1251, 1251, 1251, 1251, 1251, 638: 1251, 1251, 641: 1251, 643: 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 665: 1251, 1251, 672: 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 689: 1251, 1251, 1251, 694: 1251, 757: 1251, 762: 1251},
{63: 4469},
{875: 4376, 888: 4470},
{1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 584: 1252, 1252, 1252, 1252, 1252, 590: 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 602: 1252, 605: 1252, 607: 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 632: 1252, 1252, 1252, 1252, 1252, 638: 1252, 1252, 641: 1252, 643: 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 665: 1252, 1252, 672: 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 689: 1252, 1252, 1252, 694: 1252, 757: 1252, 762: 1252},
// 1375
{63: 4472},
{875: 4376, 888: 4473},
{1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 584: 1253, 1253, 1253, 1253, 1253, 590: 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 602: 1253, 605: 1253, 607: 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 632: 1253, 1253, 1253, 1253, 1253, 638: 1253, 1253, 641: 1253, 643: 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 665: 1253, 1253, 672: 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 689: 1253, 1253, 1253, 694: 1253, 757: 1253, 762: 1253},
{63: 4475},
{875: 4376, 888: 4476},
// 1380
{1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 584: 1254, 1254, 1254, 1254, 1254, 590: 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 602: 1254, 605: 1254, 607: 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 632: 1254, 1254, 1254, 1254, 1254, 638: 1254, 1254, 641: 1254, 643: 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 665: 1254, 1254, 672: 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 689: 1254, 1254, 1254, 694: 1254, 757: 1254, 762: 1254},
{63: 4478},
{875: 4376, 888: 4479},
{1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 584: 1255, 1255, 1255, 1255, 1255, 590: 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 602: 1255, 605: 1255, 607: 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 632: 1255, 1255, 1255, 1255, 1255, 638: 1255, 1255, 641: 1255, 643: 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 665: 1255, 1255, 672: 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 689: 1255, 1255, 1255, 694: 1255, 757: 1255, 762: 1255},
{63: 4481},
// 1385
{875: 4376, 888: 4482},
{1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 584: 1256, 1256, 1256, 1256, 1256, 590: 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 602: 1256, 605: 1256, 607: 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 632: 1256, 1256, 1256, 1256, 1256, 638: 1256, 1256, 641: 1256, 643: 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 665: 1256, 1256, 672: 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 689: 1256, 1256, 1256, 694: 1256, 757: 1256, 762: 1256},
{2: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 10: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 64: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 585: 1548, 588: 1548, 1548, 1548, 595: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 603: 1548, 1548, 606: 1548, 631: 1548, 637: 1548, 640: 1548, 663: 1548, 1548, 667: 1548, 1548, 1548, 1548, 1548, 687: 1548, 1548, 693: 1548, 695: 1548, 1548, 1548, 1548, 700: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 713: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 765: 1548, 770: 4486, 884: 4484, 4485, 943: 4487, 945: 4488, 974: 4490, 976: 4489},
{2: 1552, 1552, 1552, 1552, 1552, 1552, 1552, 10: 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 64: 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 585: 1552, 588: 1552, 1552, 1552, 595: 1552, 1552, 1552, 1552, 1552, 1552, 1552, 603: 1552, 1552, 606: 1552, 614: 1552, 627: 1552, 631: 1552, 637: 1552, 640: 1552, 642: 1552, 663: 1552, 1552, 667: 1552, 1552, 1552, 1552, 1552, 687: 1552, 1552, 692: 1552, 1552, 695: 1552, 1552, 1552, 1552, 700: 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 713: 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552, 765: 1552, 770: 1552, 884: 1552, 1552, 887: 1552, 889: 1552, 891: 1552, 895: 1552, 904: 1552, 1552, 1552},
{2: 1551, 1551, 1551, 1551, 1551, 1551, 1551, 10: 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 64: 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 585: 1551, 588: 1551, 1551, 1551, 595: 1551, 1551, 1551, 1551, 1551, 1551, 1551, 603: 1551, 1551, 606: 1551, 614: 1551, 627: 1551, 631: 1551, 637: 1551, 640: 1551, 642: 1551, 663: 1551, 1551, 667: 1551, 1551, 1551, 1551, 1551, 687: 1551, 1551, 692: 1551, 1551, 695: 1551, 1551, 1551, 1551, 700: 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 713: 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 1551, 765: 1551, 770: 1551, 884: 1551, 1551, 887: 1551, 889: 1551, 891: 1551, 895: 1551, 904: 1551, 1551, 1551},
// 1390
{2: 1550, 1550, 1550, 1550, 1550, 1550, 1550, 10: 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 64: 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 585: 1550, 588: 1550, 1550, 1550, 595: 1550, 1550, 1550, 1550, 1550, 1550, 1550, 603: 1550, 1550, 606: 1550, 614: 1550, 627: 1550, 631: 1550, 637: 1550, 640: 1550, 642: 1550, 663: 1550, 1550, 667: 1550, 1550, 1550, 1550, 1550, 687: 1550, 1550, 692: 1550, 1550, 695: 1550, 1550, 1550, 1550, 700: 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 713: 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 765: 1550, 770: 1550, 884: 1550, 1550, 887: 1550, 889: 1550, 891: 1550, 895: 1550, 904: 1550, 1550, 1550},
{2: 1549, 1549, 1549, 1549, 1549, 1549, 1549, 10: 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 64: 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 585: 1549, 588: 1549, 1549, 1549, 595: 1549, 1549, 1549, 1549, 1549, 1549, 1549, 603: 1549, 1549, 606: 1549, 631: 1549, 637: 1549, 640: 1549, 663: 1549, 1549, 667: 1549, 1549, 1549, 1549, 1549, 687: 1549, 1549, 693: 1549, 695: 1549, 1549, 1549, 1549, 700: 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 713: 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 765: 1549, 770: 4495},
{2: 1547, 1547, 1547, 1547, 1547, 1547, 1547, 10: 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 64: 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 585: 1547, 588: 1547, 1547, 1547, 595: 1547, 1547, 1547, 1547, 1547, 1547, 1547, 603: 1547, 1547, 606: 1547, 631: 1547, 637: 1547, 640: 1547, 663: 1547, 1547, 667: 1547, 1547, 1547, 1547, 1547, 687: 1547, 1547, 693: 1547, 695: 1547, 1547, 1547, 1547, 700: 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 713: 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 765: 1547},
{2: 1544, 1544, 1544, 1544, 1544, 1544, 1544, 10: 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 64: 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 585: 1544, 588: 1544, 1544, 1544, 595: 1544, 1544, 1544, 1544, 1544, 1544, 1544, 603: 1544, 1544, 606: 1544, 631: 1544, 637: 1544, 640: 1544, 663: 1544, 1544, 667: 1544, 1544, 1544, 1544, 1544, 687: 1544, 1544, 693: 1544, 695: 1544, 1544, 1544, 1544, 700: 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 713: 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 765: 1544},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4491},
// 1395
{63: 4492, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 584: 1261, 1261, 1261, 1261, 1261, 590: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 602: 1261, 605: 1261, 607: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 632: 1261, 1261, 1261, 1261, 1261, 638: 1261, 1261, 641: 1261, 643: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 665: 1261, 1261, 672: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 689: 1261, 1261, 1261, 694: 1261, 757: 1261, 762: 1261, 875: 4376, 888: 4494, 899: 4493},
{1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 584: 1427, 1427, 1427, 1427, 1427, 590: 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 602: 1427, 605: 1427, 607: 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 632: 1427, 1427, 1427, 1427, 1427, 638: 1427, 1427, 641: 1427, 643: 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 665: 1427, 1427, 672: 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 689: 1427, 1427, 1427, 694: 1427, 757: 1427, 762: 1427},
{1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 584: 1260, 1260, 1260, 1260, 1260, 590: 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 602: 1260, 605: 1260, 607: 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 632: 1260, 1260, 1260, 1260, 1260, 638: 1260, 1260, 641: 1260, 643: 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 665: 1260, 1260, 672: 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 689: 1260, 1260, 1260, 694: 1260, 757: 1260, 762: 1260},
{2: 1543, 1543, 1543, 1543, 1543, 1543, 1543, 10: 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 64: 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 585: 1543, 588: 1543, 1543, 1543, 595: 1543, 1543, 1543, 1543, 1543, 1543, 1543, 603: 1543, 1543, 606: 1543, 631: 1543, 637: 1543, 640: 1543, 663: 1543, 1543, 667: 1543, 1543, 1543, 1543, 1543, 687: 1543, 1543, 693: 1543, 695: 1543, 1543, 1543, 1543, 700: 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 713: 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 765: 1543},
// 1400
{2: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 10: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 64: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 585: 1548, 588: 1548, 1548, 1548, 595: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 603: 1548, 1548, 606: 1548, 631: 1548, 637: 1548, 640: 1548, 663: 1548, 1548, 667: 1548, 1548, 1548, 1548, 1548, 687: 1548, 1548, 693: 1548, 695: 1548, 1548, 1548, 1548, 700: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 713: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 765: 1548, 770: 4486, 884: 4484, 4485, 943: 4487, 945: 4488, 974: 4497, 976: 4489},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4498},
{63: 4499, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 584: 1261, 1261, 1261, 1261, 1261, 590: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 602: 1261, 605: 1261, 607: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 632: 1261, 1261, 1261, 1261, 1261, 638: 1261, 1261, 641: 1261, 643: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 665: 1261, 1261, 672: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 689: 1261, 1261, 1261, 694: 1261, 757: 1261, 762: 1261, 875: 4376, 888: 4494, 899: 4500},
{1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 584: 1428, 1428, 1428, 1428, 1428, 590: 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 602: 1428, 605: 1428, 607: 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 632: 1428, 1428, 1428, 1428, 1428, 638: 1428, 1428, 641: 1428, 643: 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 665: 1428, 1428, 672: 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 689: 1428, 1428, 1428, 694: 1428, 757: 1428, 762: 1428},
// 1405
{2: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 10: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 64: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 585: 1548, 588: 1548, 1548, 1548, 595: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 603: 1548, 1548, 606: 1548, 631: 1548, 637: 1548, 640: 1548, 663: 1548, 1548, 667: 1548, 1548, 1548, 1548, 1548, 687: 1548, 1548, 693: 1548, 695: 1548, 1548, 1548, 1548, 700: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 713: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 765: 1548, 770: 4486, 884: 4484, 4485, 943: 4487, 945: 4488, 974: 4502, 976: 4489},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4503},
{63: 4504, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 584: 1261, 1261, 1261, 1261, 1261, 590: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 602: 1261, 605: 1261, 607: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 632: 1261, 1261, 1261, 1261, 1261, 638: 1261, 1261, 641: 1261, 643: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 665: 1261, 1261, 672: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 689: 1261, 1261, 1261, 694: 1261, 757: 1261, 762: 1261, 875: 4376, 888: 4494, 899: 4505},
{1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 584: 1429, 1429, 1429, 1429, 1429, 590: 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 602: 1429, 605: 1429, 607: 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 632: 1429, 1429, 1429, 1429, 1429, 638: 1429, 1429, 641: 1429, 643: 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 665: 1429, 1429, 672: 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 1429, 689: 1429, 1429, 1429, 694: 1429, 757: 1429, 762: 1429},
// 1410
{2: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 10: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 64: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 585: 1548, 588: 1548, 1548, 1548, 595: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 603: 1548, 1548, 606: 1548, 631: 1548, 637: 1548, 640: 1548, 663: 1548, 1548, 667: 1548, 1548, 1548, 1548, 1548, 687: 1548, 1548, 693: 1548, 695: 1548, 1548, 1548, 1548, 700: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 713: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 765: 1548, 770: 4486, 884: 4484, 4485, 943: 4487, 945: 4488, 974: 4507, 976: 4489},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4508},
{63: 4509, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 584: 1261, 1261, 1261, 1261, 1261, 590: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 602: 1261, 605: 1261, 607: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 632: 1261, 1261, 1261, 1261, 1261, 638: 1261, 1261, 641: 1261, 643: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 665: 1261, 1261, 672: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 689: 1261, 1261, 1261, 694: 1261, 757: 1261, 762: 1261, 875: 4376, 888: 4494, 899: 4510},
{1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 584: 1430, 1430, 1430, 1430, 1430, 590: 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 602: 1430, 605: 1430, 607: 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 632: 1430, 1430, 1430, 1430, 1430, 638: 1430, 1430, 641: 1430, 643: 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 665: 1430, 1430, 672: 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 689: 1430, 1430, 1430, 694: 1430, 757: 1430, 762: 1430},
// 1415
{2: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 10: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 64: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 585: 1548, 588: 1548, 1548, 1548, 595: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 603: 1548, 1548, 606: 1548, 631: 1548, 637: 1548, 640: 1548, 663: 1548, 1548, 667: 1548, 1548, 1548, 1548, 1548, 687: 1548, 1548, 693: 1548, 695: 1548, 1548, 1548, 1548, 700: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 713: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 765: 1548, 770: 4486, 884: 4484, 4485, 943: 4487, 945: 4488, 974: 4512, 976: 4489},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4513},
{63: 4514, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 584: 1261, 1261, 1261, 1261, 1261, 590: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 602: 1261, 605: 1261, 607: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 632: 1261, 1261, 1261, 1261, 1261, 638: 1261, 1261, 641: 1261, 643: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 665: 1261, 1261, 672: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 689: 1261, 1261, 1261, 694: 1261, 757: 1261, 762: 1261, 875: 4376, 888: 4494, 899: 4515},
{1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 584: 1431, 1431, 1431, 1431, 1431, 590: 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 602: 1431, 605: 1431, 607: 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 632: 1431, 1431, 1431, 1431, 1431, 638: 1431, 1431, 641: 1431, 643: 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 665: 1431, 1431, 672: 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 689: 1431, 1431, 1431, 694: 1431, 757: 1431, 762: 1431},
// 1420
{2: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 10: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 64: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 585: 1548, 588: 1548, 1548, 1548, 595: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 603: 1548, 1548, 606: 1548, 631: 1548, 637: 1548, 640: 1548, 663: 1548, 1548, 667: 1548, 1548, 1548, 1548, 1548, 687: 1548, 1548, 693: 1548, 695: 1548, 1548, 1548, 1548, 700: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 713: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 765: 1548, 770: 4486, 884: 4484, 4485, 943: 4487, 945: 4488, 974: 4517, 976: 4489},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4518},
{63: 4519, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 584: 1261, 1261, 1261, 1261, 1261, 590: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 602: 1261, 605: 1261, 607: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 632: 1261, 1261, 1261, 1261, 1261, 638: 1261, 1261, 641: 1261, 643: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 665: 1261, 1261, 672: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 689: 1261, 1261, 1261, 694: 1261, 757: 1261, 762: 1261, 875: 4376, 888: 4494, 899: 4520},
{1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 584: 1432, 1432, 1432, 1432, 1432, 590: 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 602: 1432, 605: 1432, 607: 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 632: 1432, 1432, 1432, 1432, 1432, 638: 1432, 1432, 641: 1432, 643: 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 665: 1432, 1432, 672: 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 689: 1432, 1432, 1432, 694: 1432, 757: 1432, 762: 1432},
// 1425
{2: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 10: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 64: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 585: 1548, 588: 1548, 1548, 1548, 595: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 603: 1548, 1548, 606: 1548, 631: 1548, 637: 1548, 640: 1548, 663: 1548, 1548, 667: 1548, 1548, 1548, 1548, 1548, 687: 1548, 1548, 693: 1548, 695: 1548, 1548, 1548, 1548, 700: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 713: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 765: 1548, 770: 4486, 884: 4484, 4485, 943: 4487, 945: 4488, 974: 4522, 976: 4489},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4523},
{63: 4524, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 584: 1261, 1261, 1261, 1261, 1261, 590: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 602: 1261, 605: 1261, 607: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 632: 1261, 1261, 1261, 1261, 1261, 638: 1261, 1261, 641: 1261, 643: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 665: 1261, 1261, 672: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 689: 1261, 1261, 1261, 694: 1261, 757: 1261, 762: 1261, 875: 4376, 888: 4494, 899: 4525},
{1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 584: 1433, 1433, 1433, 1433, 1433, 590: 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 602: 1433, 605: 1433, 607: 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 632: 1433, 1433, 1433, 1433, 1433, 638: 1433, 1433, 641: 1433, 643: 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 665: 1433, 1433, 672: 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 689: 1433, 1433, 1433, 694: 1433, 757: 1433, 762: 1433},
// 1430
{2: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 10: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 64: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 585: 1548, 588: 1548, 1548, 1548, 595: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 603: 1548, 1548, 606: 1548, 631: 1548, 637: 1548, 640: 1548, 663: 1548, 1548, 667: 1548, 1548, 1548, 1548, 1548, 687: 1548, 1548, 693: 1548, 695: 1548, 1548, 1548, 1548, 700: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 713: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 765: 1548, 770: 4486, 884: 4484, 4485, 943: 4487, 945: 4488, 974: 4527, 976: 4489},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4151, 909: 4528},
{9: 4302, 63: 1607, 197: 1607, 619: 4166, 897: 4220, 971: 4529},
{63: 1420, 197: 4531, 1488: 4530},
{63: 4533},
// 1435
{585: 4532},
{63: 1419},
{1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 584: 1261, 1261, 1261, 1261, 1261, 590: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 602: 1261, 605: 1261, 607: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 632: 1261, 1261, 1261, 1261, 1261, 638: 1261, 1261, 641: 1261, 643: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 665: 1261, 1261, 672: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 689: 1261, 1261, 1261, 694: 1261, 757: 1261, 762: 1261, 875: 4376, 888: 4494, 899: 4534},
{1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 584: 1434, 1434, 1434, 1434, 1434, 590: 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 602: 1434, 605: 1434, 607: 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 632: 1434, 1434, 1434, 1434, 1434, 638: 1434, 1434, 641: 1434, 643: 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 665: 1434, 1434, 672: 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 689: 1434, 1434, 1434, 694: 1434, 757: 1434, 762: 1434},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 614: 4539, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 770: 4538, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4536, 884: 4484, 4485, 943: 4537},
// 1440
{63: 4547, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4151, 909: 4545},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4542},
{63: 4540},
{1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 584: 1261, 1261, 1261, 1261, 1261, 590: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 602: 1261, 605: 1261, 607: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 632: 1261, 1261, 1261, 1261, 1261, 638: 1261, 1261, 641: 1261, 643: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 665: 1261, 1261, 672: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 689: 1261, 1261, 1261, 694: 1261, 757: 1261, 762: 1261, 875: 4376, 888: 4494, 899: 4541},
// 1445
{1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 584: 1435, 1435, 1435, 1435, 1435, 590: 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 602: 1435, 605: 1435, 607: 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 632: 1435, 1435, 1435, 1435, 1435, 638: 1435, 1435, 641: 1435, 643: 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 665: 1435, 1435, 672: 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 689: 1435, 1435, 1435, 694: 1435, 757: 1435, 762: 1435},
{63: 4543, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 584: 1261, 1261, 1261, 1261, 1261, 590: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 602: 1261, 605: 1261, 607: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 632: 1261, 1261, 1261, 1261, 1261, 638: 1261, 1261, 641: 1261, 643: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 665: 1261, 1261, 672: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 689: 1261, 1261, 1261, 694: 1261, 757: 1261, 762: 1261, 875: 4376, 888: 4494, 899: 4544},
{1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 584: 1437, 1437, 1437, 1437, 1437, 590: 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 602: 1437, 605: 1437, 607: 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 632: 1437, 1437, 1437, 1437, 1437, 638: 1437, 1437, 641: 1437, 643: 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 665: 1437, 1437, 672: 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 689: 1437, 1437, 1437, 694: 1437, 757: 1437, 762: 1437},
{9: 4302, 63: 4546},
// 1450
{1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 584: 1438, 1438, 1438, 1438, 1438, 590: 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 602: 1438, 605: 1438, 607: 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 632: 1438, 1438, 1438, 1438, 1438, 638: 1438, 1438, 641: 1438, 643: 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 665: 1438, 1438, 672: 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 689: 1438, 1438, 1438, 694: 1438, 757: 1438, 762: 1438},
{1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 584: 1261, 1261, 1261, 1261, 1261, 590: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 602: 1261, 605: 1261, 607: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 632: 1261, 1261, 1261, 1261, 1261, 638: 1261, 1261, 641: 1261, 643: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 665: 1261, 1261, 672: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 689: 1261, 1261, 1261, 694: 1261, 757: 1261, 762: 1261, 875: 4376, 888: 4494, 899: 4548},
{1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 584: 1436, 1436, 1436, 1436, 1436, 590: 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 602: 1436, 605: 1436, 607: 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 632: 1436, 1436, 1436, 1436, 1436, 638: 1436, 1436, 641: 1436, 643: 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 665: 1436, 1436, 672: 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 689: 1436, 1436, 1436, 694: 1436, 757: 1436, 762: 1436},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 770: 4551, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4550},
{63: 4555, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
// 1455
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4552},
{63: 4553, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 584: 1261, 1261, 1261, 1261, 1261, 590: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 602: 1261, 605: 1261, 607: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 632: 1261, 1261, 1261, 1261, 1261, 638: 1261, 1261, 641: 1261, 643: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 665: 1261, 1261, 672: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 689: 1261, 1261, 1261, 694: 1261, 757: 1261, 762: 1261, 875: 4376, 888: 4494, 899: 4554},
{1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 584: 1439, 1439, 1439, 1439, 1439, 590: 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 602: 1439, 605: 1439, 607: 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 632: 1439, 1439, 1439, 1439, 1439, 638: 1439, 1439, 641: 1439, 643: 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 665: 1439, 1439, 672: 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 1439, 689: 1439, 1439, 1439, 694: 1439, 757: 1439, 762: 1439},
{1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 584: 1261, 1261, 1261, 1261, 1261, 590: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 602: 1261, 605: 1261, 607: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 632: 1261, 1261, 1261, 1261, 1261, 638: 1261, 1261, 641: 1261, 643: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 665: 1261, 1261, 672: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 689: 1261, 1261, 1261, 694: 1261, 757: 1261, 762: 1261, 875: 4376, 888: 4494, 899: 4556},
// 1460
{1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 584: 1440, 1440, 1440, 1440, 1440, 590: 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 602: 1440, 605: 1440, 607: 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 632: 1440, 1440, 1440, 1440, 1440, 638: 1440, 1440, 641: 1440, 643: 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 665: 1440, 1440, 672: 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 689: 1440, 1440, 1440, 694: 1440, 757: 1440, 762: 1440},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 770: 4559, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4558},
{63: 4563, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4560},
{63: 4561, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
// 1465
{1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 584: 1261, 1261, 1261, 1261, 1261, 590: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 602: 1261, 605: 1261, 607: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 632: 1261, 1261, 1261, 1261, 1261, 638: 1261, 1261, 641: 1261, 643: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 665: 1261, 1261, 672: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 689: 1261, 1261, 1261, 694: 1261, 757: 1261, 762: 1261, 875: 4376, 888: 4494, 899: 4562},
{1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 584: 1441, 1441, 1441, 1441, 1441, 590: 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 602: 1441, 605: 1441, 607: 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 632: 1441, 1441, 1441, 1441, 1441, 638: 1441, 1441, 641: 1441, 643: 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 665: 1441, 1441, 672: 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 689: 1441, 1441, 1441, 694: 1441, 757: 1441, 762: 1441},
{1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 584: 1261, 1261, 1261, 1261, 1261, 590: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 602: 1261, 605: 1261, 607: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 632: 1261, 1261, 1261, 1261, 1261, 638: 1261, 1261, 641: 1261, 643: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 665: 1261, 1261, 672: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 689: 1261, 1261, 1261, 694: 1261, 757: 1261, 762: 1261, 875: 4376, 888: 4494, 899: 4564},
{1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 584: 1442, 1442, 1442, 1442, 1442, 590: 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 602: 1442, 605: 1442, 607: 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 632: 1442, 1442, 1442, 1442, 1442, 638: 1442, 1442, 641: 1442, 643: 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 665: 1442, 1442, 672: 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 1442, 689: 1442, 1442, 1442, 694: 1442, 757: 1442, 762: 1442},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 770: 4567, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4566},
// 1470
{63: 4571, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4568},
{63: 4569, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 584: 1261, 1261, 1261, 1261, 1261, 590: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 602: 1261, 605: 1261, 607: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 632: 1261, 1261, 1261, 1261, 1261, 638: 1261, 1261, 641: 1261, 643: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 665: 1261, 1261, 672: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 689: 1261, 1261, 1261, 694: 1261, 757: 1261, 762: 1261, 875: 4376, 888: 4494, 899: 4570},
{1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 584: 1443, 1443, 1443, 1443, 1443, 590: 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 602: 1443, 605: 1443, 607: 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 632: 1443, 1443, 1443, 1443, 1443, 638: 1443, 1443, 641: 1443, 643: 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 665: 1443, 1443, 672: 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 689: 1443, 1443, 1443, 694: 1443, 757: 1443, 762: 1443},
// 1475
{1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 584: 1261, 1261, 1261, 1261, 1261, 590: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 602: 1261, 605: 1261, 607: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 632: 1261, 1261, 1261, 1261, 1261, 638: 1261, 1261, 641: 1261, 643: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 665: 1261, 1261, 672: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 689: 1261, 1261, 1261, 694: 1261, 757: 1261, 762: 1261, 875: 4376, 888: 4494, 899: 4572},
{1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 584: 1444, 1444, 1444, 1444, 1444, 590: 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 602: 1444, 605: 1444, 607: 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 632: 1444, 1444, 1444, 1444, 1444, 638: 1444, 1444, 641: 1444, 643: 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 665: 1444, 1444, 672: 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 689: 1444, 1444, 1444, 694: 1444, 757: 1444, 762: 1444},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4151, 909: 4574},
{9: 4302, 63: 4575},
{1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 584: 1445, 1445, 1445, 1445, 1445, 590: 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 602: 1445, 605: 1445, 607: 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 632: 1445, 1445, 1445, 1445, 1445, 638: 1445, 1445, 641: 1445, 643: 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 665: 1445, 1445, 672: 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 689: 1445, 1445, 1445, 694: 1445, 757: 1445, 762: 1445},
// 1480
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4151, 909: 4577},
{9: 4302, 63: 4578},
{1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 584: 1446, 1446, 1446, 1446, 1446, 590: 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 602: 1446, 605: 1446, 607: 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 632: 1446, 1446, 1446, 1446, 1446, 638: 1446, 1446, 641: 1446, 643: 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 665: 1446, 1446, 672: 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 689: 1446, 1446, 1446, 694: 1446, 757: 1446, 762: 1446},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4580},
{9: 4581, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
// 1485
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4582},
{9: 4583, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4584},
{63: 4585, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 584: 1463, 1463, 1463, 1463, 1463, 590: 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 602: 1463, 605: 1463, 607: 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 632: 1463, 1463, 1463, 1463, 1463, 638: 1463, 1463, 641: 1463, 643: 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 665: 1463, 1463, 672: 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 689: 1463, 1463, 1463, 694: 1463, 757: 1463, 762: 1463},
// 1490
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4587, 1412: 4589, 1467: 4590, 1578: 4591, 4588},
{63: 4599, 617: 4600, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 617: 4593, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4592},
{2: 1453, 1453, 1453, 1453, 1453, 1453, 1453, 10: 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 64: 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 585: 1453, 588: 1453, 1453, 1453, 595: 1453, 1453, 1453, 1453, 1453, 1453, 1453, 603: 1453, 1453, 606: 1453, 617: 1453, 631: 1453, 637: 1453, 640: 1453, 663: 1453, 1453, 667: 1453, 1453, 1453, 1453, 1453, 687: 1453, 1453, 693: 1453, 695: 1453, 1453, 1453, 1453, 700: 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 713: 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 765: 1453},
{2: 1452, 1452, 1452, 1452, 1452, 1452, 1452, 10: 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 64: 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 585: 1452, 588: 1452, 1452, 1452, 595: 1452, 1452, 1452, 1452, 1452, 1452, 1452, 603: 1452, 1452, 606: 1452, 617: 1452, 631: 1452, 637: 1452, 640: 1452, 663: 1452, 1452, 667: 1452, 1452, 1452, 1452, 1452, 687: 1452, 1452, 693: 1452, 695: 1452, 1452, 1452, 1452, 700: 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 713: 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 765: 1452},
// 1495
{2: 1451, 1451, 1451, 1451, 1451, 1451, 1451, 10: 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 64: 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 585: 1451, 588: 1451, 1451, 1451, 595: 1451, 1451, 1451, 1451, 1451, 1451, 1451, 603: 1451, 1451, 606: 1451, 617: 1451, 631: 1451, 637: 1451, 640: 1451, 663: 1451, 1451, 667: 1451, 1451, 1451, 1451, 1451, 687: 1451, 1451, 693: 1451, 695: 1451, 1451, 1451, 1451, 700: 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 713: 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 765: 1451},
{617: 4596, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4594},
{63: 4595, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 584: 1469, 1469, 1469, 1469, 1469, 590: 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 602: 1469, 605: 1469, 607: 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 632: 1469, 1469, 1469, 1469, 1469, 638: 1469, 1469, 641: 1469, 643: 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 665: 1469, 1469, 672: 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 689: 1469, 1469, 1469, 694: 1469, 757: 1469, 762: 1469},
// 1500
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4597},
{63: 4598, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 584: 1468, 1468, 1468, 1468, 1468, 590: 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 602: 1468, 605: 1468, 607: 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 632: 1468, 1468, 1468, 1468, 1468, 638: 1468, 1468, 641: 1468, 643: 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 665: 1468, 1468, 672: 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 689: 1468, 1468, 1468, 694: 1468, 757: 1468, 762: 1468},
{1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 584: 1471, 1471, 1471, 1471, 1471, 590: 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 602: 1471, 605: 1471, 607: 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 632: 1471, 1471, 1471, 1471, 1471, 638: 1471, 1471, 641: 1471, 643: 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 665: 1471, 1471, 672: 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 689: 1471, 1471, 1471, 694: 1471, 757: 1471, 762: 1471},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4601},
// 1505
{63: 4602, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 584: 1470, 1470, 1470, 1470, 1470, 590: 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 602: 1470, 605: 1470, 607: 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 632: 1470, 1470, 1470, 1470, 1470, 638: 1470, 1470, 641: 1470, 643: 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 665: 1470, 1470, 672: 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 689: 1470, 1470, 1470, 694: 1470, 757: 1470, 762: 1470},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4604},
{9: 4605, 617: 4606, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4612},
// 1510
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4607},
{63: 4608, 613: 4609, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 584: 1476, 1476, 1476, 1476, 1476, 590: 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 602: 1476, 605: 1476, 607: 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 632: 1476, 1476, 1476, 1476, 1476, 638: 1476, 1476, 641: 1476, 643: 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 665: 1476, 1476, 672: 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 689: 1476, 1476, 1476, 694: 1476, 757: 1476, 762: 1476},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4610},
{63: 4611, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
// 1515
{1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 584: 1474, 1474, 1474, 1474, 1474, 590: 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 602: 1474, 605: 1474, 607: 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 632: 1474, 1474, 1474, 1474, 1474, 638: 1474, 1474, 641: 1474, 643: 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 665: 1474, 1474, 672: 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 689: 1474, 1474, 1474, 694: 1474, 757: 1474, 762: 1474},
{9: 4614, 63: 4613, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 584: 1477, 1477, 1477, 1477, 1477, 590: 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 602: 1477, 605: 1477, 607: 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 632: 1477, 1477, 1477, 1477, 1477, 638: 1477, 1477, 641: 1477, 643: 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 665: 1477, 1477, 672: 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 689: 1477, 1477, 1477, 694: 1477, 757: 1477, 762: 1477},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4615},
{63: 4616, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
// 1520
{1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 584: 1475, 1475, 1475, 1475, 1475, 590: 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 602: 1475, 605: 1475, 607: 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 632: 1475, 1475, 1475, 1475, 1475, 638: 1475, 1475, 641: 1475, 643: 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 665: 1475, 1475, 672: 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 689: 1475, 1475, 1475, 694: 1475, 757: 1475, 762: 1475},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4618},
{597: 4091, 4092, 4097, 614: 4093, 661: 4619, 672: 4094, 680: 4095, 4088, 4098, 4087, 4096, 4089, 4090},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4620},
{63: 4621, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
// 1525
{1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 584: 1478, 1478, 1478, 1478, 1478, 590: 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 602: 1478, 605: 1478, 607: 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 632: 1478, 1478, 1478, 1478, 1478, 638: 1478, 1478, 641: 1478, 643: 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 665: 1478, 1478, 672: 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 689: 1478, 1478, 1478, 694: 1478, 757: 1478, 762: 1478},
{133: 4076, 139: 4084, 163: 4072, 165: 4069, 4071, 4068, 4070, 4074, 4075, 4080, 4079, 4078, 4082, 4083, 4077, 4081, 4073, 649: 4066, 4063, 4065, 4064, 4060, 4062, 4061, 4058, 4059, 4057, 4067, 944: 4056, 957: 4623},
{617: 4624},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4625},
{63: 4626, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
// 1530
{1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 584: 1480, 1480, 1480, 1480, 1480, 590: 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 602: 1480, 605: 1480, 607: 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 632: 1480, 1480, 1480, 1480, 1480, 638: 1480, 1480, 641: 1480, 643: 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 665: 1480, 1480, 672: 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 689: 1480, 1480, 1480, 694: 1480, 757: 1480, 762: 1480},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4628},
{9: 4629, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{696: 4630},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4631},
// 1535
{133: 4076, 139: 4084, 163: 4072, 165: 4069, 4071, 4068, 4070, 4074, 4075, 4080, 4079, 4078, 4082, 4083, 4077, 4081, 4073, 620: 4054, 4052, 4053, 4051, 4049, 649: 4066, 4063, 4065, 4064, 4060, 4062, 4061, 4058, 4059, 4057, 4067, 856: 4050, 4048, 944: 4056, 957: 4632},
{63: 4633},
{1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 584: 1481, 1481, 1481, 1481, 1481, 590: 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 602: 1481, 605: 1481, 607: 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 632: 1481, 1481, 1481, 1481, 1481, 638: 1481, 1481, 641: 1481, 643: 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 665: 1481, 1481, 672: 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 689: 1481, 1481, 1481, 694: 1481, 757: 1481, 762: 1481},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4635},
{9: 4636, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
// 1540
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4638, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4637},
{63: 4642, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 1533, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4639},
{133: 4076, 139: 4084, 163: 4072, 165: 4069, 4071, 4068, 4070, 4074, 4075, 4080, 4079, 4078, 4082, 4083, 4077, 4081, 4073, 620: 4054, 4052, 4053, 4051, 4049, 649: 4066, 4063, 4065, 4064, 4060, 4062, 4061, 4058, 4059, 4057, 4067, 856: 4050, 4048, 944: 4056, 957: 4640},
{63: 4641, 597: 4085},
// 1545
{1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 584: 1482, 1482, 1482, 1482, 1482, 590: 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 602: 1482, 605: 1482, 607: 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 632: 1482, 1482, 1482, 1482, 1482, 638: 1482, 1482, 641: 1482, 643: 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 665: 1482, 1482, 672: 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 689: 1482, 1482, 1482, 694: 1482, 757: 1482, 762: 1482},
{1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 584: 1483, 1483, 1483, 1483, 1483, 590: 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 602: 1483, 605: 1483, 607: 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 632: 1483, 1483, 1483, 1483, 1483, 638: 1483, 1483, 641: 1483, 643: 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 665: 1483, 1483, 672: 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 689: 1483, 1483, 1483, 694: 1483, 757: 1483, 762: 1483},
{63: 2354, 604: 4645, 1254: 4644, 4646},
{63: 2353},
{63: 2352},
// 1550
{63: 4647},
{1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 584: 1484, 1484, 1484, 1484, 1484, 590: 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 602: 1484, 605: 1484, 607: 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 632: 1484, 1484, 1484, 1484, 1484, 638: 1484, 1484, 641: 1484, 643: 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 665: 1484, 1484, 672: 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 689: 1484, 1484, 1484, 694: 1484, 757: 1484, 762: 1484},
{63: 2354, 604: 4645, 1254: 4644, 4649},
{63: 4650},
{1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 584: 1485, 1485, 1485, 1485, 1485, 590: 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 602: 1485, 605: 1485, 607: 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 632: 1485, 1485, 1485, 1485, 1485, 638: 1485, 1485, 641: 1485, 643: 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 665: 1485, 1485, 672: 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 689: 1485, 1485, 1485, 694: 1485, 757: 1485, 762: 1485},
// 1555
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4652},
{9: 4653, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4654},
{63: 4655, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 584: 1487, 1487, 1487, 1487, 1487, 590: 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 602: 1487, 605: 1487, 607: 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 632: 1487, 1487, 1487, 1487, 1487, 638: 1487, 1487, 641: 1487, 643: 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 665: 1487, 1487, 672: 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 689: 1487, 1487, 1487, 694: 1487, 757: 1487, 762: 1487},
// 1560
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 2356, 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4151, 909: 4657, 977: 4658},
{9: 4302, 63: 2355},
{63: 4659},
{1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 584: 1488, 1488, 1488, 1488, 1488, 590: 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 602: 1488, 605: 1488, 607: 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 632: 1488, 1488, 1488, 1488, 1488, 638: 1488, 1488, 641: 1488, 643: 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 665: 1488, 1488, 672: 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 689: 1488, 1488, 1488, 694: 1488, 757: 1488, 762: 1488},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4151, 909: 4661},
// 1565
{9: 4302, 63: 4662, 594: 4663},
{1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 584: 1493, 1493, 1493, 1493, 1493, 590: 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 602: 1493, 605: 1493, 607: 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 632: 1493, 1493, 1493, 1493, 1493, 638: 1493, 1493, 641: 1493, 643: 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 665: 1493, 1493, 672: 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 689: 1493, 1493, 1493, 694: 1493, 757: 1493, 762: 1493},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 637: 4666, 826: 4046, 3292, 3293, 3291, 860: 4665, 965: 4664},
{63: 4667},
{1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 17: 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 63: 1055, 157: 1055, 184: 1055, 583: 1055, 1055, 586: 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 600: 1055, 1055, 1055, 1055, 606: 1055, 611: 1055, 618: 1055, 637: 1055, 642: 1055, 692: 1055, 699: 1055, 712: 1055, 756: 1055, 758: 1055, 1055, 1055, 1055, 763: 1055, 1055, 771: 1055, 778: 1055},
// 1570
{1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 17: 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 63: 1054, 157: 1054, 184: 1054, 583: 1054, 1054, 586: 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 600: 1054, 1054, 1054, 1054, 606: 1054, 611: 1054, 618: 1054, 637: 1054, 642: 1054, 692: 1054, 699: 1054, 712: 1054, 756: 1054, 758: 1054, 1054, 1054, 1054, 763: 1054, 1054, 771: 1054, 778: 1054},
{1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 584: 1492, 1492, 1492, 1492, 1492, 590: 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 602: 1492, 605: 1492, 607: 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 632: 1492, 1492, 1492, 1492, 1492, 638: 1492, 1492, 641: 1492, 643: 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 665: 1492, 1492, 672: 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 689: 1492, 1492, 1492, 694: 1492, 757: 1492, 762: 1492},
{1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 584: 1494, 1494, 1494, 1494, 1494, 590: 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 602: 1494, 605: 1494, 607: 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 632: 1494, 1494, 1494, 1494, 1494, 638: 1494, 1494, 641: 1494, 643: 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 665: 1494, 1494, 672: 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 689: 1494, 1494, 1494, 694: 1494, 757: 1494, 762: 1494},
{63: 4670, 604: 4671},
{1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 584: 1415, 1415, 1415, 1415, 1415, 590: 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 602: 1415, 605: 1415, 607: 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 632: 1415, 1415, 1415, 1415, 1415, 638: 1415, 1415, 641: 1415, 643: 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 665: 1415, 1415, 672: 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 689: 1415, 1415, 1415, 694: 1415, 757: 1415, 762: 1415},
// 1575
{63: 4672},
{1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 584: 1414, 1414, 1414, 1414, 1414, 590: 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 602: 1414, 605: 1414, 607: 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 632: 1414, 1414, 1414, 1414, 1414, 638: 1414, 1414, 641: 1414, 643: 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 665: 1414, 1414, 672: 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 689: 1414, 1414, 1414, 694: 1414, 757: 1414, 762: 1414},
{63: 4674},
{1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 584: 1495, 1495, 1495, 1495, 1495, 590: 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 602: 1495, 605: 1495, 607: 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 632: 1495, 1495, 1495, 1495, 1495, 638: 1495, 1495, 641: 1495, 643: 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 665: 1495, 1495, 672: 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 689: 1495, 1495, 1495, 694: 1495, 757: 1495, 762: 1495},
{63: 4677},
// 1580
{1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 584: 1496, 1496, 1496, 1496, 1496, 590: 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 602: 1496, 605: 1496, 607: 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 632: 1496, 1496, 1496, 1496, 1496, 638: 1496, 1496, 641: 1496, 643: 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 665: 1496, 1496, 672: 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 689: 1496, 1496, 1496, 694: 1496, 757: 1496, 762: 1496},
{1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 584: 1510, 1510, 1510, 1510, 1510, 590: 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 602: 1510, 605: 1510, 607: 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 632: 1510, 1510, 1510, 1510, 1510, 638: 1510, 1510, 641: 1510, 643: 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 665: 1510, 1510, 672: 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 689: 1510, 1510, 1510, 694: 1510, 757: 1510, 762: 1510, 767: 1510, 772: 1510, 779: 1510},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 2356, 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4151, 909: 4657, 977: 4679},
{63: 4680},
{1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 584: 1497, 1497, 1497, 1497, 1497, 590: 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 602: 1497, 605: 1497, 607: 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 632: 1497, 1497, 1497, 1497, 1497, 638: 1497, 1497, 641: 1497, 643: 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 665: 1497, 1497, 672: 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 689: 1497, 1497, 1497, 694: 1497, 757: 1497, 762: 1497},
// 1585
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 2356, 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4151, 909: 4657, 977: 4682},
{63: 4683},
{1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 584: 1498, 1498, 1498, 1498, 1498, 590: 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 602: 1498, 605: 1498, 607: 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 632: 1498, 1498, 1498, 1498, 1498, 638: 1498, 1498, 641: 1498, 643: 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 665: 1498, 1498, 672: 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 689: 1498, 1498, 1498, 694: 1498, 757: 1498, 762: 1498},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4685},
{9: 4686, 594: 4687, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
// 1590
{72: 4698, 133: 4694, 185: 4700, 189: 4695, 4693, 192: 4697, 4704, 606: 4706, 637: 4691, 763: 4705, 782: 4701, 4702, 4696, 4703, 873: 4699, 975: 4692, 1115: 4690},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 637: 4666, 826: 4046, 3292, 3293, 3291, 860: 4665, 965: 4688},
{63: 4689},
{1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 584: 1559, 1559, 1559, 1559, 1559, 590: 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 602: 1559, 605: 1559, 607: 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 632: 1559, 1559, 1559, 1559, 1559, 638: 1559, 1559, 641: 1559, 643: 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 665: 1559, 1559, 672: 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 1559, 689: 1559, 1559, 1559, 694: 1559, 757: 1559, 762: 1559},
{63: 4749},
// 1595
{63: 525, 583: 4714, 771: 525, 896: 4715, 940: 4748},
{18: 525, 63: 525, 583: 4714, 606: 525, 637: 525, 763: 525, 771: 525, 896: 4715, 940: 4733},
{63: 1375, 771: 1375},
{63: 1374, 771: 1374},
{63: 525, 583: 4714, 771: 525, 896: 4715, 940: 4732},
// 1600
{63: 518, 583: 4719, 771: 518, 896: 4720, 1092: 4731, 1101: 4721},
{63: 525, 583: 4714, 771: 525, 896: 4715, 940: 4730},
{63: 592, 771: 592, 790: 4727, 4728, 1298: 4729},
{63: 592, 771: 592, 790: 4727, 4728, 1298: 4726},
{63: 1368, 771: 1368},
// 1605
{63: 1367, 771: 1367},
{63: 518, 583: 4719, 771: 518, 896: 4720, 1092: 4718, 1101: 4721},
{63: 1365, 771: 1365},
{63: 512, 583: 512, 665: 4708, 771: 512, 1303: 4707},
{18: 563, 63: 563, 583: 563, 606: 563, 637: 563, 763: 563, 771: 563},
// 1610
{18: 562, 63: 562, 583: 562, 606: 562, 637: 562, 763: 562, 771: 562},
{63: 525, 583: 4714, 771: 525, 896: 4715, 940: 4713},
{782: 4710, 4709},
{666: 4712},
{666: 4711},
// 1615
{510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 63: 510, 583: 510, 510, 587: 510, 510, 510, 510, 510, 510, 601: 510, 699: 510, 712: 510, 756: 510, 758: 510, 510, 510, 510, 771: 510},
{511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 63: 511, 583: 511, 511, 587: 511, 511, 511, 511, 511, 511, 601: 511, 699: 511, 712: 511, 756: 511, 758: 511, 511, 511, 511, 771: 511},
{63: 1364, 771: 1364},
{604: 3284, 854: 4175, 865: 4716},
{524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 18: 524, 63: 524, 72: 524, 179: 524, 524, 183: 524, 584: 524, 587: 524, 524, 524, 524, 524, 524, 601: 524, 606: 524, 632: 524, 637: 524, 660: 524, 699: 524, 712: 524, 756: 524, 758: 524, 524, 524, 524, 763: 524, 771: 524, 873: 524, 524},
// 1620
{63: 4717},
{526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 18: 526, 63: 526, 72: 526, 179: 526, 526, 183: 526, 584: 526, 587: 526, 526, 526, 526, 526, 526, 601: 526, 606: 526, 632: 526, 637: 526, 660: 526, 699: 526, 712: 526, 756: 526, 758: 526, 526, 526, 526, 763: 526, 771: 526, 873: 526, 526},
{63: 1366, 771: 1366},
{604: 3284, 854: 4175, 865: 4722},
{517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 63: 517, 72: 517, 584: 517, 587: 517, 517, 517, 517, 517, 517, 601: 517, 699: 517, 712: 517, 756: 517, 758: 517, 517, 517, 517, 771: 517, 873: 517, 517},
// 1625
{516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 63: 516, 72: 516, 584: 516, 587: 516, 516, 516, 516, 516, 516, 601: 516, 699: 516, 712: 516, 756: 516, 758: 516, 516, 516, 516, 771: 516, 873: 516, 516},
{9: 4723, 63: 4717},
{604: 3284, 854: 4175, 865: 4724},
{63: 4725},
{515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 63: 515, 72: 515, 584: 515, 587: 515, 515, 515, 515, 515, 515, 601: 515, 699: 515, 712: 515, 756: 515, 758: 515, 515, 515, 515, 771: 515, 873: 515, 515},
// 1630
{63: 1369, 771: 1369},
{63: 591, 771: 591},
{63: 590, 771: 590},
{63: 1370, 771: 1370},
{63: 1371, 771: 1371},
// 1635
{63: 1372, 771: 1372},
{63: 1373, 771: 1373},
{18: 4738, 63: 509, 606: 4739, 637: 4735, 763: 4737, 771: 509, 908: 4736, 952: 4734},
{63: 1376, 771: 1376},
{506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 18: 4738, 63: 506, 584: 506, 587: 506, 506, 506, 506, 506, 506, 601: 506, 606: 4739, 699: 506, 712: 506, 756: 506, 758: 506, 506, 506, 506, 763: 4737, 771: 506, 908: 4746, 1485: 4745},
// 1640
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 637: 4666, 826: 4046, 3292, 3293, 3291, 860: 4665, 965: 4742},
{611: 4741},
{503, 503, 503, 503, 503, 503, 503, 503, 503, 10: 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 64: 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 585: 503, 589: 503, 605: 503, 609: 503, 633: 503, 637: 503},
{611: 4740},
{502, 502, 502, 502, 502, 502, 502, 502, 502, 10: 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 64: 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 585: 502, 589: 502, 605: 502, 609: 502, 633: 502, 637: 502},
// 1645
{504, 504, 504, 504, 504, 504, 504, 504, 504, 10: 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 64: 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, 585: 504, 589: 504, 605: 504, 609: 504, 633: 504, 637: 504},
{514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 63: 514, 584: 514, 587: 514, 514, 514, 514, 514, 514, 601: 514, 637: 4743, 699: 514, 712: 514, 756: 514, 758: 514, 514, 514, 514, 771: 514, 1484: 4744},
{513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 63: 513, 584: 513, 587: 513, 513, 513, 513, 513, 513, 601: 513, 699: 513, 712: 513, 756: 513, 758: 513, 513, 513, 513, 771: 513},
{507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 63: 507, 584: 507, 587: 507, 507, 507, 507, 507, 507, 601: 507, 699: 507, 712: 507, 756: 507, 758: 507, 507, 507, 507, 771: 507},
{508, 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, 63: 508, 584: 508, 587: 508, 508, 508, 508, 508, 508, 601: 508, 699: 508, 712: 508, 756: 508, 758: 508, 508, 508, 508, 771: 508},
// 1650
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 637: 4666, 826: 4046, 3292, 3293, 3291, 860: 4665, 965: 4747},
{505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 63: 505, 584: 505, 587: 505, 505, 505, 505, 505, 505, 601: 505, 699: 505, 712: 505, 756: 505, 758: 505, 505, 505, 505, 771: 505},
{63: 1377, 771: 1377},
{1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 584: 1560, 1560, 1560, 1560, 1560, 590: 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 602: 1560, 605: 1560, 607: 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 632: 1560, 1560, 1560, 1560, 1560, 638: 1560, 1560, 641: 1560, 643: 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 665: 1560, 1560, 672: 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 1560, 689: 1560, 1560, 1560, 694: 1560, 757: 1560, 762: 1560},
{620: 4054, 4052, 4053, 4051, 4049, 643: 1383, 856: 4050, 4048},
// 1655
{643: 4754, 1385: 4753, 1596: 4752},
{126: 1379, 643: 4754, 4760, 1385: 4759, 1438: 4758},
{126: 1382, 643: 1382, 1382},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4755},
{620: 4054, 4052, 4053, 4051, 4049, 662: 4756, 856: 4050, 4048},
// 1660
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4757},
{126: 1380, 620: 4054, 4052, 4053, 4051, 4049, 643: 1380, 1380, 856: 4050, 4048},
{126: 4762},
{126: 1381, 643: 1381, 1381},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4761},
// 1665
{126: 1378, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 584: 1561, 1561, 1561, 1561, 1561, 590: 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 602: 1561, 605: 1561, 607: 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 632: 1561, 1561, 1561, 1561, 1561, 638: 1561, 1561, 641: 1561, 643: 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 665: 1561, 1561, 672: 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 689: 1561, 1561, 1561, 694: 1561, 757: 1561, 762: 1561},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4764},
{591: 4765, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{72: 4698, 133: 4694, 185: 4700, 189: 4695, 4693, 192: 4697, 4704, 606: 4706, 637: 4691, 763: 4705, 782: 4701, 4702, 4696, 4703, 873: 4699, 975: 4692, 1115: 4766},
// 1670
{63: 1554, 771: 4768, 1403: 4767},
{63: 4769},
{63: 1553},
{1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 584: 1563, 1563, 1563, 1563, 1563, 590: 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 602: 1563, 605: 1563, 607: 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 632: 1563, 1563, 1563, 1563, 1563, 638: 1563, 1563, 641: 1563, 643: 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 665: 1563, 1563, 672: 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 1563, 689: 1563, 1563, 1563, 694: 1563, 757: 1563, 762: 1563},
{1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 584: 1564, 1564, 1564, 1564, 1564, 590: 1564, 1564, 4039, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 602: 1564, 605: 1564, 607: 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 632: 1564, 1564, 1564, 1564, 1564, 638: 1564, 1564, 641: 1564, 643: 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 665: 1564, 1564, 672: 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 1564, 689: 1564, 1564, 1564, 694: 1564, 757: 1564, 762: 1564},
// 1675
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4772},
{620: 4054, 4052, 4053, 4051, 4049, 638: 4773, 856: 4050, 4048},
{1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 584: 1565, 1565, 1565, 1565, 1565, 590: 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 602: 1565, 605: 1565, 607: 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 632: 1565, 1565, 1565, 1565, 1565, 638: 1565, 1565, 641: 1565, 643: 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 665: 1565, 1565, 672: 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 689: 1565, 1565, 1565, 694: 1565, 757: 1565, 762: 1565},
{1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 584: 1566, 1566, 1566, 1566, 1566, 590: 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 602: 1566, 605: 1566, 607: 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 632: 1566, 1566, 1566, 1566, 1566, 638: 1566, 1566, 641: 1566, 643: 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 665: 1566, 1566, 672: 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 689: 1566, 1566, 1566, 694: 1566, 757: 1566, 762: 1566},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4151, 909: 4776},
// 1680
{9: 4777},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4778},
{9: 2361, 63: 4779, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 584: 1567, 1567, 1567, 1567, 1567, 590: 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 602: 1567, 605: 1567, 607: 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 632: 1567, 1567, 1567, 1567, 1567, 638: 1567, 1567, 641: 1567, 643: 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 665: 1567, 1567, 672: 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 689: 1567, 1567, 1567, 694: 1567, 757: 1567, 762: 1567},
{9: 2362, 63: 4785, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
// 1685
{9: 4782},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4783},
{9: 2361, 63: 4784, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 584: 1568, 1568, 1568, 1568, 1568, 590: 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 602: 1568, 605: 1568, 607: 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 632: 1568, 1568, 1568, 1568, 1568, 638: 1568, 1568, 641: 1568, 643: 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 665: 1568, 1568, 672: 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 1568, 689: 1568, 1568, 1568, 694: 1568, 757: 1568, 762: 1568},
{1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 584: 1569, 1569, 1569, 1569, 1569, 590: 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 602: 1569, 605: 1569, 607: 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 632: 1569, 1569, 1569, 1569, 1569, 638: 1569, 1569, 641: 1569, 643: 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 665: 1569, 1569, 672: 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 689: 1569, 1569, 1569, 694: 1569, 757: 1569, 762: 1569},
// 1690
{1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 584: 1571, 1571, 1571, 1571, 1571, 590: 1571, 1571, 4039, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 602: 1571, 605: 1571, 607: 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 632: 1571, 1571, 1571, 1571, 1571, 638: 1571, 1571, 641: 1571, 643: 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 665: 1571, 1571, 672: 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 1571, 689: 1571, 1571, 1571, 694: 1571, 757: 1571, 762: 1571},
{1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 584: 1573, 1573, 1573, 1573, 1573, 590: 1573, 1573, 4039, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 602: 1573, 605: 1573, 607: 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 632: 1573, 1573, 1573, 1573, 1573, 638: 1573, 1573, 641: 1573, 643: 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 665: 1573, 1573, 672: 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 689: 1573, 1573, 1573, 694: 1573, 757: 1573, 762: 1573},
{1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 584: 1574, 1574, 1574, 1574, 1574, 590: 1574, 1574, 4039, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 602: 1574, 605: 1574, 607: 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 632: 1574, 1574, 1574, 1574, 1574, 638: 1574, 1574, 641: 1574, 643: 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 665: 1574, 1574, 672: 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 689: 1574, 1574, 1574, 694: 1574, 757: 1574, 762: 1574},
{1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 584: 1575, 1575, 1575, 1575, 1575, 590: 1575, 1575, 4039, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 602: 1575, 605: 1575, 607: 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 632: 1575, 1575, 1575, 1575, 1575, 638: 1575, 1575, 641: 1575, 643: 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 665: 1575, 1575, 672: 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 689: 1575, 1575, 1575, 694: 1575, 757: 1575, 762: 1575},
{1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 584: 1576, 1576, 1576, 1576, 1576, 590: 1576, 1576, 4039, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 602: 1576, 605: 1576, 607: 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 632: 1576, 1576, 1576, 1576, 1576, 638: 1576, 1576, 641: 1576, 643: 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 665: 1576, 1576, 672: 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 689: 1576, 1576, 1576, 694: 1576, 757: 1576, 762: 1576},
// 1695
{585: 4794},
{585: 4793},
{1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 584: 1555, 1555, 1555, 1555, 1555, 590: 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 602: 1555, 605: 1555, 607: 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 632: 1555, 1555, 1555, 1555, 1555, 638: 1555, 1555, 641: 1555, 643: 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 665: 1555, 1555, 672: 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 1555, 689: 1555, 1555, 1555, 694: 1555, 757: 1555, 762: 1555},
{1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 584: 1556, 1556, 1556, 1556, 1556, 590: 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 602: 1556, 605: 1556, 607: 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 632: 1556, 1556, 1556, 1556, 1556, 638: 1556, 1556, 641: 1556, 643: 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 665: 1556, 1556, 672: 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 1556, 689: 1556, 1556, 1556, 694: 1556, 757: 1556, 762: 1556},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4796, 3292, 3293, 3291},
// 1700
{1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 4797, 1588, 1588, 1588, 1588, 1588, 590: 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 602: 1588, 605: 1588, 607: 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 632: 1588, 1588, 1588, 1588, 1588, 638: 1588, 1588, 641: 1588, 643: 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 665: 1588, 1588, 672: 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 689: 1588, 1588, 1588, 694: 1588, 757: 1588, 762: 1588, 769: 4215, 773: 1588, 1588},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 2356, 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4151, 909: 4657, 977: 4798},
{63: 4799},
{1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 584: 1417, 1417, 1417, 1417, 1417, 590: 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 602: 1417, 605: 1417, 607: 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 632: 1417, 1417, 1417, 1417, 1417, 638: 1417, 1417, 641: 1417, 643: 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 665: 1417, 1417, 672: 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 689: 1417, 1417, 1417, 694: 1417, 757: 1417, 762: 1417},
{1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 584: 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 601: 1627, 1627, 605: 1627, 607: 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 632: 1627, 1627, 1627, 1627, 1627, 638: 1627, 1627, 641: 1627, 643: 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 665: 1627, 1627, 672: 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 689: 1627, 1627, 1627, 694: 1627, 699: 1627, 712: 1627, 756: 1627, 1627, 1627, 1627, 1627, 1627, 1627},
// 1705
{1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 584: 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 601: 1624, 1624, 605: 1624, 607: 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 632: 1624, 1624, 1624, 1624, 1624, 638: 1624, 1624, 641: 1624, 643: 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 665: 1624, 1624, 672: 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 689: 1624, 1624, 1624, 694: 1624, 699: 1624, 712: 1624, 756: 1624, 1624, 1624, 1624, 1624, 1624, 1624},
{1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 584: 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 601: 1623, 1623, 605: 1623, 607: 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 632: 1623, 1623, 1623, 1623, 1623, 638: 1623, 1623, 641: 1623, 643: 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 665: 1623, 1623, 672: 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 689: 1623, 1623, 1623, 694: 1623, 699: 1623, 712: 1623, 756: 1623, 1623, 1623, 1623, 1623, 1623, 1623},
{1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 584: 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 601: 1621, 1621, 605: 1621, 607: 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 632: 1621, 1621, 1621, 1621, 1621, 638: 1621, 1621, 641: 1621, 643: 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 665: 1621, 1621, 672: 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 689: 1621, 1621, 1621, 694: 1621, 699: 1621, 712: 1621, 756: 1621, 1621, 1621, 1621, 1621, 1621, 1621},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4805},
{591: 4806, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
// 1710
{72: 4698, 133: 4694, 185: 4700, 189: 4695, 4693, 192: 4697, 4704, 606: 4706, 637: 4691, 763: 4705, 782: 4701, 4702, 4696, 4703, 873: 4699, 975: 4692, 1115: 4807},
{771: 4808},
{63: 4809},
{1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 584: 1562, 1562, 1562, 1562, 1562, 590: 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 602: 1562, 605: 1562, 607: 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 632: 1562, 1562, 1562, 1562, 1562, 638: 1562, 1562, 641: 1562, 643: 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 665: 1562, 1562, 672: 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 1562, 689: 1562, 1562, 1562, 694: 1562, 757: 1562, 762: 1562},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 770: 4812, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4811},
// 1715
{63: 4816, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4813},
{63: 4814, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 584: 1261, 1261, 1261, 1261, 1261, 590: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 602: 1261, 605: 1261, 607: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 632: 1261, 1261, 1261, 1261, 1261, 638: 1261, 1261, 641: 1261, 643: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 665: 1261, 1261, 672: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 689: 1261, 1261, 1261, 694: 1261, 757: 1261, 762: 1261, 875: 4376, 888: 4494, 899: 4815},
{1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 584: 1425, 1425, 1425, 1425, 1425, 590: 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 602: 1425, 605: 1425, 607: 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 632: 1425, 1425, 1425, 1425, 1425, 638: 1425, 1425, 641: 1425, 643: 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 665: 1425, 1425, 672: 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 689: 1425, 1425, 1425, 694: 1425, 757: 1425, 762: 1425},
// 1720
{1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 584: 1261, 1261, 1261, 1261, 1261, 590: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 602: 1261, 605: 1261, 607: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 632: 1261, 1261, 1261, 1261, 1261, 638: 1261, 1261, 641: 1261, 643: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 665: 1261, 1261, 672: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 689: 1261, 1261, 1261, 694: 1261, 757: 1261, 762: 1261, 875: 4376, 888: 4494, 899: 4817},
{1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 584: 1426, 1426, 1426, 1426, 1426, 590: 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 602: 1426, 605: 1426, 607: 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 632: 1426, 1426, 1426, 1426, 1426, 638: 1426, 1426, 641: 1426, 643: 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 665: 1426, 1426, 672: 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 689: 1426, 1426, 1426, 694: 1426, 757: 1426, 762: 1426},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 770: 4820, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4819},
{9: 4830, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4821},
// 1725
{9: 4822, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 770: 4824, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4823},
{63: 4828, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4825},
{63: 4826, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
// 1730
{1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 584: 1261, 1261, 1261, 1261, 1261, 590: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 602: 1261, 605: 1261, 607: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 632: 1261, 1261, 1261, 1261, 1261, 638: 1261, 1261, 641: 1261, 643: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 665: 1261, 1261, 672: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 689: 1261, 1261, 1261, 694: 1261, 757: 1261, 762: 1261, 875: 4376, 888: 4494, 899: 4827},
{1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 584: 1421, 1421, 1421, 1421, 1421, 590: 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 602: 1421, 605: 1421, 607: 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 632: 1421, 1421, 1421, 1421, 1421, 638: 1421, 1421, 641: 1421, 643: 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 665: 1421, 1421, 672: 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 689: 1421, 1421, 1421, 694: 1421, 757: 1421, 762: 1421},
{1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 584: 1261, 1261, 1261, 1261, 1261, 590: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 602: 1261, 605: 1261, 607: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 632: 1261, 1261, 1261, 1261, 1261, 638: 1261, 1261, 641: 1261, 643: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 665: 1261, 1261, 672: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 689: 1261, 1261, 1261, 694: 1261, 757: 1261, 762: 1261, 875: 4376, 888: 4494, 899: 4829},
{1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 584: 1423, 1423, 1423, 1423, 1423, 590: 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 602: 1423, 605: 1423, 607: 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 632: 1423, 1423, 1423, 1423, 1423, 638: 1423, 1423, 641: 1423, 643: 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 665: 1423, 1423, 672: 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 689: 1423, 1423, 1423, 694: 1423, 757: 1423, 762: 1423},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 770: 4832, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4831},
// 1735
{63: 4836, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4833},
{63: 4834, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 584: 1261, 1261, 1261, 1261, 1261, 590: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 602: 1261, 605: 1261, 607: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 632: 1261, 1261, 1261, 1261, 1261, 638: 1261, 1261, 641: 1261, 643: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 665: 1261, 1261, 672: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 689: 1261, 1261, 1261, 694: 1261, 757: 1261, 762: 1261, 875: 4376, 888: 4494, 899: 4835},
{1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 584: 1422, 1422, 1422, 1422, 1422, 590: 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 602: 1422, 605: 1422, 607: 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 632: 1422, 1422, 1422, 1422, 1422, 638: 1422, 1422, 641: 1422, 643: 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 665: 1422, 1422, 672: 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 689: 1422, 1422, 1422, 694: 1422, 757: 1422, 762: 1422},
// 1740
{1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 584: 1261, 1261, 1261, 1261, 1261, 590: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 602: 1261, 605: 1261, 607: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 632: 1261, 1261, 1261, 1261, 1261, 638: 1261, 1261, 641: 1261, 643: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 665: 1261, 1261, 672: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 689: 1261, 1261, 1261, 694: 1261, 757: 1261, 762: 1261, 875: 4376, 888: 4494, 899: 4837},
{1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 584: 1424, 1424, 1424, 1424, 1424, 590: 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 602: 1424, 605: 1424, 607: 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 632: 1424, 1424, 1424, 1424, 1424, 638: 1424, 1424, 641: 1424, 643: 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 665: 1424, 1424, 672: 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 689: 1424, 1424, 1424, 694: 1424, 757: 1424, 762: 1424},
{133: 4076, 139: 4084, 163: 4072, 165: 4069, 4071, 4068, 4070, 4074, 4075, 4080, 4079, 4078, 4082, 4083, 4077, 4081, 4073, 944: 4839},
{9: 4840},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4841},
// 1745
{9: 4842, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4843},
{63: 4844, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 584: 1472, 1472, 1472, 1472, 1472, 590: 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 602: 1472, 605: 1472, 607: 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 632: 1472, 1472, 1472, 1472, 1472, 638: 1472, 1472, 641: 1472, 643: 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 665: 1472, 1472, 672: 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 689: 1472, 1472, 1472, 694: 1472, 757: 1472, 762: 1472},
{133: 4076, 139: 4084, 163: 4072, 165: 4069, 4071, 4068, 4070, 4074, 4075, 4080, 4079, 4078, 4082, 4083, 4077, 4081, 4073, 944: 4846},
// 1750
{9: 4847},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4848},
{9: 4849, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4850},
{63: 4851, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
// 1755
{1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 584: 1473, 1473, 1473, 1473, 1473, 590: 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 602: 1473, 605: 1473, 607: 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 632: 1473, 1473, 1473, 1473, 1473, 638: 1473, 1473, 641: 1473, 643: 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 665: 1473, 1473, 672: 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 689: 1473, 1473, 1473, 694: 1473, 757: 1473, 762: 1473},
{189: 4855, 4854, 192: 4856, 198: 4857, 1452: 4853},
{9: 4858},
{9: 1461},
{9: 1460},
// 1760
{9: 1459},
{9: 1458},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4859},
{63: 4860, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 584: 1479, 1479, 1479, 1479, 1479, 590: 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 602: 1479, 605: 1479, 607: 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 632: 1479, 1479, 1479, 1479, 1479, 638: 1479, 1479, 641: 1479, 643: 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 665: 1479, 1479, 672: 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 689: 1479, 1479, 1479, 694: 1479, 757: 1479, 762: 1479},
// 1765
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 2356, 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4151, 909: 4657, 977: 4862},
{63: 4863},
{1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 584: 1462, 1462, 1462, 1462, 1462, 590: 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 602: 1462, 605: 1462, 607: 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 632: 1462, 1462, 1462, 1462, 1462, 638: 1462, 1462, 641: 1462, 643: 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 665: 1462, 1462, 672: 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 689: 1462, 1462, 1462, 694: 1462, 757: 1462, 762: 1462},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 4865},
{9: 4866},
// 1770
{597: 4870, 4871, 604: 3284, 854: 4867, 880: 4869, 973: 4868},
{2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 17: 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 2394, 71: 2394, 106: 2394, 2394, 2394, 2394, 2394, 2394, 2394, 115: 2394, 117: 2394, 120: 2394, 2394, 124: 2394, 2394, 127: 2394, 2394, 2394, 2394, 2394, 163: 2394, 203: 2394, 2394, 2394, 2394, 583: 2394, 2394, 586: 2394, 2394, 589: 2394, 591: 2394, 2394, 2394, 2394, 600: 2394, 602: 2394, 2394, 606: 2394, 609: 2394, 2394, 612: 2394, 615: 2394, 618: 2394, 642: 2394, 692: 2394, 763: 2394, 2394, 775: 2394},
{63: 4874},
{178, 178, 6: 178, 178, 178, 10: 178, 17: 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 63: 178, 115: 178, 117: 178, 120: 178, 178, 124: 178, 178, 127: 178, 178, 178, 178, 178, 589: 178, 592: 178, 178, 606: 178, 618: 178, 763: 178, 178, 775: 178},
{604: 3284, 854: 4867, 880: 4873},
// 1775
{604: 3284, 854: 4872},
{176, 176, 6: 176, 176, 176, 10: 176, 17: 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 63: 176, 115: 176, 117: 176, 120: 176, 176, 124: 176, 176, 127: 176, 176, 176, 176, 176, 589: 176, 592: 176, 176, 606: 176, 618: 176, 763: 176, 176, 775: 176},
{177, 177, 6: 177, 177, 177, 10: 177, 17: 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 63: 177, 115: 177, 117: 177, 120: 177, 177, 124: 177, 177, 127: 177, 177, 177, 177, 177, 589: 177, 592: 177, 177, 606: 177, 618: 177, 763: 177, 177, 775: 177},
{1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 584: 1449, 1449, 1449, 1449, 1449, 590: 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 602: 1449, 605: 1449, 607: 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 632: 1449, 1449, 1449, 1449, 1449, 638: 1449, 1449, 641: 1449, 643: 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 665: 1449, 1449, 672: 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 689: 1449, 1449, 1449, 694: 1449, 757: 1449, 762: 1449},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 4876},
// 1780
{63: 4877},
{1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 584: 1450, 1450, 1450, 1450, 1450, 590: 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 602: 1450, 605: 1450, 607: 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 632: 1450, 1450, 1450, 1450, 1450, 638: 1450, 1450, 641: 1450, 643: 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 665: 1450, 1450, 672: 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 689: 1450, 1450, 1450, 694: 1450, 757: 1450, 762: 1450},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4879},
{63: 4880, 591: 4881, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 584: 1467, 1467, 1467, 1467, 1467, 590: 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 602: 1467, 605: 1467, 607: 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 632: 1467, 1467, 1467, 1467, 1467, 638: 1467, 1467, 641: 1467, 643: 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 665: 1467, 1467, 672: 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 689: 1467, 1467, 1467, 694: 1467, 757: 1467, 762: 1467},
// 1785
{606: 4706, 637: 4883, 763: 4705, 975: 4882},
{583: 4714, 896: 4886},
{583: 4714, 896: 4884},
{63: 4885},
{1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 584: 1465, 1465, 1465, 1465, 1465, 590: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 602: 1465, 605: 1465, 607: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 632: 1465, 1465, 1465, 1465, 1465, 638: 1465, 1465, 641: 1465, 643: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 665: 1465, 1465, 672: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 689: 1465, 1465, 1465, 694: 1465, 757: 1465, 762: 1465},
// 1790
{63: 4887},
{1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 584: 1466, 1466, 1466, 1466, 1466, 590: 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 602: 1466, 605: 1466, 607: 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 632: 1466, 1466, 1466, 1466, 1466, 638: 1466, 1466, 641: 1466, 643: 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 665: 1466, 1466, 672: 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 689: 1466, 1466, 1466, 694: 1466, 757: 1466, 762: 1466},
{1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 584: 1489, 1489, 1489, 1489, 1489, 590: 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 602: 1489, 605: 1489, 607: 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 632: 1489, 1489, 1489, 1489, 1489, 638: 1489, 1489, 641: 1489, 643: 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 665: 1489, 1489, 672: 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 689: 1489, 1489, 1489, 694: 1489, 757: 1489, 762: 1489},
{1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 584: 1490, 1490, 1490, 1490, 1490, 590: 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 602: 1490, 605: 1490, 607: 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 632: 1490, 1490, 1490, 1490, 1490, 638: 1490, 1490, 641: 1490, 643: 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 665: 1490, 1490, 672: 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 689: 1490, 1490, 1490, 694: 1490, 757: 1490, 762: 1490},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 2356, 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4151, 909: 4657, 977: 4891},
// 1795
{63: 4892},
{1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 584: 1486, 1486, 1486, 1486, 1486, 590: 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 602: 1486, 605: 1486, 607: 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 632: 1486, 1486, 1486, 1486, 1486, 638: 1486, 1486, 641: 1486, 643: 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 665: 1486, 1486, 672: 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 689: 1486, 1486, 1486, 694: 1486, 757: 1486, 762: 1486},
{1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 584: 1491, 1491, 1491, 1491, 1491, 590: 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 602: 1491, 605: 1491, 607: 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 632: 1491, 1491, 1491, 1491, 1491, 638: 1491, 1491, 641: 1491, 643: 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 665: 1491, 1491, 672: 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 689: 1491, 1491, 1491, 694: 1491, 757: 1491, 762: 1491},
{2: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 10: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 64: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 585: 1548, 588: 1548, 1548, 1548, 595: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 603: 1548, 1548, 606: 1548, 631: 1548, 637: 1548, 640: 1548, 663: 1548, 1548, 667: 1548, 1548, 1548, 1548, 1548, 687: 1548, 1548, 693: 1548, 695: 1548, 1548, 1548, 1548, 700: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 713: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 765: 1548, 770: 4486, 884: 4484, 4485, 943: 4487, 945: 4488, 974: 4895, 976: 4489},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4896},
// 1800
{63: 4897, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 584: 1261, 1261, 1261, 1261, 1261, 590: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 602: 1261, 605: 1261, 607: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 632: 1261, 1261, 1261, 1261, 1261, 638: 1261, 1261, 641: 1261, 643: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 665: 1261, 1261, 672: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 689: 1261, 1261, 1261, 694: 1261, 757: 1261, 762: 1261, 875: 4376, 888: 4494, 899: 4898},
{1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 584: 1447, 1447, 1447, 1447, 1447, 590: 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 602: 1447, 605: 1447, 607: 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 632: 1447, 1447, 1447, 1447, 1447, 638: 1447, 1447, 641: 1447, 643: 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 665: 1447, 1447, 672: 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 689: 1447, 1447, 1447, 694: 1447, 757: 1447, 762: 1447},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 2356, 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4151, 909: 4657, 977: 4900},
{63: 4901},
// 1805
{1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 584: 1418, 1418, 1418, 1418, 1418, 590: 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 602: 1418, 605: 1418, 607: 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 632: 1418, 1418, 1418, 1418, 1418, 638: 1418, 1418, 641: 1418, 643: 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 665: 1418, 1418, 672: 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 689: 1418, 1418, 1418, 694: 1418, 757: 1418, 762: 1418},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 4903},
{63: 4904},
{2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 584: 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 601: 2706, 2706, 605: 2706, 607: 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 632: 2706, 2706, 2706, 2706, 2706, 638: 2706, 2706, 641: 2706, 643: 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 665: 2706, 2706, 672: 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 2706, 689: 2706, 2706, 2706, 694: 2706, 699: 2706, 712: 2706, 756: 2706, 2706, 2706, 2706, 2706, 2706, 2706},
{613: 4906},
// 1810
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 4907},
{2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 584: 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 601: 2707, 2707, 605: 2707, 607: 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 632: 2707, 2707, 2707, 2707, 2707, 638: 2707, 2707, 641: 2707, 643: 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 665: 2707, 2707, 672: 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 2707, 689: 2707, 2707, 2707, 694: 2707, 699: 2707, 712: 2707, 756: 2707, 2707, 2707, 2707, 2707, 2707, 2707},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 3963, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4916, 3944, 4026, 3943, 3940},
{140: 4912, 296: 4910, 309: 4911, 1336: 4913},
{9: 3071, 63: 3071, 119: 3071, 143: 3071, 156: 3071, 158: 3071, 3071, 3071, 767: 3071},
// 1815
{9: 3070, 63: 3070, 119: 3070, 143: 3070, 156: 3070, 158: 3070, 3070, 3070, 767: 3070},
{9: 3069, 63: 3069, 119: 3069, 143: 3069, 156: 3069, 158: 3069, 3069, 3069, 767: 3069},
{767: 4914},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 3963, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4915, 3944, 4026, 3943, 3940},
{4, 4, 9: 4, 62: 4, 119: 4, 140: 4, 592: 4039, 757: 4, 762: 4040},
// 1820
{6, 6, 9: 6, 62: 6, 119: 6, 140: 6, 592: 4039, 757: 6, 762: 4040},
{2: 2503, 2503, 2503, 2503, 2503, 2503, 2503, 10: 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 64: 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 585: 2503, 588: 2503, 2503, 2503, 595: 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 606: 2503, 614: 2503, 631: 2503, 637: 2503, 640: 2503, 663: 2503, 2503, 667: 2503, 2503, 2503, 2503, 2503, 687: 2503, 2503, 693: 2503, 695: 2503, 2503, 2503, 2503, 700: 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 713: 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 2503, 765: 2503, 1004: 2503},
{265: 4920, 268: 4919, 284: 4922, 1004: 4921, 1335: 4923},
{3068, 3068, 9: 3068, 62: 3068, 3068, 119: 3068, 140: 3068, 156: 3068, 158: 3068, 3068, 3068, 757: 3068},
{3067, 3067, 9: 3067, 62: 3067, 3067, 119: 3067, 140: 3067, 156: 3067, 158: 3067, 3067, 3067, 757: 3067},
// 1825
{3066, 3066, 9: 3066, 62: 3066, 3066, 119: 3066, 140: 3066, 156: 3066, 158: 3066, 3066, 3066, 757: 3066},
{583: 4924},
{8, 8, 9: 8, 62: 8, 119: 8, 140: 8, 757: 8},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 589: 3289, 826: 3288, 3292, 3293, 3291, 980: 4925},
{63: 4926},
// 1830
{3065, 3065, 9: 3065, 62: 3065, 3065, 119: 3065, 140: 3065, 156: 3065, 158: 3065, 3065, 3065, 757: 3065},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 589: 3289, 668: 3872, 826: 3288, 3292, 3293, 3291, 831: 4929, 980: 4928},
{10, 10, 9: 10, 62: 10, 119: 10, 140: 10, 757: 10},
{9, 9, 9: 9, 62: 9, 119: 9, 140: 9, 757: 9},
{12, 12, 9: 12, 62: 12, 119: 12, 140: 12, 757: 12},
// 1835
{62: 3877, 119: 3878, 140: 3881, 757: 3880, 1146: 4932, 3879},
{11, 11, 9: 11, 62: 11, 119: 11, 140: 11, 757: 11},
{29, 29, 143: 4940, 214: 4939, 221: 4938, 408: 4941, 1122: 4937, 1413: 4934, 4936, 1437: 4935},
{30, 30},
{28, 28, 9: 4957, 143: 4940, 214: 4939, 221: 4938, 1122: 4956},
// 1840
{27, 27},
{26, 26, 9: 26, 143: 26, 214: 26, 221: 26},
{2: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 10: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 64: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 585: 2504, 588: 2504, 2504, 2504, 595: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 603: 2504, 2504, 4917, 2504, 631: 2504, 637: 2504, 640: 2504, 663: 2504, 2504, 667: 2504, 2504, 2504, 2504, 2504, 687: 2504, 2504, 693: 2504, 695: 2504, 2504, 2504, 2504, 700: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 713: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 765: 2504, 855: 4954},
{2: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 10: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 64: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 585: 2504, 588: 2504, 2504, 2504, 595: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 603: 2504, 2504, 4917, 2504, 631: 2504, 637: 2504, 640: 2504, 663: 2504, 2504, 667: 2504, 2504, 2504, 2504, 2504, 687: 2504, 2504, 693: 2504, 695: 2504, 2504, 2504, 2504, 700: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 713: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 765: 2504, 855: 4952},
{585: 2504, 605: 4917, 696: 2504, 855: 4947},
// 1845
{453: 4944, 4943, 4945, 494: 4942, 4946},
{19, 19},
{18, 18},
{17, 17},
{16, 16},
// 1850
{15, 15},
{585: 4948, 696: 4949},
{21, 21, 9: 21, 143: 21, 214: 21, 221: 21},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4950},
{133: 4076, 139: 4084, 163: 4072, 165: 4069, 4071, 4068, 4070, 4074, 4075, 4080, 4079, 4078, 4082, 4083, 4077, 4081, 4073, 620: 4054, 4052, 4053, 4051, 4049, 649: 4066, 4063, 4065, 4064, 4060, 4062, 4061, 4058, 4059, 4057, 4067, 856: 4050, 4048, 944: 4056, 957: 4951},
// 1855
{20, 20, 9: 20, 143: 20, 214: 20, 221: 20},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4953},
{22, 22, 9: 22, 143: 22, 214: 22, 221: 22, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4955},
{23, 23, 9: 23, 143: 23, 214: 23, 221: 23, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
// 1860
{25, 25, 9: 25, 143: 25, 214: 25, 221: 25},
{143: 4940, 214: 4939, 221: 4938, 1122: 4958},
{24, 24, 9: 24, 143: 24, 214: 24, 221: 24},
{767: 4981},
{617: 4961},
// 1865
{585: 4962},
{17: 4966, 161: 4965, 186: 4968, 4967, 1378: 4964, 1577: 4963},
{149, 149, 17: 4966, 161: 4965, 186: 4968, 4967, 1378: 4980},
{141, 141, 17: 141, 161: 141, 186: 141, 141},
{585: 2504, 605: 4917, 855: 4978},
// 1870
{585: 2504, 605: 4917, 855: 4976},
{604: 2504, 4917, 670: 2504, 2504, 855: 4974},
{604: 2504, 4917, 667: 2504, 669: 2504, 855: 4969},
{604: 3284, 667: 4971, 669: 4972, 854: 4970, 1044: 4973},
{2392, 2392, 17: 2392, 19: 2392, 70: 2392, 73: 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 143: 2392, 161: 2392, 186: 2392, 2392, 201: 2392, 584: 2392, 768: 2392},
// 1875
{2391, 2391, 17: 2391, 19: 2391, 70: 2391, 73: 2391, 2391, 2391, 2391, 2391, 2391, 2391, 2391, 2391, 2391, 2391, 2391, 2391, 2391, 2391, 2391, 2391, 2391, 2391, 2391, 2391, 2391, 2391, 2391, 2391, 2391, 2391, 2391, 2391, 2391, 2391, 2391, 2391, 143: 2391, 161: 2391, 186: 2391, 2391, 201: 2391, 584: 2391, 768: 2391},
{2390, 2390, 17: 2390, 19: 2390, 70: 2390, 73: 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390, 2390, 143: 2390, 161: 2390, 186: 2390, 2390, 201: 2390, 584: 2390, 768: 2390},
{136, 136, 17: 136, 161: 136, 186: 136, 136},
{604: 4399, 670: 4401, 4400, 962: 4975},
{137, 137, 17: 137, 161: 137, 186: 137, 137},
// 1880
{585: 4977},
{138, 138, 17: 138, 161: 138, 186: 138, 138},
{585: 4979},
{139, 139, 17: 139, 161: 139, 186: 139, 139},
{140, 140, 17: 140, 161: 140, 186: 140, 140},
// 1885
{585: 4982},
{70: 4986, 143: 4985, 201: 4987, 1377: 4984, 1576: 4983},
{150, 150, 70: 4986, 143: 4985, 201: 4987, 1377: 4994},
{146, 146, 70: 146, 143: 146, 201: 146},
{585: 2504, 605: 4917, 855: 4992},
// 1890
{585: 2504, 605: 4917, 855: 4990},
{604: 2504, 4917, 667: 2504, 669: 2504, 855: 4988},
{604: 3284, 667: 4971, 669: 4972, 854: 4970, 1044: 4989},
{142, 142, 70: 142, 143: 142, 201: 142},
{585: 4991},
// 1895
{143, 143, 70: 143, 143: 143, 201: 143},
{585: 4993},
{144, 144, 70: 144, 143: 144, 201: 144},
{145, 145, 70: 145, 143: 145, 201: 145},
{290: 4998, 430: 4996, 969: 4997},
// 1900
{586: 5006, 639: 152, 1503: 5005},
{585: 5004},
{3: 5000, 585: 4999},
{585: 5003},
{585: 5001},
// 1905
{585: 5002},
{153, 153},
{154, 154},
{155, 155},
{639: 5012},
// 1910
{255: 5007},
{794: 5008, 1082: 5009},
{198: 5010},
{639: 151},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 5011},
// 1915
{2292, 2292, 9: 2292, 16: 2292, 63: 2292, 584: 2292, 586: 2292, 593: 2292, 2292, 2292, 2292, 602: 2292, 607: 2292, 2292, 2292, 2292, 2292, 2292, 2292, 615: 2292, 2292, 618: 2292, 2292, 4054, 4052, 4053, 4051, 4049, 2292, 2292, 2292, 2292, 2292, 2292, 634: 2292, 2292, 2292, 638: 2292, 2292, 647: 2292, 856: 4050, 4048},
{155: 3269, 283: 5027, 583: 5014, 585: 5028, 3149, 600: 3148, 603: 3134, 640: 3133, 642: 3147, 692: 3143, 766: 3263, 768: 5026, 777: 5013, 830: 5015, 858: 3114, 861: 5016, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 3117, 5022, 5021, 877: 3262, 3115, 5019, 881: 5020, 5018, 890: 3116, 894: 5017, 964: 5023, 967: 5024, 985: 5025},
{602: 5053, 642: 2287, 1032: 5052},
{583: 3150, 585: 5045, 3149, 600: 3148, 642: 3147, 692: 3143, 830: 5044, 861: 4156, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 4155, 4158, 4157, 1159: 5050},
{705, 705, 593: 1112, 607: 1112, 1112, 610: 4168, 612: 4167, 619: 4166, 897: 4169, 4170},
// 1920
{707, 707, 593: 1113, 607: 1113, 1113},
{712, 712},
{711, 711},
{710, 710},
{709, 709},
// 1925
{708, 708},
{706, 706},
{704, 704},
{703, 703},
{163, 163},
// 1930
{155: 3269, 283: 5038, 583: 5036, 585: 5039, 3149, 600: 3148, 603: 3134, 640: 3133, 642: 3147, 692: 3143, 766: 3263, 777: 5013, 830: 5015, 858: 3114, 861: 5016, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 3117, 5022, 5021, 877: 3262, 3115, 5019, 881: 5020, 5018, 890: 3116, 894: 5017, 964: 5023, 967: 5024, 985: 5037},
{196: 5029},
{159, 159},
{481, 481, 609: 5030, 481, 612: 481, 619: 481, 941: 5031, 5032},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 5035},
// 1935
{480, 480, 16: 480, 63: 480, 584: 480, 586: 480, 593: 480, 480, 607: 480, 480, 610: 480, 612: 480, 480, 615: 480, 480, 619: 480, 625: 480, 480, 628: 480},
{1607, 1607, 610: 1607, 612: 1607, 619: 4166, 897: 4220, 971: 5033},
{1167, 1167, 610: 4168, 612: 4167, 898: 4225, 990: 5034},
{161, 161},
{482, 482, 16: 482, 63: 482, 584: 482, 586: 482, 593: 482, 482, 607: 482, 482, 610: 482, 612: 482, 482, 615: 482, 482, 619: 482, 4054, 4052, 4053, 4051, 4049, 482, 482, 628: 482, 856: 4050, 4048},
// 1940
{583: 3150, 585: 5045, 3149, 600: 3148, 642: 3147, 692: 3143, 830: 5044, 861: 4156, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 4155, 4158, 4157, 1159: 5046},
{162, 162},
{196: 5040},
{158, 158},
{481, 481, 609: 5030, 481, 612: 481, 619: 481, 941: 5031, 5041},
// 1945
{1607, 1607, 610: 1607, 612: 1607, 619: 4166, 897: 4220, 971: 5042},
{1167, 1167, 610: 4168, 612: 4167, 898: 4225, 990: 5043},
{160, 160},
{63: 4301, 593: 1112, 607: 1112, 1112, 610: 4168, 612: 4167, 619: 4166, 897: 4169, 4170},
{499, 499, 499, 499, 499, 499, 9: 499, 18: 499, 20: 499, 24: 499, 63: 499, 587: 499, 589: 499, 592: 499, 606: 499, 611: 499, 763: 499},
// 1950
{9: 5047, 63: 5048},
{585: 5049},
{156, 156},
{498, 498, 498, 498, 498, 498, 9: 498, 18: 498, 20: 498, 24: 498, 63: 498, 587: 498, 589: 498, 592: 498, 606: 498, 611: 498, 763: 498},
{9: 5047, 63: 5051},
// 1955
{157, 157},
{642: 5054},
{2: 2286, 2286, 2286, 2286, 2286, 2286, 2286, 10: 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 64: 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 614: 2286, 616: 2286, 2286, 642: 2286, 698: 2286, 780: 2286},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 5055},
{2903, 2903, 2903, 2903, 2903, 2903, 5103, 5107, 5105, 10: 641, 5075, 17: 5124, 2643, 5122, 5059, 5126, 5138, 5113, 5142, 5104, 5109, 5106, 5108, 5111, 5112, 5114, 5121, 5152, 641, 5147, 5132, 5133, 5143, 5146, 5119, 5120, 5125, 5127, 5153, 5139, 5148, 5149, 5150, 5155, 5140, 5137, 5130, 5135, 5136, 5129, 5131, 5134, 5123, 5151, 5144, 5145, 112: 5097, 118: 5077, 120: 5095, 5096, 155: 5080, 225: 5068, 5067, 273: 5066, 288: 5060, 291: 5058, 307: 5079, 313: 5092, 327: 5074, 336: 5081, 343: 5076, 365: 5070, 370: 5082, 381: 5093, 5094, 389: 5061, 586: 5091, 2903, 589: 5102, 592: 2643, 5141, 606: 2643, 611: 5063, 615: 5098, 618: 5090, 5083, 703: 5064, 756: 5073, 763: 2643, 5110, 768: 5057, 777: 5085, 789: 5069, 792: 5099, 821: 5078, 5086, 824: 5065, 5084, 921: 5115, 948: 5117, 972: 5116, 999: 5118, 1009: 5128, 1015: 5154, 1041: 5089, 1062: 5087, 1106: 5062, 1114: 5071, 1187: 5101, 1363: 5072, 1391: 5088, 1398: 5100, 5056},
// 1960
{2641, 2641, 6089, 6091, 6094, 6092, 587: 6095, 1156: 6093, 1309: 6090, 1400: 6088},
{587: 6060},
{3091, 3091, 245: 6054, 587: 6055},
{195: 6047},
{585: 2504, 589: 2504, 605: 4917, 855: 6044},
// 1965
{585: 2504, 589: 2504, 605: 4917, 855: 6041},
{3004, 3004, 3004, 3004, 3004, 3004, 5103, 5107, 5105, 3004, 641, 17: 5124, 2643, 5122, 5059, 5126, 5138, 5113, 5142, 5104, 5109, 5106, 5108, 5111, 5112, 5114, 5121, 5152, 641, 5147, 5132, 5133, 5143, 5146, 5119, 5120, 5125, 5127, 5153, 5139, 5148, 5149, 5150, 5155, 5140, 5137, 5130, 5135, 5136, 5129, 5131, 5134, 5123, 5151, 5144, 5145, 587: 3004, 589: 5102, 592: 2643, 5141, 606: 2643, 618: 6037, 763: 2643, 5110, 921: 5115, 948: 5117, 972: 5116, 999: 5118, 1009: 5128, 1015: 6038},
{245: 6025, 248: 6026},
{767: 6017},
{2: 2908, 2908, 2908, 2908, 2908, 2908, 2908, 10: 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 64: 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 5800, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 5798, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 5797, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 5801, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 587: 5796, 631: 2908, 699: 2897, 712: 2897, 756: 2897, 758: 2897, 5496, 764: 2897, 817: 2897, 2897, 960: 5799, 1024: 5328, 1049: 5794, 1087: 5802, 5804, 5803, 5795},
// 1970
{587: 5787},
{249: 5783, 1132: 5784},
{249: 5779, 1132: 5780},
{2: 2908, 2908, 2908, 2908, 2908, 2908, 2908, 10: 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 64: 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 5753, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 5757, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 587: 5756, 631: 2908, 699: 5314, 712: 5755, 756: 5329, 759: 5330, 764: 5315, 817: 5759, 988: 5758, 1024: 5328, 1049: 5754, 1197: 5760},
{2: 2908, 2908, 2908, 2908, 2908, 2908, 2908, 10: 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 64: 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 5725, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 631: 2908, 1024: 5328, 1049: 5726},
// 1975
{2980, 2980, 2980, 2980, 2980, 2980, 9: 2980, 587: 2980},
{2979, 2979, 2979, 2979, 2979, 2979, 9: 2979, 587: 2979},
{587: 5723},
{587: 5720},
{587: 5713},
// 1980
{587: 5702},
{587: 5700},
{587: 5697},
{587: 5694},
{23: 5691, 587: 5690},
// 1985
{23: 5687, 587: 5686},
{587: 5676},
{776: 5669},
{2: 2908, 2908, 2908, 2908, 2908, 2908, 2908, 10: 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 64: 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 631: 2908, 1024: 5328, 1049: 5354},
{2: 2908, 2908, 2908, 2908, 2908, 2908, 2908, 10: 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 64: 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 2908, 756: 5329, 759: 5330, 764: 5327, 1024: 5328, 1049: 5325, 1197: 5326},
// 1990
{2: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 10: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 64: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 591: 5312, 605: 4917, 614: 2504, 699: 5314, 764: 5315, 767: 5310, 855: 5311, 988: 5313, 1024: 5309},
{2947, 2947, 2947, 2947, 2947, 2947, 9: 2947, 587: 2947},
{2946, 2946, 2946, 2946, 2946, 2946, 9: 2946, 587: 2946},
{2945, 2945, 2945, 2945, 2945, 2945, 9: 2945, 587: 2945},
{2944, 2944, 2944, 2944, 2944, 2944, 9: 2944, 640, 34: 640, 587: 2944},
// 1995
{286: 5308},
{286: 5307},
{2941, 2941, 2941, 2941, 2941, 2941, 9: 2941, 587: 2941},
{2940, 2940, 2940, 2940, 2940, 2940, 9: 2940, 587: 2940},
{2936, 2936, 2936, 2936, 2936, 2936, 9: 2936, 587: 2936},
// 2000
{2935, 2935, 2935, 2935, 2935, 2935, 9: 2935, 587: 2935},
{65: 2504, 330: 2504, 355: 2504, 357: 2504, 589: 2504, 605: 4917, 855: 5301},
{2: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 10: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 64: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 589: 2504, 605: 4917, 855: 5298},
{241: 5297, 823: 5296},
{2902, 2902, 2902, 2902, 2902, 2902, 9: 5294, 587: 2902},
// 2005
{2901, 2901, 2901, 2901, 2901, 2901, 9: 2901, 587: 2901},
{18: 2642, 20: 2642, 24: 2642, 592: 2642, 606: 2642, 763: 2642},
{585: 2504, 605: 4917, 855: 5292},
{2: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 10: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 64: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 585: 2504, 605: 4917, 855: 5290},
{25: 5285, 274: 5286, 337: 5287},
// 2010
{2: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 10: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 64: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 585: 2504, 605: 4917, 855: 5283},
{585: 2504, 605: 4917, 855: 5281},
{2: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 10: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 64: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 585: 2504, 605: 4917, 855: 5279},
{335: 5276},
{335: 5273},
// 2015
{604: 2504, 4917, 855: 5271},
{604: 2504, 4917, 855: 5269},
{2: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 10: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 64: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 605: 4917, 855: 5267},
{604: 2504, 4917, 855: 5265},
{2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 17: 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 63: 2578, 583: 2578, 2578, 586: 2578, 2578, 589: 2578, 591: 2578, 2578, 2578, 600: 2578, 602: 2578, 2578, 606: 2578, 618: 2578, 642: 2578, 692: 2578, 763: 2578, 2578},
// 2020
{686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 17: 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, 583: 686, 686, 586: 686, 686, 589: 686, 591: 686, 686, 686, 600: 686, 602: 686, 686, 606: 686, 618: 686, 642: 686, 692: 686, 763: 686, 686},
{18: 4738, 592: 5260, 606: 4739, 763: 4737, 908: 5259},
{10: 5253, 34: 5254},
{604: 2504, 4917, 855: 5251},
{604: 2504, 4917, 855: 5249},
// 2025
{585: 2504, 605: 4917, 855: 5247},
{604: 2504, 4917, 855: 5245},
{604: 2504, 4917, 855: 5243},
{585: 2504, 605: 4917, 855: 5241},
{585: 2504, 605: 4917, 855: 5239},
// 2030
{604: 2504, 4917, 855: 5237},
{604: 2504, 4917, 855: 5235},
{672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 17: 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, 583: 672, 672, 586: 672, 672, 589: 672, 591: 672, 672, 672, 600: 672, 602: 672, 672, 606: 672, 618: 672, 642: 672, 692: 672, 763: 672, 672},
{589: 2504, 604: 2504, 4917, 855: 5233},
{589: 2504, 604: 2504, 4917, 855: 5230},
// 2035
{589: 2504, 604: 2504, 4917, 855: 5227},
{604: 2504, 4917, 855: 5225},
{604: 2504, 4917, 855: 5223},
{604: 2504, 4917, 670: 2504, 2504, 855: 5221},
{585: 2504, 605: 4917, 855: 5219},
// 2040
{585: 2504, 605: 4917, 855: 5217},
{604: 2504, 4917, 855: 5215},
{604: 2504, 4917, 855: 5213},
{589: 2504, 604: 2504, 4917, 855: 5209},
{2: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 10: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 64: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 585: 2504, 601: 2504, 605: 4917, 855: 5206},
// 2045
{583: 2504, 605: 4917, 855: 5201},
{585: 2504, 605: 4917, 855: 5198},
{2: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 10: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 64: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 605: 4917, 855: 5192},
{585: 2504, 605: 4917, 855: 5190},
{585: 2504, 605: 4917, 855: 5188},
// 2050
{2: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 10: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 64: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 585: 2504, 605: 4917, 855: 5186},
{2: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 10: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 64: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 585: 2504, 605: 4917, 855: 5184},
{604: 2504, 4917, 855: 5182},
{604: 2504, 4917, 855: 5180},
{604: 2504, 4917, 855: 5178},
// 2055
{604: 2504, 4917, 855: 5176},
{604: 2504, 4917, 855: 5174},
{2: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 10: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 64: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 585: 2504, 605: 4917, 855: 5172},
{635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 17: 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 583: 635, 635, 586: 635, 635, 589: 635, 591: 635, 635, 635, 600: 635, 602: 635, 635, 606: 635, 618: 635, 642: 635, 692: 635, 763: 635, 635},
{194: 2504, 291: 2504, 294: 2504, 328: 2504, 372: 2504, 393: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 589: 2504, 605: 4917, 855: 5156},
// 2060
{194: 5159, 291: 5162, 294: 5158, 328: 5160, 372: 5161, 393: 5163, 5164, 5169, 5168, 5165, 5170, 5171, 5166, 5167, 589: 5157},
{629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 17: 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 583: 629, 629, 586: 629, 629, 589: 629, 591: 629, 629, 629, 600: 629, 602: 629, 629, 606: 629, 618: 629, 642: 629, 692: 629, 763: 629, 629},
{628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 17: 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 583: 628, 628, 586: 628, 628, 589: 628, 591: 628, 628, 628, 600: 628, 602: 628, 628, 606: 628, 618: 628, 642: 628, 692: 628, 763: 628, 628},
{627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 17: 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 583: 627, 627, 586: 627, 627, 589: 627, 591: 627, 627, 627, 600: 627, 602: 627, 627, 606: 627, 618: 627, 642: 627, 692: 627, 763: 627, 627},
{626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 17: 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 583: 626, 626, 586: 626, 626, 589: 626, 591: 626, 626, 626, 600: 626, 602: 626, 626, 606: 626, 618: 626, 642: 626, 692: 626, 763: 626, 626},
// 2065
{625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 17: 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 583: 625, 625, 586: 625, 625, 589: 625, 591: 625, 625, 625, 600: 625, 602: 625, 625, 606: 625, 618: 625, 642: 625, 692: 625, 763: 625, 625},
{624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 17: 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 583: 624, 624, 586: 624, 624, 589: 624, 591: 624, 624, 624, 600: 624, 602: 624, 624, 606: 624, 618: 624, 642: 624, 692: 624, 763: 624, 624},
{623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 17: 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 583: 623, 623, 586: 623, 623, 589: 623, 591: 623, 623, 623, 600: 623, 602: 623, 623, 606: 623, 618: 623, 642: 623, 692: 623, 763: 623, 623},
{622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 17: 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 583: 622, 622, 586: 622, 622, 589: 622, 591: 622, 622, 622, 600: 622, 602: 622, 622, 606: 622, 618: 622, 642: 622, 692: 622, 763: 622, 622},
{621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 17: 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 583: 621, 621, 586: 621, 621, 589: 621, 591: 621, 621, 621, 600: 621, 602: 621, 621, 606: 621, 618: 621, 642: 621, 692: 621, 763: 621, 621},
// 2070
{620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 17: 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 583: 620, 620, 586: 620, 620, 589: 620, 591: 620, 620, 620, 600: 620, 602: 620, 620, 606: 620, 618: 620, 642: 620, 692: 620, 763: 620, 620},
{619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 17: 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 583: 619, 619, 586: 619, 619, 589: 619, 591: 619, 619, 619, 600: 619, 602: 619, 619, 606: 619, 618: 619, 642: 619, 692: 619, 763: 619, 619},
{618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 17: 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 583: 618, 618, 586: 618, 618, 589: 618, 591: 618, 618, 618, 600: 618, 602: 618, 618, 606: 618, 618: 618, 642: 618, 692: 618, 763: 618, 618},
{617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 17: 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 583: 617, 617, 586: 617, 617, 589: 617, 591: 617, 617, 617, 600: 617, 602: 617, 617, 606: 617, 618: 617, 642: 617, 692: 617, 763: 617, 617},
{616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 17: 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 583: 616, 616, 586: 616, 616, 589: 616, 591: 616, 616, 616, 600: 616, 602: 616, 616, 606: 616, 618: 616, 642: 616, 692: 616, 763: 616, 616},
// 2075
{615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 17: 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 583: 615, 615, 586: 615, 615, 589: 615, 591: 615, 615, 615, 600: 615, 602: 615, 615, 606: 615, 618: 615, 642: 615, 692: 615, 763: 615, 615},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 826: 4046, 3292, 3293, 3291, 860: 5173},
{642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 17: 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, 583: 642, 642, 586: 642, 642, 589: 642, 591: 642, 642, 642, 600: 642, 602: 642, 642, 606: 642, 618: 642, 642: 642, 692: 642, 763: 642, 642},
{604: 3284, 854: 4175, 865: 5175},
{643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 17: 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, 583: 643, 643, 586: 643, 643, 589: 643, 591: 643, 643, 643, 600: 643, 602: 643, 643, 606: 643, 618: 643, 642: 643, 692: 643, 763: 643, 643},
// 2080
{604: 3284, 854: 4175, 865: 5177},
{644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 17: 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, 583: 644, 644, 586: 644, 644, 589: 644, 591: 644, 644, 644, 600: 644, 602: 644, 644, 606: 644, 618: 644, 642: 644, 692: 644, 763: 644, 644},
{604: 3284, 854: 4175, 865: 5179},
{645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 17: 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, 583: 645, 645, 586: 645, 645, 589: 645, 591: 645, 645, 645, 600: 645, 602: 645, 645, 606: 645, 618: 645, 642: 645, 692: 645, 763: 645, 645},
{604: 3284, 854: 4175, 865: 5181},
// 2085
{646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 17: 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, 583: 646, 646, 586: 646, 646, 589: 646, 591: 646, 646, 646, 600: 646, 602: 646, 646, 606: 646, 618: 646, 642: 646, 692: 646, 763: 646, 646},
{604: 3284, 854: 4175, 865: 5183},
{647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 17: 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 647, 583: 647, 647, 586: 647, 647, 589: 647, 591: 647, 647, 647, 600: 647, 602: 647, 647, 606: 647, 618: 647, 642: 647, 692: 647, 763: 647, 647},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 826: 4046, 3292, 3293, 3291, 860: 5185},
{648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 17: 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, 583: 648, 648, 586: 648, 648, 589: 648, 591: 648, 648, 648, 600: 648, 602: 648, 648, 606: 648, 618: 648, 642: 648, 692: 648, 763: 648, 648},
// 2090
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 826: 4046, 3292, 3293, 3291, 860: 5187},
{649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 17: 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, 583: 649, 649, 586: 649, 649, 589: 649, 591: 649, 649, 649, 600: 649, 602: 649, 649, 606: 649, 618: 649, 642: 649, 692: 649, 763: 649, 649},
{585: 5189},
{650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 17: 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 650, 583: 650, 650, 586: 650, 650, 589: 650, 591: 650, 650, 650, 600: 650, 602: 650, 650, 606: 650, 618: 650, 642: 650, 692: 650, 763: 650, 650},
{585: 5191},
// 2095
{651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 17: 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 583: 651, 651, 586: 651, 651, 589: 651, 591: 651, 651, 651, 600: 651, 602: 651, 651, 606: 651, 618: 651, 642: 651, 692: 651, 763: 651, 651},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5193, 3292, 3293, 3291},
{597: 5194},
{696: 5195},
{585: 3933, 601: 3924, 604: 3928, 667: 3923, 669: 3925, 3927, 3926, 688: 3931, 693: 3932, 702: 3930, 832: 5196, 3929},
// 2100
{133: 4076, 139: 4084, 163: 4072, 165: 4069, 4071, 4068, 4070, 4074, 4075, 4080, 4079, 4078, 4082, 4083, 4077, 4081, 4073, 649: 4066, 4063, 4065, 4064, 4060, 4062, 4061, 4058, 4059, 4057, 4067, 944: 4056, 957: 5197},
{652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 17: 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 652, 583: 652, 652, 586: 652, 652, 589: 652, 591: 652, 652, 652, 600: 652, 602: 652, 652, 606: 652, 618: 652, 642: 652, 692: 652, 763: 652, 652},
{585: 5200, 1241: 5199},
{653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 17: 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, 583: 653, 653, 586: 653, 653, 589: 653, 591: 653, 653, 653, 600: 653, 602: 653, 653, 606: 653, 618: 653, 642: 653, 692: 653, 763: 653, 653},
{167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 17: 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 583: 167, 167, 586: 167, 167, 589: 167, 591: 167, 167, 167, 600: 167, 602: 167, 167, 606: 167, 611: 167, 618: 167, 642: 167, 692: 167, 763: 167, 167},
// 2105
{583: 5202},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 834, 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 4238, 939: 5203, 1372: 5204},
{833, 833, 9: 4240, 63: 833, 586: 833},
{63: 5205},
{654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 17: 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 654, 583: 654, 654, 586: 654, 654, 589: 654, 591: 654, 654, 654, 600: 654, 602: 654, 654, 606: 654, 618: 654, 642: 654, 692: 654, 763: 654, 654},
// 2110
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 601: 5207, 826: 4046, 3292, 3293, 3291, 860: 5208},
{656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 17: 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 656, 583: 656, 656, 586: 656, 656, 589: 656, 591: 656, 656, 656, 600: 656, 602: 656, 656, 606: 656, 618: 656, 642: 656, 692: 656, 763: 656, 656},
{655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 17: 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 655, 583: 655, 655, 586: 655, 655, 589: 655, 591: 655, 655, 655, 600: 655, 602: 655, 655, 606: 655, 618: 655, 642: 655, 692: 655, 763: 655, 655},
{589: 5211, 604: 3284, 854: 4175, 865: 5212, 1364: 5210},
{659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 17: 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, 583: 659, 659, 586: 659, 659, 589: 659, 591: 659, 659, 659, 600: 659, 602: 659, 659, 606: 659, 618: 659, 642: 659, 692: 659, 763: 659, 659},
// 2115
{639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 17: 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, 583: 639, 639, 586: 639, 639, 589: 639, 591: 639, 639, 639, 600: 639, 602: 639, 639, 606: 639, 618: 639, 642: 639, 692: 639, 763: 639, 639},
{638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 17: 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 638, 583: 638, 638, 586: 638, 638, 589: 638, 591: 638, 638, 638, 600: 638, 602: 638, 638, 606: 638, 618: 638, 642: 638, 692: 638, 763: 638, 638},
{604: 3284, 854: 4175, 865: 5214},
{660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 17: 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 660, 583: 660, 660, 586: 660, 660, 589: 660, 591: 660, 660, 660, 600: 660, 602: 660, 660, 606: 660, 618: 660, 642: 660, 692: 660, 763: 660, 660},
{604: 3284, 854: 4175, 865: 5216},
// 2120
{661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 17: 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, 583: 661, 661, 586: 661, 661, 589: 661, 591: 661, 661, 661, 600: 661, 602: 661, 661, 606: 661, 618: 661, 642: 661, 692: 661, 763: 661, 661},
{585: 5218},
{662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 17: 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 662, 583: 662, 662, 586: 662, 662, 589: 662, 591: 662, 662, 662, 600: 662, 602: 662, 662, 606: 662, 618: 662, 642: 662, 692: 662, 763: 662, 662},
{585: 5220},
{663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 17: 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, 583: 663, 663, 586: 663, 663, 589: 663, 591: 663, 663, 663, 600: 663, 602: 663, 663, 606: 663, 618: 663, 642: 663, 692: 663, 763: 663, 663},
// 2125
{604: 4399, 670: 4401, 4400, 962: 5222},
{664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 17: 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, 583: 664, 664, 586: 664, 664, 589: 664, 591: 664, 664, 664, 600: 664, 602: 664, 664, 606: 664, 618: 664, 642: 664, 692: 664, 763: 664, 664},
{604: 3284, 854: 4175, 865: 5224},
{665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 17: 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 665, 583: 665, 665, 586: 665, 665, 589: 665, 591: 665, 665, 665, 600: 665, 602: 665, 665, 606: 665, 618: 665, 642: 665, 692: 665, 763: 665, 665},
{604: 3284, 854: 4175, 865: 5226},
// 2130
{666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 17: 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, 583: 666, 666, 586: 666, 666, 589: 666, 591: 666, 666, 666, 600: 666, 602: 666, 666, 606: 666, 618: 666, 642: 666, 692: 666, 763: 666, 666},
{589: 5229, 604: 3284, 854: 4175, 865: 5228},
{668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 17: 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, 583: 668, 668, 586: 668, 668, 589: 668, 591: 668, 668, 668, 600: 668, 602: 668, 668, 606: 668, 618: 668, 642: 668, 692: 668, 763: 668, 668},
{667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 17: 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 583: 667, 667, 586: 667, 667, 589: 667, 591: 667, 667, 667, 600: 667, 602: 667, 667, 606: 667, 618: 667, 642: 667, 692: 667, 763: 667, 667},
{589: 5232, 604: 3284, 854: 4175, 865: 5231},
// 2135
{670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 17: 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, 583: 670, 670, 586: 670, 670, 589: 670, 591: 670, 670, 670, 600: 670, 602: 670, 670, 606: 670, 618: 670, 642: 670, 692: 670, 763: 670, 670},
{669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 17: 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 669, 583: 669, 669, 586: 669, 669, 589: 669, 591: 669, 669, 669, 600: 669, 602: 669, 669, 606: 669, 618: 669, 642: 669, 692: 669, 763: 669, 669},
{589: 5211, 604: 3284, 854: 4175, 865: 5212, 1364: 5234},
{671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 17: 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, 583: 671, 671, 586: 671, 671, 589: 671, 591: 671, 671, 671, 600: 671, 602: 671, 671, 606: 671, 618: 671, 642: 671, 692: 671, 763: 671, 671},
{604: 3284, 854: 4175, 865: 5236},
// 2140
{673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 17: 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, 583: 673, 673, 586: 673, 673, 589: 673, 591: 673, 673, 673, 600: 673, 602: 673, 673, 606: 673, 618: 673, 642: 673, 692: 673, 763: 673, 673},
{604: 3284, 854: 4175, 865: 5238},
{674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 17: 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, 583: 674, 674, 586: 674, 674, 589: 674, 591: 674, 674, 674, 600: 674, 602: 674, 674, 606: 674, 618: 674, 642: 674, 692: 674, 763: 674, 674},
{585: 5240},
{675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 17: 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 675, 583: 675, 675, 586: 675, 675, 589: 675, 591: 675, 675, 675, 600: 675, 602: 675, 675, 606: 675, 618: 675, 642: 675, 692: 675, 763: 675, 675},
// 2145
{585: 5242},
{676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 17: 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, 583: 676, 676, 586: 676, 676, 589: 676, 591: 676, 676, 676, 600: 676, 602: 676, 676, 606: 676, 618: 676, 642: 676, 692: 676, 763: 676, 676},
{604: 3284, 854: 4175, 865: 5244},
{677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 17: 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 677, 583: 677, 677, 586: 677, 677, 589: 677, 591: 677, 677, 677, 600: 677, 602: 677, 677, 606: 677, 618: 677, 642: 677, 692: 677, 763: 677, 677},
{604: 3284, 854: 4175, 865: 5246},
// 2150
{678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 17: 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 583: 678, 678, 586: 678, 678, 589: 678, 591: 678, 678, 678, 600: 678, 602: 678, 678, 606: 678, 618: 678, 642: 678, 692: 678, 763: 678, 678},
{585: 5248},
{679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 17: 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, 583: 679, 679, 586: 679, 679, 589: 679, 591: 679, 679, 679, 600: 679, 602: 679, 679, 606: 679, 618: 679, 642: 679, 692: 679, 763: 679, 679},
{604: 3284, 854: 4175, 865: 5250},
{680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 17: 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 583: 680, 680, 586: 680, 680, 589: 680, 591: 680, 680, 680, 600: 680, 602: 680, 680, 606: 680, 618: 680, 642: 680, 692: 680, 763: 680, 680},
// 2155
{604: 3284, 854: 4175, 865: 5252},
{682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 17: 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, 583: 682, 682, 586: 682, 682, 589: 682, 591: 682, 682, 682, 600: 682, 602: 682, 682, 606: 682, 618: 682, 642: 682, 692: 682, 763: 682, 682},
{604: 2504, 4917, 855: 5257},
{604: 2504, 4917, 855: 5255},
{604: 3284, 854: 4175, 865: 5256},
// 2160
{681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 17: 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, 583: 681, 681, 586: 681, 681, 589: 681, 591: 681, 681, 681, 600: 681, 602: 681, 681, 606: 681, 618: 681, 642: 681, 692: 681, 763: 681, 681},
{604: 3284, 854: 4175, 865: 5258},
{683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 17: 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 683, 583: 683, 683, 586: 683, 683, 589: 683, 591: 683, 683, 683, 600: 683, 602: 683, 683, 606: 683, 618: 683, 642: 683, 692: 683, 763: 683, 683},
{2: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 10: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 64: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 585: 2504, 605: 4917, 637: 2504, 855: 5263},
{2: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 10: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 64: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 585: 2504, 605: 4917, 637: 2504, 855: 5261},
// 2165
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 637: 4044, 826: 4046, 3292, 3293, 3291, 860: 4043, 1048: 5262},
{684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 17: 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, 583: 684, 684, 586: 684, 684, 589: 684, 591: 684, 684, 684, 600: 684, 602: 684, 684, 606: 684, 618: 684, 642: 684, 692: 684, 763: 684, 684},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 637: 4666, 826: 4046, 3292, 3293, 3291, 860: 4665, 965: 5264},
{685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 17: 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, 583: 685, 685, 586: 685, 685, 589: 685, 591: 685, 685, 685, 600: 685, 602: 685, 685, 606: 685, 618: 685, 642: 685, 692: 685, 763: 685, 685},
{604: 3284, 854: 4175, 865: 5266},
// 2170
{2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 17: 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 63: 2579, 583: 2579, 2579, 586: 2579, 2579, 589: 2579, 591: 2579, 2579, 2579, 600: 2579, 602: 2579, 2579, 606: 2579, 618: 2579, 642: 2579, 692: 2579, 763: 2579, 2579},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5268, 3292, 3293, 3291},
{2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 17: 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 63: 2580, 583: 2580, 2580, 586: 2580, 2580, 589: 2580, 591: 2580, 2580, 2580, 600: 2580, 602: 2580, 2580, 606: 2580, 618: 2580, 642: 2580, 692: 2580, 763: 2580, 2580},
{604: 3284, 854: 4175, 865: 5270},
{2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 17: 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 63: 2581, 583: 2581, 2581, 586: 2581, 2581, 589: 2581, 591: 2581, 2581, 2581, 600: 2581, 602: 2581, 2581, 606: 2581, 618: 2581, 642: 2581, 692: 2581, 763: 2581, 2581},
// 2175
{604: 3284, 854: 4175, 865: 5272},
{2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 17: 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 63: 2582, 583: 2582, 2582, 586: 2582, 2582, 589: 2582, 591: 2582, 2582, 2582, 600: 2582, 602: 2582, 2582, 606: 2582, 618: 2582, 642: 2582, 692: 2582, 763: 2582, 2582},
{585: 2504, 605: 4917, 855: 5274},
{585: 5275},
{2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 17: 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 63: 2583, 583: 2583, 2583, 586: 2583, 2583, 589: 2583, 591: 2583, 2583, 2583, 600: 2583, 602: 2583, 2583, 606: 2583, 618: 2583, 642: 2583, 692: 2583, 763: 2583, 2583},
// 2180
{585: 2504, 605: 4917, 855: 5277},
{585: 5278},
{2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 17: 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 63: 2584, 583: 2584, 2584, 586: 2584, 2584, 589: 2584, 591: 2584, 2584, 2584, 600: 2584, 602: 2584, 2584, 606: 2584, 618: 2584, 642: 2584, 692: 2584, 763: 2584, 2584},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 826: 4046, 3292, 3293, 3291, 860: 5280},
{2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 17: 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 63: 2585, 583: 2585, 2585, 586: 2585, 2585, 589: 2585, 591: 2585, 2585, 2585, 600: 2585, 602: 2585, 2585, 606: 2585, 618: 2585, 642: 2585, 692: 2585, 763: 2585, 2585},
// 2185
{585: 5282},
{2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 17: 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 63: 2586, 583: 2586, 2586, 586: 2586, 2586, 589: 2586, 591: 2586, 2586, 2586, 600: 2586, 602: 2586, 2586, 606: 2586, 618: 2586, 642: 2586, 692: 2586, 763: 2586, 2586},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 826: 4046, 3292, 3293, 3291, 860: 5284},
{2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 17: 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 63: 2587, 583: 2587, 2587, 586: 2587, 2587, 589: 2587, 591: 2587, 2587, 2587, 600: 2587, 602: 2587, 2587, 606: 2587, 618: 2587, 642: 2587, 692: 2587, 763: 2587, 2587},
{2: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 10: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 64: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 585: 2504, 605: 4917, 855: 5288},
// 2190
{658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 17: 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, 583: 658, 658, 586: 658, 658, 589: 658, 591: 658, 658, 658, 600: 658, 602: 658, 658, 606: 658, 618: 658, 642: 658, 692: 658, 763: 658, 658},
{657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 17: 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, 583: 657, 657, 586: 657, 657, 589: 657, 591: 657, 657, 657, 600: 657, 602: 657, 657, 606: 657, 618: 657, 642: 657, 692: 657, 763: 657, 657},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 826: 4046, 3292, 3293, 3291, 860: 5289},
{2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 17: 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 63: 2588, 583: 2588, 2588, 586: 2588, 2588, 589: 2588, 591: 2588, 2588, 2588, 600: 2588, 602: 2588, 2588, 606: 2588, 618: 2588, 642: 2588, 692: 2588, 763: 2588, 2588},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 826: 4046, 3292, 3293, 3291, 860: 5291},
// 2195
{2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 17: 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 63: 2589, 583: 2589, 2589, 586: 2589, 2589, 589: 2589, 591: 2589, 2589, 2589, 600: 2589, 602: 2589, 2589, 606: 2589, 618: 2589, 642: 2589, 692: 2589, 763: 2589, 2589},
{585: 5293},
{2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 17: 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 63: 2590, 583: 2590, 2590, 586: 2590, 2590, 589: 2590, 591: 2590, 2590, 2590, 600: 2590, 602: 2590, 2590, 606: 2590, 618: 2590, 642: 2590, 692: 2590, 763: 2590, 2590},
{6: 5103, 5107, 5105, 10: 641, 5075, 17: 5124, 2643, 5122, 5059, 5126, 5138, 5113, 5142, 5104, 5109, 5106, 5108, 5111, 5112, 5114, 5121, 5152, 641, 5147, 5132, 5133, 5143, 5146, 5119, 5120, 5125, 5127, 5153, 5139, 5148, 5149, 5150, 5155, 5140, 5137, 5130, 5135, 5136, 5129, 5131, 5134, 5123, 5151, 5144, 5145, 112: 5097, 118: 5077, 120: 5095, 5096, 155: 5080, 225: 5068, 5067, 273: 5066, 288: 5060, 307: 5079, 313: 5092, 327: 5074, 336: 5081, 343: 5076, 365: 5070, 370: 5082, 381: 5093, 5094, 389: 5061, 586: 5091, 589: 5102, 592: 2643, 5141, 606: 2643, 611: 5063, 615: 5098, 618: 5090, 5083, 703: 5064, 756: 5073, 763: 2643, 5110, 777: 5085, 789: 5069, 792: 5099, 821: 5078, 5086, 824: 5065, 5084, 921: 5115, 948: 5117, 972: 5116, 999: 5118, 1009: 5128, 1015: 5154, 1041: 5089, 1062: 5087, 1106: 5062, 1114: 5071, 1187: 5295, 1363: 5072, 1391: 5088},
{2900, 2900, 2900, 2900, 2900, 2900, 9: 2900, 587: 2900},
// 2200
{2914, 2914, 2914, 2914, 2914, 2914, 9: 2914, 587: 2914},
{2913, 2913, 2913, 2913, 2913, 2913, 9: 2913, 587: 2913},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 589: 5299, 826: 5300, 3292, 3293, 3291},
{2916, 2916, 2916, 2916, 2916, 2916, 9: 2916, 112: 2916, 587: 2916},
{2915, 2915, 2915, 2915, 2915, 2915, 9: 2915, 112: 2915, 587: 2915},
// 2205
{65: 5306, 330: 5303, 355: 5304, 357: 5305, 589: 5302},
{2921, 2921, 2921, 2921, 2921, 2921, 9: 2921, 587: 2921, 615: 2921},
{2920, 2920, 2920, 2920, 2920, 2920, 9: 2920, 587: 2920, 615: 2920},
{2919, 2919, 2919, 2919, 2919, 2919, 9: 2919, 587: 2919, 615: 2919},
{2918, 2918, 2918, 2918, 2918, 2918, 9: 2918, 587: 2918, 615: 2918},
// 2210
{2917, 2917, 2917, 2917, 2917, 2917, 9: 2917, 587: 2917, 615: 2917},
{2942, 2942, 2942, 2942, 2942, 2942, 9: 2942, 587: 2942},
{2943, 2943, 2943, 2943, 2943, 2943, 9: 2943, 587: 2943},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5322, 3292, 3293, 3291},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 5321},
// 2215
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 5320},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 5319},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5316, 3292, 3293, 3291},
{2: 2912, 2912, 2912, 2912, 2912, 2912, 2912, 10: 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 64: 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 2912, 594: 2912, 613: 2912, 631: 2912},
{2: 2911, 2911, 2911, 2911, 2911, 2911, 2911, 10: 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 64: 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 2911, 594: 2911, 613: 2911, 631: 2911},
// 2220
{767: 5317},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5318, 3292, 3293, 3291},
{2948, 2948, 2948, 2948, 2948, 2948, 9: 2948, 587: 2948},
{2949, 2949, 2949, 2949, 2949, 2949, 9: 2949, 587: 2949},
{2950, 2950, 2950, 2950, 2950, 2950, 9: 2950, 587: 2950},
// 2225
{2951, 2951, 2951, 2951, 2951, 2951, 9: 2951, 587: 2951},
{767: 5323},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5324, 3292, 3293, 3291},
{2952, 2952, 2952, 2952, 2952, 2952, 9: 2952, 587: 2952},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4336, 3292, 3293, 3291, 876: 5340},
// 2230
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5335, 3292, 3293, 3291},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5331, 3292, 3293, 3291},
{2: 2907, 2907, 2907, 2907, 2907, 2907, 2907, 10: 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 64: 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 2907, 631: 2907},
{2: 694, 694, 694, 694, 694, 694, 694, 10: 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 64: 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, 694},
{2: 693, 693, 693, 693, 693, 693, 693, 10: 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 64: 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, 693},
// 2235
{108: 5334, 110: 5333, 986: 5332},
{2937, 2937, 2937, 2937, 2937, 2937, 9: 2937, 587: 2937},
{2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 9: 2255, 21: 2255, 2255, 63: 2255, 69: 2255, 71: 2255, 106: 2255, 2255, 2255, 2255, 2255, 2255, 2255, 586: 2255, 2255, 594: 2255, 609: 2255, 615: 2255},
{2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 9: 2254, 21: 2254, 2254, 63: 2254, 69: 2254, 71: 2254, 106: 2254, 2254, 2254, 2254, 2254, 2254, 2254, 586: 2254, 2254, 594: 2254, 609: 2254, 615: 2254},
{236: 5337, 588: 4121, 590: 4120, 949: 5338, 1124: 5336},
// 2240
{2939, 2939, 2939, 2939, 2939, 2939, 9: 2939, 587: 2939},
{2795, 2795, 2795, 2795, 2795, 2795, 2795, 2795, 2795, 2795, 2795, 2795, 2795, 2795, 2795, 2795, 63: 2795, 584: 2795, 587: 2795, 2795, 2795, 2795, 2795, 2795, 601: 2795, 699: 2795, 712: 2795, 756: 2795, 758: 2795, 2795, 2795, 2795},
{236: 5339},
{2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794, 2794, 63: 2794, 584: 2794, 587: 2794, 2794, 2794, 2794, 2794, 2794, 601: 2794, 699: 2794, 712: 2794, 756: 2794, 758: 2794, 2794, 2794, 2794},
{611: 5341, 789: 5342},
// 2245
{589: 5344},
{589: 5343},
{2953, 2953, 2953, 2953, 2953, 2953, 9: 2953, 587: 2953},
{583: 5346, 585: 3933, 597: 5348, 5349, 601: 3924, 604: 3928, 667: 3923, 669: 3925, 3927, 3926, 688: 3931, 693: 3932, 702: 3930, 832: 5347, 3929, 1073: 5345},
{2955, 2955, 2955, 2955, 2955, 2955, 9: 2955, 587: 2955},
// 2250
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 5352},
{2696, 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2696, 2696, 63: 2696, 584: 2696, 587: 2696, 2696, 2696, 2696, 2696, 2696, 601: 2696, 699: 2696, 712: 2696, 756: 2696, 758: 2696, 2696, 2696, 2696},
{604: 4399, 670: 4401, 4400, 962: 5351},
{604: 4399, 670: 4401, 4400, 962: 5350},
{2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694, 2694, 63: 2694, 584: 2694, 587: 2694, 2694, 2694, 2694, 2694, 2694, 601: 2694, 699: 2694, 712: 2694, 756: 2694, 758: 2694, 2694, 2694, 2694},
// 2255
{2695, 2695, 2695, 2695, 2695, 2695, 2695, 2695, 2695, 2695, 2695, 2695, 2695, 2695, 2695, 2695, 63: 2695, 584: 2695, 587: 2695, 2695, 2695, 2695, 2695, 2695, 601: 2695, 699: 2695, 712: 2695, 756: 2695, 758: 2695, 2695, 2695, 2695},
{63: 5353, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{2954, 2954, 2954, 2954, 2954, 2954, 9: 2954, 587: 2954},
{2: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 10: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 64: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 631: 5356, 914: 5355},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4336, 3292, 3293, 3291, 876: 5358},
// 2260
{701: 5357},
{2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 64: 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 2290, 585: 2290, 587: 2290, 589: 2290, 614: 2290, 687: 2290},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4336, 3292, 3293, 3291, 876: 5360, 1025: 5359},
{2906, 2906, 2906, 2906, 2906, 2906, 9: 2906, 11: 5666, 5667, 587: 2906, 996: 5665},
{13: 5362, 133: 5414, 139: 5415, 185: 5404, 189: 5425, 5424, 192: 5427, 5406, 5387, 198: 5426, 5384, 210: 5421, 212: 5393, 5383, 215: 5402, 218: 5410, 5409, 5413, 606: 5408, 611: 5403, 637: 5398, 763: 5407, 782: 5390, 5388, 5385, 5389, 5412, 5411, 790: 5381, 5375, 793: 5399, 795: 5382, 5417, 5391, 5392, 5376, 5377, 5378, 5379, 5380, 5405, 5419, 5423, 5418, 5373, 5422, 5374, 5386, 5372, 5416, 5371, 5420, 975: 5394, 1040: 5396, 1042: 5370, 5400, 1045: 5367, 1050: 5365, 1055: 5368, 5369, 1060: 5366, 1063: 5395, 5363, 5397, 1074: 5364, 1078: 5401, 5361, 1081: 5428},
// 2265
{2752, 2752, 2752, 2752, 2752, 2752, 5507, 5515, 5513, 2752, 5501, 2752, 2752, 5505, 5514, 5512, 63: 2752, 584: 5506, 587: 2752, 4121, 5504, 4120, 2759, 5511, 601: 5500, 699: 2799, 712: 5498, 756: 2897, 758: 5503, 5496, 5519, 5516, 949: 5499, 960: 5508, 989: 5510, 995: 5517, 1000: 5509, 1006: 5502, 1026: 5518, 5664},
{2752, 2752, 2752, 2752, 2752, 2752, 5507, 5515, 5513, 2752, 5501, 2752, 2752, 5505, 5514, 5512, 63: 2752, 584: 5506, 587: 2752, 4121, 5504, 4120, 2759, 5511, 601: 5500, 699: 2799, 712: 5498, 756: 2897, 758: 5503, 5496, 5519, 5516, 949: 5499, 960: 5508, 989: 5510, 995: 5517, 1000: 5509, 1006: 5502, 1026: 5518, 5497},
{614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 63: 614, 584: 614, 587: 614, 614, 614, 614, 614, 614, 601: 614, 699: 614, 712: 614, 756: 614, 758: 614, 614, 614, 614},
{613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 63: 613, 584: 613, 587: 613, 613, 613, 613, 613, 613, 601: 613, 699: 613, 712: 613, 756: 613, 758: 613, 613, 613, 613},
{612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 63: 612, 584: 612, 587: 612, 612, 612, 612, 612, 612, 601: 612, 699: 612, 712: 612, 756: 612, 758: 612, 612, 612, 612},
// 2270
{525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 63: 525, 72: 525, 583: 4714, 525, 587: 525, 525, 525, 525, 525, 525, 601: 525, 699: 525, 712: 525, 756: 525, 758: 525, 525, 525, 525, 873: 525, 525, 896: 4715, 940: 5494},
{520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 63: 520, 72: 520, 584: 520, 587: 520, 520, 520, 520, 520, 520, 601: 520, 699: 520, 712: 520, 756: 520, 758: 520, 520, 520, 520, 873: 520, 520, 1054: 5493},
{518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 63: 518, 72: 518, 583: 4719, 518, 587: 518, 518, 518, 518, 518, 518, 601: 518, 699: 518, 712: 518, 756: 518, 758: 518, 518, 518, 518, 873: 518, 518, 896: 4720, 1092: 5491, 1101: 4721},
{518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 63: 518, 72: 518, 583: 4719, 518, 587: 518, 518, 518, 518, 518, 518, 601: 518, 699: 518, 712: 518, 756: 518, 758: 518, 518, 518, 518, 873: 518, 518, 896: 4720, 1092: 5489, 1101: 4721},
{525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 63: 525, 583: 4714, 525, 587: 525, 525, 525, 525, 525, 525, 601: 525, 699: 525, 712: 525, 756: 525, 758: 525, 525, 525, 525, 896: 4715, 940: 5488},
// 2275
{606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 63: 606, 72: 606, 583: 606, 606, 587: 606, 606, 606, 606, 606, 606, 601: 606, 699: 606, 712: 606, 756: 606, 758: 606, 606, 606, 606, 873: 606, 606},
{605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 63: 605, 72: 605, 583: 605, 605, 587: 605, 605, 605, 605, 605, 605, 601: 605, 699: 605, 712: 605, 756: 605, 758: 605, 605, 605, 605, 873: 605, 605},
{604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 63: 604, 72: 604, 583: 604, 604, 587: 604, 604, 604, 604, 604, 604, 601: 604, 699: 604, 712: 604, 756: 604, 758: 604, 604, 604, 604, 873: 604, 604},
{603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 63: 603, 72: 603, 583: 603, 603, 587: 603, 603, 603, 603, 603, 603, 601: 603, 699: 603, 712: 603, 756: 603, 758: 603, 603, 603, 603, 873: 603, 603},
{602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 63: 602, 72: 602, 583: 602, 602, 587: 602, 602, 602, 602, 602, 602, 601: 602, 699: 602, 712: 602, 756: 602, 758: 602, 602, 602, 602, 873: 602, 602},
// 2280
{601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 63: 601, 72: 601, 583: 601, 601, 587: 601, 601, 601, 601, 601, 601, 601: 601, 699: 601, 712: 601, 756: 601, 758: 601, 601, 601, 601, 873: 601, 601},
{600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 63: 600, 72: 600, 583: 600, 600, 587: 600, 600, 600, 600, 600, 600, 601: 600, 699: 600, 712: 600, 756: 600, 758: 600, 600, 600, 600, 873: 600, 600},
{599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 63: 599, 72: 599, 583: 599, 599, 587: 599, 599, 599, 599, 599, 599, 601: 599, 699: 599, 712: 599, 756: 599, 758: 599, 599, 599, 599, 873: 599, 599},
{598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 63: 598, 72: 598, 583: 598, 598, 587: 598, 598, 598, 598, 598, 598, 601: 598, 699: 598, 712: 598, 756: 598, 758: 598, 598, 598, 598, 873: 598, 598},
{597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 63: 597, 72: 597, 583: 597, 597, 587: 597, 597, 597, 597, 597, 597, 601: 597, 699: 597, 712: 597, 756: 597, 758: 597, 597, 597, 597, 873: 597, 597},
// 2285
{596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 63: 596, 72: 596, 583: 596, 596, 587: 596, 596, 596, 596, 596, 596, 601: 596, 699: 596, 712: 596, 756: 596, 758: 596, 596, 596, 596, 873: 596, 596},
{595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 63: 595, 72: 595, 583: 595, 595, 587: 595, 595, 595, 595, 595, 595, 601: 595, 699: 595, 712: 595, 756: 595, 758: 595, 595, 595, 595, 873: 595, 595},
{594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 63: 594, 72: 594, 584: 594, 587: 594, 594, 594, 594, 594, 594, 601: 594, 699: 594, 712: 594, 756: 594, 758: 594, 594, 594, 594, 873: 594, 594},
{593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 63: 593, 72: 593, 584: 593, 587: 593, 593, 593, 593, 593, 593, 601: 593, 699: 593, 712: 593, 756: 593, 758: 593, 593, 593, 593, 873: 593, 593},
{589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 63: 589, 72: 589, 583: 589, 589, 587: 589, 589, 589, 589, 589, 589, 601: 589, 699: 589, 712: 589, 756: 589, 758: 589, 589, 589, 589, 873: 589, 589},
// 2290
{588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 63: 588, 72: 588, 583: 588, 588, 587: 588, 588, 588, 588, 588, 588, 601: 588, 699: 588, 712: 588, 756: 588, 758: 588, 588, 588, 588, 873: 588, 588},
{587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 63: 587, 72: 587, 583: 587, 587, 587: 587, 587, 587, 587, 587, 587, 601: 587, 699: 587, 712: 587, 756: 587, 758: 587, 587, 587, 587, 873: 587, 587},
{586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 63: 586, 72: 586, 583: 586, 586, 587: 586, 586, 586, 586, 586, 586, 601: 586, 699: 586, 712: 586, 756: 586, 758: 586, 586, 586, 586, 873: 586, 586},
{585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 63: 585, 72: 585, 583: 585, 585, 587: 585, 585, 585, 585, 585, 585, 601: 585, 699: 585, 712: 585, 756: 585, 758: 585, 585, 585, 585, 873: 585, 585},
{584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 63: 584, 72: 584, 583: 584, 584, 587: 584, 584, 584, 584, 584, 584, 601: 584, 699: 584, 712: 584, 756: 584, 758: 584, 584, 584, 584, 873: 584, 584, 1504: 5487},
// 2295
{582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 63: 582, 72: 582, 583: 582, 582, 587: 582, 582, 582, 582, 582, 582, 601: 582, 699: 582, 712: 582, 756: 582, 758: 582, 582, 582, 582, 873: 582, 582},
{581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 63: 581, 72: 581, 583: 581, 581, 587: 581, 581, 581, 581, 581, 581, 601: 581, 699: 581, 712: 581, 756: 581, 758: 581, 581, 581, 581, 873: 581, 581},
{580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 63: 580, 583: 580, 580, 587: 580, 580, 580, 580, 580, 580, 601: 580, 699: 580, 712: 580, 756: 580, 758: 580, 580, 580, 580},
{509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 18: 4738, 63: 509, 583: 4714, 509, 587: 509, 509, 509, 509, 509, 509, 601: 509, 606: 4739, 637: 4735, 699: 509, 712: 509, 756: 509, 758: 509, 509, 509, 509, 763: 4737, 896: 5484, 908: 4736, 952: 5485},
{509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 18: 4738, 63: 509, 583: 4714, 509, 587: 509, 509, 509, 509, 509, 509, 601: 509, 606: 4739, 637: 4735, 699: 509, 712: 509, 756: 509, 758: 509, 509, 509, 509, 763: 4737, 896: 5481, 908: 4736, 952: 5482},
// 2300
{583: 4714, 896: 5479},
{583: 4714, 896: 5477},
{525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 63: 525, 583: 4714, 525, 587: 525, 525, 525, 525, 525, 525, 601: 525, 699: 525, 712: 525, 756: 525, 758: 525, 525, 525, 525, 896: 4715, 940: 5476},
{583: 4714, 896: 5475},
{571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 63: 571, 584: 571, 587: 571, 571, 571, 571, 571, 571, 601: 571, 699: 571, 712: 571, 756: 571, 758: 571, 571, 571, 571},
// 2305
{509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 18: 4738, 63: 509, 179: 5459, 5461, 183: 5460, 584: 509, 587: 509, 509, 509, 509, 509, 509, 601: 509, 606: 4739, 637: 4735, 699: 509, 712: 509, 756: 509, 758: 509, 509, 509, 509, 763: 4737, 908: 4736, 952: 5458, 1066: 5474},
{583: 5470},
{583: 5463},
{567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 63: 567, 584: 567, 587: 567, 567, 567, 567, 567, 567, 601: 567, 699: 567, 712: 567, 756: 567, 758: 567, 567, 567, 567},
{509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 18: 4738, 63: 509, 179: 5459, 5461, 183: 5460, 584: 509, 587: 509, 509, 509, 509, 509, 509, 601: 509, 606: 5456, 637: 4735, 699: 509, 712: 509, 756: 509, 758: 509, 509, 509, 509, 763: 5455, 786: 5412, 5411, 793: 5457, 908: 4736, 952: 5458, 1040: 5453, 1066: 5454},
// 2310
{512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 63: 512, 583: 512, 512, 587: 512, 512, 512, 512, 512, 512, 601: 512, 665: 4708, 699: 512, 712: 512, 756: 512, 758: 512, 512, 512, 512, 1303: 5451},
{563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 18: 563, 63: 563, 583: 563, 563, 587: 563, 563, 563, 563, 563, 563, 601: 563, 606: 563, 637: 563, 699: 563, 712: 563, 756: 563, 758: 563, 563, 563, 563, 763: 563, 1016: 5450},
{562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 18: 562, 63: 562, 583: 562, 562, 587: 562, 562, 562, 562, 562, 562, 601: 562, 606: 562, 637: 562, 699: 562, 712: 562, 756: 562, 758: 562, 562, 562, 562, 763: 562, 1016: 5449},
{561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 18: 561, 63: 561, 583: 561, 561, 587: 561, 561, 561, 561, 561, 561, 601: 561, 606: 561, 637: 561, 699: 561, 712: 561, 756: 561, 758: 561, 561, 561, 561, 763: 561, 786: 5447, 5446, 1016: 5448},
{606: 5441, 763: 5440, 786: 5443, 5442},
// 2315
{556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 18: 556, 63: 556, 179: 556, 556, 183: 556, 583: 556, 556, 587: 556, 556, 556, 556, 556, 556, 601: 556, 606: 556, 637: 556, 699: 556, 712: 556, 756: 556, 758: 556, 556, 556, 556, 763: 556},
{555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 18: 555, 63: 555, 179: 555, 555, 183: 555, 583: 555, 555, 587: 555, 555, 555, 555, 555, 555, 601: 555, 606: 555, 637: 555, 699: 555, 712: 555, 756: 555, 758: 555, 555, 555, 555, 763: 555},
{583: 552},
{546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 63: 546, 72: 546, 583: 546, 546, 587: 546, 546, 546, 546, 546, 546, 601: 546, 699: 546, 712: 546, 756: 546, 758: 546, 546, 546, 546, 873: 546, 546},
{545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 63: 545, 72: 545, 583: 545, 545, 587: 545, 545, 545, 545, 545, 545, 601: 545, 699: 545, 712: 545, 756: 545, 758: 545, 545, 545, 545, 873: 545, 545},
// 2320
{544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 63: 544, 584: 544, 587: 544, 544, 544, 544, 544, 544, 601: 544, 699: 544, 712: 544, 756: 544, 758: 544, 544, 544, 544},
{525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 63: 525, 583: 4714, 525, 587: 525, 525, 525, 525, 525, 525, 601: 525, 699: 525, 712: 525, 756: 525, 758: 525, 525, 525, 525, 896: 4715, 940: 5439},
{542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 63: 542, 584: 542, 587: 542, 542, 542, 542, 542, 542, 601: 542, 699: 542, 712: 542, 756: 542, 758: 542, 542, 542, 542},
{541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 63: 541, 584: 541, 587: 541, 541, 541, 541, 541, 541, 601: 541, 699: 541, 712: 541, 756: 541, 758: 541, 541, 541, 541},
{539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 18: 539, 63: 539, 179: 539, 539, 183: 539, 584: 539, 587: 539, 539, 539, 539, 539, 539, 601: 539, 606: 539, 637: 539, 699: 539, 712: 539, 756: 539, 758: 539, 539, 539, 539, 763: 539},
// 2325
{525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 18: 525, 63: 525, 179: 525, 525, 183: 525, 583: 4714, 525, 587: 525, 525, 525, 525, 525, 525, 601: 525, 606: 525, 637: 525, 699: 525, 712: 525, 756: 525, 758: 525, 525, 525, 525, 763: 525, 896: 4715, 940: 5438},
{537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 18: 537, 63: 537, 179: 537, 537, 183: 537, 584: 537, 587: 537, 537, 537, 537, 537, 537, 601: 537, 606: 537, 637: 537, 699: 537, 712: 537, 756: 537, 758: 537, 537, 537, 537, 763: 537},
{536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 18: 536, 63: 536, 179: 536, 536, 183: 536, 584: 536, 587: 536, 536, 536, 536, 536, 536, 601: 536, 606: 536, 637: 536, 699: 536, 712: 536, 756: 536, 758: 536, 536, 536, 536, 763: 536},
{531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 63: 531, 584: 531, 587: 531, 531, 531, 531, 531, 531, 601: 531, 699: 531, 712: 531, 756: 531, 758: 531, 531, 531, 531},
{525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 63: 525, 583: 4714, 525, 587: 525, 525, 525, 525, 525, 525, 601: 525, 699: 525, 712: 525, 756: 525, 758: 525, 525, 525, 525, 896: 4715, 940: 5437},
// 2330
{525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 63: 525, 583: 4714, 525, 587: 525, 525, 525, 525, 525, 525, 601: 525, 699: 525, 712: 525, 756: 525, 758: 525, 525, 525, 525, 896: 4715, 940: 5436},
{525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 63: 525, 583: 4714, 525, 587: 525, 525, 525, 525, 525, 525, 601: 525, 699: 525, 712: 525, 756: 525, 758: 525, 525, 525, 525, 896: 4715, 940: 5435},
{525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 63: 525, 72: 525, 583: 4714, 525, 587: 525, 525, 525, 525, 525, 525, 601: 525, 699: 525, 712: 525, 756: 525, 758: 525, 525, 525, 525, 873: 525, 525, 896: 4715, 940: 5429},
{520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 63: 520, 72: 520, 584: 520, 587: 520, 520, 520, 520, 520, 520, 601: 520, 699: 520, 712: 520, 756: 520, 758: 520, 520, 520, 520, 873: 520, 520, 1054: 5430},
{527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 63: 527, 72: 5432, 584: 527, 587: 527, 527, 527, 527, 527, 527, 601: 527, 699: 527, 712: 527, 756: 527, 758: 527, 527, 527, 527, 873: 5431, 5433, 1053: 5434},
// 2335
{523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 63: 523, 72: 523, 584: 523, 587: 523, 523, 523, 523, 523, 523, 601: 523, 699: 523, 712: 523, 756: 523, 758: 523, 523, 523, 523, 873: 523, 523},
{522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 63: 522, 72: 522, 584: 522, 587: 522, 522, 522, 522, 522, 522, 601: 522, 699: 522, 712: 522, 756: 522, 758: 522, 522, 522, 522, 873: 522, 522},
{521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 63: 521, 72: 521, 584: 521, 587: 521, 521, 521, 521, 521, 521, 601: 521, 699: 521, 712: 521, 756: 521, 758: 521, 521, 521, 521, 873: 521, 521},
{519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 63: 519, 72: 519, 584: 519, 587: 519, 519, 519, 519, 519, 519, 601: 519, 699: 519, 712: 519, 756: 519, 758: 519, 519, 519, 519, 873: 519, 519},
{528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 63: 528, 584: 528, 587: 528, 528, 528, 528, 528, 528, 601: 528, 699: 528, 712: 528, 756: 528, 758: 528, 528, 528, 528},
// 2340
{529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 63: 529, 584: 529, 587: 529, 529, 529, 529, 529, 529, 601: 529, 699: 529, 712: 529, 756: 529, 758: 529, 529, 529, 529},
{530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 63: 530, 584: 530, 587: 530, 530, 530, 530, 530, 530, 601: 530, 699: 530, 712: 530, 756: 530, 758: 530, 530, 530, 530},
{538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 18: 538, 63: 538, 179: 538, 538, 183: 538, 584: 538, 587: 538, 538, 538, 538, 538, 538, 601: 538, 606: 538, 637: 538, 699: 538, 712: 538, 756: 538, 758: 538, 538, 538, 538, 763: 538},
{543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 63: 543, 584: 543, 587: 543, 543, 543, 543, 543, 543, 601: 543, 699: 543, 712: 543, 756: 543, 758: 543, 543, 543, 543},
{560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 18: 560, 63: 560, 583: 560, 560, 587: 560, 560, 560, 560, 560, 560, 601: 560, 606: 560, 637: 560, 699: 560, 712: 560, 756: 560, 758: 560, 560, 560, 560, 763: 560, 1016: 5445},
// 2345
{559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 18: 559, 63: 559, 583: 559, 559, 587: 559, 559, 559, 559, 559, 559, 601: 559, 606: 559, 637: 559, 699: 559, 712: 559, 756: 559, 758: 559, 559, 559, 559, 763: 559, 1016: 5444},
{583: 554},
{583: 553},
{583: 548},
{583: 549},
// 2350
{583: 551},
{583: 550},
{583: 547},
{557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 18: 557, 63: 557, 179: 557, 557, 183: 557, 583: 557, 557, 587: 557, 557, 557, 557, 557, 557, 601: 557, 606: 557, 637: 557, 699: 557, 712: 557, 756: 557, 758: 557, 557, 557, 557, 763: 557},
{558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 18: 558, 63: 558, 179: 558, 558, 183: 558, 583: 558, 558, 587: 558, 558, 558, 558, 558, 558, 601: 558, 606: 558, 637: 558, 699: 558, 712: 558, 756: 558, 758: 558, 558, 558, 558, 763: 558},
// 2355
{525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 63: 525, 583: 4714, 525, 587: 525, 525, 525, 525, 525, 525, 601: 525, 699: 525, 712: 525, 756: 525, 758: 525, 525, 525, 525, 896: 4715, 940: 5452},
{564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 63: 564, 584: 564, 587: 564, 564, 564, 564, 564, 564, 601: 564, 699: 564, 712: 564, 756: 564, 758: 564, 564, 564, 564},
{509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 18: 4738, 63: 509, 179: 5459, 5461, 183: 5460, 584: 509, 587: 509, 509, 509, 509, 509, 509, 601: 509, 606: 4739, 637: 4735, 699: 509, 712: 509, 756: 509, 758: 509, 509, 509, 509, 763: 4737, 908: 4736, 952: 5458, 1066: 5462},
{565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 63: 565, 584: 565, 587: 565, 565, 565, 565, 565, 565, 601: 565, 699: 565, 712: 565, 756: 565, 758: 565, 565, 565, 565},
{611: 4741, 1016: 5450},
// 2360
{611: 4740, 1016: 5449},
{540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 63: 540, 584: 540, 587: 540, 540, 540, 540, 540, 540, 601: 540, 699: 540, 712: 540, 756: 540, 758: 540, 540, 540, 540},
{535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 63: 535, 584: 535, 587: 535, 535, 535, 535, 535, 535, 601: 535, 699: 535, 712: 535, 756: 535, 758: 535, 535, 535, 535},
{534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 63: 534, 584: 534, 587: 534, 534, 534, 534, 534, 534, 601: 534, 699: 534, 712: 534, 756: 534, 758: 534, 534, 534, 534},
{533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 63: 533, 584: 533, 587: 533, 533, 533, 533, 533, 533, 601: 533, 699: 533, 712: 533, 756: 533, 758: 533, 533, 533, 533},
// 2365
{532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 63: 532, 584: 532, 587: 532, 532, 532, 532, 532, 532, 601: 532, 699: 532, 712: 532, 756: 532, 758: 532, 532, 532, 532},
{566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 63: 566, 584: 566, 587: 566, 566, 566, 566, 566, 566, 601: 566, 699: 566, 712: 566, 756: 566, 758: 566, 566, 566, 566},
{585: 4272, 688: 4273, 693: 4274, 1107: 5465, 1375: 5464},
{9: 5467, 63: 5466},
{9: 494, 63: 494},
// 2370
{509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 18: 4738, 63: 509, 179: 5459, 5461, 183: 5460, 584: 509, 587: 509, 509, 509, 509, 509, 509, 601: 509, 606: 4739, 637: 4735, 699: 509, 712: 509, 756: 509, 758: 509, 509, 509, 509, 763: 4737, 908: 4736, 952: 5458, 1066: 5469},
{585: 4272, 688: 4273, 693: 4274, 1107: 5468},
{9: 493, 63: 493},
{568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 63: 568, 584: 568, 587: 568, 568, 568, 568, 568, 568, 601: 568, 699: 568, 712: 568, 756: 568, 758: 568, 568, 568, 568},
{585: 4272, 688: 4273, 693: 4274, 1107: 5465, 1375: 5471},
// 2375
{9: 5467, 63: 5472},
{509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 18: 4738, 63: 509, 179: 5459, 5461, 183: 5460, 584: 509, 587: 509, 509, 509, 509, 509, 509, 601: 509, 606: 4739, 637: 4735, 699: 509, 712: 509, 756: 509, 758: 509, 509, 509, 509, 763: 4737, 908: 4736, 952: 5458, 1066: 5473},
{569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 63: 569, 584: 569, 587: 569, 569, 569, 569, 569, 569, 601: 569, 699: 569, 712: 569, 756: 569, 758: 569, 569, 569, 569},
{570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 63: 570, 584: 570, 587: 570, 570, 570, 570, 570, 570, 601: 570, 699: 570, 712: 570, 756: 570, 758: 570, 570, 570, 570},
{572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 63: 572, 584: 572, 587: 572, 572, 572, 572, 572, 572, 601: 572, 699: 572, 712: 572, 756: 572, 758: 572, 572, 572, 572},
// 2380
{573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 63: 573, 584: 573, 587: 573, 573, 573, 573, 573, 573, 601: 573, 699: 573, 712: 573, 756: 573, 758: 573, 573, 573, 573},
{509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 18: 4738, 63: 509, 584: 509, 587: 509, 509, 509, 509, 509, 509, 601: 509, 606: 4739, 637: 4735, 699: 509, 712: 509, 756: 509, 758: 509, 509, 509, 509, 763: 4737, 908: 4736, 952: 5478},
{574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 63: 574, 584: 574, 587: 574, 574, 574, 574, 574, 574, 601: 574, 699: 574, 712: 574, 756: 574, 758: 574, 574, 574, 574},
{509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 18: 4738, 63: 509, 584: 509, 587: 509, 509, 509, 509, 509, 509, 601: 509, 606: 4739, 637: 4735, 699: 509, 712: 509, 756: 509, 758: 509, 509, 509, 509, 763: 4737, 908: 4736, 952: 5480},
{575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 63: 575, 584: 575, 587: 575, 575, 575, 575, 575, 575, 601: 575, 699: 575, 712: 575, 756: 575, 758: 575, 575, 575, 575},
// 2385
{509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 18: 4738, 63: 509, 584: 509, 587: 509, 509, 509, 509, 509, 509, 601: 509, 606: 4739, 637: 4735, 699: 509, 712: 509, 756: 509, 758: 509, 509, 509, 509, 763: 4737, 908: 4736, 952: 5483},
{576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 63: 576, 584: 576, 587: 576, 576, 576, 576, 576, 576, 601: 576, 699: 576, 712: 576, 756: 576, 758: 576, 576, 576, 576},
{577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 63: 577, 584: 577, 587: 577, 577, 577, 577, 577, 577, 601: 577, 699: 577, 712: 577, 756: 577, 758: 577, 577, 577, 577},
{509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 18: 4738, 63: 509, 584: 509, 587: 509, 509, 509, 509, 509, 509, 601: 509, 606: 4739, 637: 4735, 699: 509, 712: 509, 756: 509, 758: 509, 509, 509, 509, 763: 4737, 908: 4736, 952: 5486},
{578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 63: 578, 584: 578, 587: 578, 578, 578, 578, 578, 578, 601: 578, 699: 578, 712: 578, 756: 578, 758: 578, 578, 578, 578},
// 2390
{579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 63: 579, 584: 579, 587: 579, 579, 579, 579, 579, 579, 601: 579, 699: 579, 712: 579, 756: 579, 758: 579, 579, 579, 579},
{583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 63: 583, 72: 583, 583: 583, 583, 587: 583, 583, 583, 583, 583, 583, 601: 583, 699: 583, 712: 583, 756: 583, 758: 583, 583, 583, 583, 873: 583, 583},
{607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 63: 607, 584: 607, 587: 607, 607, 607, 607, 607, 607, 601: 607, 699: 607, 712: 607, 756: 607, 758: 607, 607, 607, 607},
{520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 63: 520, 72: 520, 584: 520, 587: 520, 520, 520, 520, 520, 520, 601: 520, 699: 520, 712: 520, 756: 520, 758: 520, 520, 520, 520, 873: 520, 520, 1054: 5490},
{608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 63: 608, 72: 5432, 584: 608, 587: 608, 608, 608, 608, 608, 608, 601: 608, 699: 608, 712: 608, 756: 608, 758: 608, 608, 608, 608, 873: 5431, 5433, 1053: 5434},
// 2395
{520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 63: 520, 72: 520, 584: 520, 587: 520, 520, 520, 520, 520, 520, 601: 520, 699: 520, 712: 520, 756: 520, 758: 520, 520, 520, 520, 873: 520, 520, 1054: 5492},
{609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 63: 609, 72: 5432, 584: 609, 587: 609, 609, 609, 609, 609, 609, 601: 609, 699: 609, 712: 609, 756: 609, 758: 609, 609, 609, 609, 873: 5431, 5433, 1053: 5434},
{610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 63: 610, 72: 5432, 584: 610, 587: 610, 610, 610, 610, 610, 610, 601: 610, 699: 610, 712: 610, 756: 610, 758: 610, 610, 610, 610, 873: 5431, 5433, 1053: 5434},
{520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 63: 520, 72: 520, 584: 520, 587: 520, 520, 520, 520, 520, 520, 601: 520, 699: 520, 712: 520, 756: 520, 758: 520, 520, 520, 520, 873: 520, 520, 1054: 5495},
{611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 63: 611, 72: 5432, 584: 611, 587: 611, 611, 611, 611, 611, 611, 601: 611, 699: 611, 712: 611, 756: 611, 758: 611, 611, 611, 611, 873: 5431, 5433, 1053: 5434},
// 2400
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 699: 2896, 712: 2896, 756: 2896, 758: 2896, 764: 2896, 817: 2896, 2896, 826: 5663, 3292, 3293, 3291, 1369: 5662},
{2821, 2821, 2821, 2821, 2821, 2821, 9: 2821, 11: 2821, 2821, 63: 2821, 587: 2821},
{699: 2798},
{601: 5661},
{2788, 2788, 2788, 2788, 2788, 2788, 2788, 2788, 2788, 2788, 2788, 2788, 2788, 2788, 2788, 2788, 63: 2788, 584: 2788, 587: 2788, 2788, 2788, 2788, 2788, 2788, 601: 2788, 699: 2788, 712: 2788, 756: 2788, 758: 2788, 2788, 2788, 2788},
// 2405
{2787, 2787, 2787, 2787, 2787, 2787, 2787, 2787, 2787, 2787, 2787, 2787, 2787, 2787, 2787, 2787, 63: 2787, 584: 2787, 587: 2787, 2787, 2787, 2787, 2787, 2787, 601: 2787, 699: 2787, 712: 2787, 756: 2787, 758: 2787, 2787, 2787, 2787},
{699: 5655},
{2782, 2782, 2782, 2782, 2782, 2782, 2782, 2782, 2782, 2782, 2782, 2782, 2782, 2782, 2782, 2782, 63: 2782, 69: 5650, 71: 5649, 584: 2782, 587: 2782, 2782, 2782, 2782, 2782, 2782, 601: 2782, 699: 5651, 712: 2782, 756: 2782, 758: 2782, 2782, 2782, 2782},
{65: 5624, 276: 5628, 366: 5629, 583: 5623, 585: 3933, 597: 5348, 5349, 601: 3924, 603: 5625, 3928, 667: 3923, 669: 3925, 3927, 3926, 688: 3931, 693: 3932, 702: 3930, 704: 5609, 5608, 5604, 5605, 5606, 5607, 832: 5347, 3929, 835: 5627, 1046: 5622, 1073: 5620, 1091: 5603, 1094: 5601, 5602, 5626, 1136: 5621, 5619, 1434: 5618},
{589: 5616},
// 2410
{766: 5599},
{585: 5598},
{756: 5589},
{591: 5582},
{2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774, 2774, 63: 2774, 584: 2774, 587: 2774, 2774, 2774, 2774, 2774, 2774, 601: 2774, 699: 2774, 712: 2774, 756: 2774, 758: 2774, 2774, 2774, 2774},
// 2415
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 637: 4044, 826: 4046, 3292, 3293, 3291, 860: 4043, 1048: 5581},
{194: 5579, 294: 5580, 589: 5578, 1418: 5577},
{274: 5576, 337: 5575, 589: 5574, 1561: 5573},
{2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 63: 2768, 583: 5567, 2768, 587: 2768, 2768, 2768, 2768, 2768, 2768, 601: 2768, 699: 2768, 712: 2768, 756: 2768, 758: 2768, 2768, 2768, 2768, 1408: 5566},
{585: 2504, 605: 4917, 855: 5564},
// 2420
{411: 5563},
{2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 63: 2754, 584: 2754, 587: 2754, 2754, 2754, 2754, 2754, 2754, 601: 2754, 699: 2754, 712: 2754, 756: 2754, 758: 2754, 2754, 2754, 2754},
{2751, 2751, 2751, 2751, 2751, 2751, 5507, 5515, 5513, 2751, 5501, 2751, 2751, 5505, 5514, 5512, 63: 2751, 584: 5506, 587: 2751, 4121, 5504, 4120, 2759, 5511, 601: 5500, 699: 2799, 712: 5498, 756: 2897, 758: 5503, 5496, 5519, 5516, 949: 5499, 960: 5508, 989: 5510, 995: 5562, 1000: 5509, 1006: 5502},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 5520},
{2682, 2682, 2682, 2682, 2682, 2682, 2682, 2682, 2682, 2682, 2682, 2682, 2682, 2682, 2682, 2682, 63: 2682, 583: 5522, 2682, 587: 2682, 2682, 2682, 2682, 2682, 2682, 601: 2682, 699: 2682, 712: 2682, 756: 2682, 758: 2682, 2682, 2682, 2682, 765: 2682, 1460: 5521},
// 2425
{2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 63: 2741, 584: 2741, 587: 2741, 2741, 2741, 2741, 2741, 2741, 601: 2741, 699: 2741, 712: 2741, 756: 2741, 758: 2741, 2741, 2741, 2741, 765: 5537, 1477: 5538, 5539},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 5526, 826: 4336, 3292, 3293, 3291, 876: 5525, 968: 5524, 978: 5523},
{9: 5535, 63: 5534},
{9: 2680, 63: 2680},
{9: 525, 63: 525, 583: 4714, 632: 525, 660: 525, 896: 4715, 940: 5532},
// 2430
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 5527},
{63: 5528, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{9: 1610, 63: 1610, 632: 5531, 660: 5530, 1138: 5529},
{9: 2677, 63: 2677},
{1609, 1609, 1609, 1609, 1609, 1609, 9: 1609, 63: 1609, 587: 1609},
// 2435
{1608, 1608, 1608, 1608, 1608, 1608, 9: 1608, 63: 1608, 587: 1608},
{9: 1610, 63: 1610, 632: 5531, 660: 5530, 1138: 5533},
{9: 2678, 63: 2678},
{2681, 2681, 2681, 2681, 2681, 2681, 2681, 2681, 2681, 2681, 2681, 2681, 2681, 2681, 2681, 2681, 63: 2681, 584: 2681, 587: 2681, 2681, 2681, 2681, 2681, 2681, 601: 2681, 699: 2681, 712: 2681, 756: 2681, 758: 2681, 2681, 2681, 2681, 765: 2681},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 5526, 826: 4336, 3292, 3293, 3291, 876: 5525, 968: 5536},
// 2440
{9: 2679, 63: 2679},
{216: 5559, 459: 5560, 481: 5561},
{2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 63: 2740, 584: 2740, 587: 2740, 2740, 2740, 2740, 2740, 2740, 601: 2740, 699: 2740, 712: 2740, 756: 2740, 758: 2740, 2740, 2740, 2740},
{2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736, 2736, 63: 2736, 584: 5541, 587: 2736, 2736, 2736, 2736, 2736, 2736, 601: 2736, 699: 2736, 712: 2736, 756: 2736, 758: 2736, 2736, 2736, 2736, 1293: 5542, 5543, 1482: 5540},
{2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 63: 2739, 584: 2739, 587: 2739, 2739, 2739, 2739, 2739, 2739, 601: 2739, 699: 2739, 712: 2739, 756: 2739, 758: 2739, 2739, 2739, 2739},
// 2445
{766: 5557, 858: 5546},
{2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 2735, 63: 2735, 584: 5555, 587: 2735, 2735, 2735, 2735, 2735, 2735, 601: 2735, 699: 2735, 712: 2735, 756: 2735, 758: 2735, 2735, 2735, 2735, 1294: 5556},
{2734, 2734, 2734, 2734, 2734, 2734, 2734, 2734, 2734, 2734, 2734, 2734, 2734, 2734, 2734, 2734, 63: 2734, 584: 5544, 587: 2734, 2734, 2734, 2734, 2734, 2734, 601: 2734, 699: 2734, 712: 2734, 756: 2734, 758: 2734, 2734, 2734, 2734, 1293: 5545},
{858: 5546},
{2732, 2732, 2732, 2732, 2732, 2732, 2732, 2732, 2732, 2732, 2732, 2732, 2732, 2732, 2732, 2732, 63: 2732, 584: 2732, 587: 2732, 2732, 2732, 2732, 2732, 2732, 601: 2732, 699: 2732, 712: 2732, 756: 2732, 758: 2732, 2732, 2732, 2732},
// 2450
{115: 5551, 611: 5550, 646: 5548, 788: 5549, 1327: 5547},
{2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 63: 2738, 584: 2738, 587: 2738, 2738, 2738, 2738, 2738, 2738, 601: 2738, 699: 2738, 712: 2738, 756: 2738, 758: 2738, 2738, 2738, 2738},
{2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731, 2731, 63: 2731, 584: 2731, 587: 2731, 2731, 2731, 2731, 2731, 2731, 601: 2731, 699: 2731, 712: 2731, 756: 2731, 758: 2731, 2731, 2731, 2731},
{2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730, 2730, 63: 2730, 584: 2730, 587: 2730, 2730, 2730, 2730, 2730, 2730, 601: 2730, 699: 2730, 712: 2730, 756: 2730, 758: 2730, 2730, 2730, 2730},
{589: 5554, 601: 5553},
// 2455
{119: 5552},
{2728, 2728, 2728, 2728, 2728, 2728, 2728, 2728, 2728, 2728, 2728, 2728, 2728, 2728, 2728, 2728, 63: 2728, 584: 2728, 587: 2728, 2728, 2728, 2728, 2728, 2728, 601: 2728, 699: 2728, 712: 2728, 756: 2728, 758: 2728, 2728, 2728, 2728},
{2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 2729, 63: 2729, 584: 2729, 587: 2729, 2729, 2729, 2729, 2729, 2729, 601: 2729, 699: 2729, 712: 2729, 756: 2729, 758: 2729, 2729, 2729, 2729},
{2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727, 2727, 63: 2727, 584: 2727, 587: 2727, 2727, 2727, 2727, 2727, 2727, 601: 2727, 699: 2727, 712: 2727, 756: 2727, 758: 2727, 2727, 2727, 2727},
{766: 5557},
// 2460
{2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733, 2733, 63: 2733, 584: 2733, 587: 2733, 2733, 2733, 2733, 2733, 2733, 601: 2733, 699: 2733, 712: 2733, 756: 2733, 758: 2733, 2733, 2733, 2733},
{115: 5551, 611: 5550, 646: 5548, 788: 5549, 1327: 5558},
{2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 63: 2737, 584: 2737, 587: 2737, 2737, 2737, 2737, 2737, 2737, 601: 2737, 699: 2737, 712: 2737, 756: 2737, 758: 2737, 2737, 2737, 2737},
{2744, 2744, 2744, 2744, 2744, 2744, 2744, 2744, 2744, 2744, 2744, 2744, 2744, 2744, 2744, 2744, 63: 2744, 584: 2744, 587: 2744, 2744, 2744, 2744, 2744, 2744, 601: 2744, 699: 2744, 712: 2744, 756: 2744, 758: 2744, 2744, 2744, 2744},
{2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743, 2743, 63: 2743, 584: 2743, 587: 2743, 2743, 2743, 2743, 2743, 2743, 601: 2743, 699: 2743, 712: 2743, 756: 2743, 758: 2743, 2743, 2743, 2743},
// 2465
{2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 63: 2742, 584: 2742, 587: 2742, 2742, 2742, 2742, 2742, 2742, 601: 2742, 699: 2742, 712: 2742, 756: 2742, 758: 2742, 2742, 2742, 2742},
{2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 63: 2753, 584: 2753, 587: 2753, 2753, 2753, 2753, 2753, 2753, 601: 2753, 699: 2753, 712: 2753, 756: 2753, 758: 2753, 2753, 2753, 2753},
{591: 2758},
{585: 5565},
{2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 63: 2769, 584: 2769, 587: 2769, 2769, 2769, 2769, 2769, 2769, 601: 2769, 699: 2769, 712: 2769, 756: 2769, 758: 2769, 2769, 2769, 2769},
// 2470
{2770, 2770, 2770, 2770, 2770, 2770, 2770, 2770, 2770, 2770, 2770, 2770, 2770, 2770, 2770, 2770, 63: 2770, 584: 2770, 587: 2770, 2770, 2770, 2770, 2770, 2770, 601: 2770, 699: 2770, 712: 2770, 756: 2770, 758: 2770, 2770, 2770, 2770},
{604: 3284, 854: 4175, 865: 5568},
{9: 5570, 63: 5569},
{2767, 2767, 2767, 2767, 2767, 2767, 2767, 2767, 2767, 2767, 2767, 2767, 2767, 2767, 2767, 2767, 63: 2767, 584: 2767, 587: 2767, 2767, 2767, 2767, 2767, 2767, 601: 2767, 699: 2767, 712: 2767, 756: 2767, 758: 2767, 2767, 2767, 2767},
{604: 3284, 854: 4175, 865: 5571},
// 2475
{63: 5572},
{2766, 2766, 2766, 2766, 2766, 2766, 2766, 2766, 2766, 2766, 2766, 2766, 2766, 2766, 2766, 2766, 63: 2766, 584: 2766, 587: 2766, 2766, 2766, 2766, 2766, 2766, 601: 2766, 699: 2766, 712: 2766, 756: 2766, 758: 2766, 2766, 2766, 2766},
{2771, 2771, 2771, 2771, 2771, 2771, 2771, 2771, 2771, 2771, 2771, 2771, 2771, 2771, 2771, 2771, 63: 2771, 584: 2771, 587: 2771, 2771, 2771, 2771, 2771, 2771, 601: 2771, 699: 2771, 712: 2771, 756: 2771, 758: 2771, 2771, 2771, 2771},
{2765, 2765, 2765, 2765, 2765, 2765, 2765, 2765, 2765, 2765, 2765, 2765, 2765, 2765, 2765, 2765, 63: 2765, 584: 2765, 587: 2765, 2765, 2765, 2765, 2765, 2765, 601: 2765, 699: 2765, 712: 2765, 756: 2765, 758: 2765, 2765, 2765, 2765},
{2764, 2764, 2764, 2764, 2764, 2764, 2764, 2764, 2764, 2764, 2764, 2764, 2764, 2764, 2764, 2764, 63: 2764, 584: 2764, 587: 2764, 2764, 2764, 2764, 2764, 2764, 601: 2764, 699: 2764, 712: 2764, 756: 2764, 758: 2764, 2764, 2764, 2764},
// 2480
{2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763, 2763, 63: 2763, 584: 2763, 587: 2763, 2763, 2763, 2763, 2763, 2763, 601: 2763, 699: 2763, 712: 2763, 756: 2763, 758: 2763, 2763, 2763, 2763},
{2772, 2772, 2772, 2772, 2772, 2772, 2772, 2772, 2772, 2772, 2772, 2772, 2772, 2772, 2772, 2772, 63: 2772, 584: 2772, 587: 2772, 2772, 2772, 2772, 2772, 2772, 601: 2772, 699: 2772, 712: 2772, 756: 2772, 758: 2772, 2772, 2772, 2772},
{2762, 2762, 2762, 2762, 2762, 2762, 2762, 2762, 2762, 2762, 2762, 2762, 2762, 2762, 2762, 2762, 63: 2762, 584: 2762, 587: 2762, 2762, 2762, 2762, 2762, 2762, 601: 2762, 699: 2762, 712: 2762, 756: 2762, 758: 2762, 2762, 2762, 2762},
{2761, 2761, 2761, 2761, 2761, 2761, 2761, 2761, 2761, 2761, 2761, 2761, 2761, 2761, 2761, 2761, 63: 2761, 584: 2761, 587: 2761, 2761, 2761, 2761, 2761, 2761, 601: 2761, 699: 2761, 712: 2761, 756: 2761, 758: 2761, 2761, 2761, 2761},
{2760, 2760, 2760, 2760, 2760, 2760, 2760, 2760, 2760, 2760, 2760, 2760, 2760, 2760, 2760, 2760, 63: 2760, 584: 2760, 587: 2760, 2760, 2760, 2760, 2760, 2760, 601: 2760, 699: 2760, 712: 2760, 756: 2760, 758: 2760, 2760, 2760, 2760},
// 2485
{2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773, 2773, 63: 2773, 584: 2773, 587: 2773, 2773, 2773, 2773, 2773, 2773, 601: 2773, 699: 2773, 712: 2773, 756: 2773, 758: 2773, 2773, 2773, 2773},
{583: 5583},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 5584},
{63: 5585, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 63: 2757, 584: 2757, 587: 2757, 2757, 2757, 2757, 2757, 2757, 601: 2757, 699: 2757, 712: 2757, 756: 2757, 758: 2757, 2757, 2757, 2757, 1562: 5588, 1593: 5587, 5586},
// 2490
{2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775, 2775, 63: 2775, 584: 2775, 587: 2775, 2775, 2775, 2775, 2775, 2775, 601: 2775, 699: 2775, 712: 2775, 756: 2775, 758: 2775, 2775, 2775, 2775},
{2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 63: 2756, 584: 2756, 587: 2756, 2756, 2756, 2756, 2756, 2756, 601: 2756, 699: 2756, 712: 2756, 756: 2756, 758: 2756, 2756, 2756, 2756},
{2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 63: 2755, 584: 2755, 587: 2755, 2755, 2755, 2755, 2755, 2755, 601: 2755, 699: 2755, 712: 2755, 756: 2755, 758: 2755, 2755, 2755, 2755},
{583: 5590},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 5591},
// 2495
{63: 5592, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793, 2793, 63: 2793, 236: 5337, 584: 2793, 587: 2793, 4121, 2793, 4120, 2793, 2793, 601: 2793, 699: 2793, 712: 2793, 756: 2793, 758: 2793, 2793, 2793, 2793, 949: 5593, 1124: 5594, 1242: 5595, 1439: 5596},
{236: 5339, 601: 5597},
{2792, 2792, 2792, 2792, 2792, 2792, 2792, 2792, 2792, 2792, 2792, 2792, 2792, 2792, 2792, 2792, 63: 2792, 584: 2792, 587: 2792, 2792, 2792, 2792, 2792, 2792, 601: 2792, 699: 2792, 712: 2792, 756: 2792, 758: 2792, 2792, 2792, 2792},
{2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 2790, 63: 2790, 584: 2790, 587: 2790, 2790, 2790, 2790, 2790, 2790, 601: 2790, 699: 2790, 712: 2790, 756: 2790, 758: 2790, 2790, 2790, 2790},
// 2500
{2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776, 2776, 63: 2776, 584: 2776, 587: 2776, 2776, 2776, 2776, 2776, 2776, 601: 2776, 699: 2776, 712: 2776, 756: 2776, 758: 2776, 2776, 2776, 2776},
{2791, 2791, 2791, 2791, 2791, 2791, 2791, 2791, 2791, 2791, 2791, 2791, 2791, 2791, 2791, 2791, 63: 2791, 584: 2791, 587: 2791, 2791, 2791, 2791, 2791, 2791, 601: 2791, 699: 2791, 712: 2791, 756: 2791, 758: 2791, 2791, 2791, 2791},
{2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777, 2777, 63: 2777, 584: 2777, 587: 2777, 2777, 2777, 2777, 2777, 2777, 601: 2777, 699: 2777, 712: 2777, 756: 2777, 758: 2777, 2777, 2777, 2777},
{704: 5609, 5608, 5604, 5605, 5606, 5607, 1091: 5603, 1094: 5601, 5602, 5600},
{2778, 2778, 2778, 2778, 2778, 2778, 2778, 2778, 2778, 2778, 2778, 2778, 2778, 2778, 2778, 2778, 63: 2778, 584: 2778, 587: 2778, 2778, 2778, 2778, 2778, 2778, 601: 2778, 699: 2778, 712: 2778, 756: 2778, 758: 2778, 2778, 2778, 2778},
// 2505
{2714, 2714, 2714, 2714, 2714, 2714, 2714, 2714, 2714, 2714, 2714, 2714, 2714, 2714, 2714, 2714, 63: 2714, 584: 2714, 587: 2714, 2714, 2714, 2714, 2714, 2714, 601: 2714, 699: 2714, 712: 2714, 756: 2714, 758: 2714, 2714, 2714, 2714},
{583: 5612},
{583: 5610},
{2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710, 2710, 63: 2710, 583: 2697, 2710, 587: 2710, 2710, 2710, 2710, 2710, 2710, 601: 2710, 699: 2710, 712: 2710, 756: 2710, 758: 2710, 2710, 2710, 2710},
{2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 2701, 63: 2701, 583: 2705, 2701, 587: 2701, 2701, 2701, 2701, 2701, 2701, 601: 2701, 699: 2701, 712: 2701, 756: 2701, 758: 2701, 2701, 2701, 2701},
// 2510
{2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 2700, 63: 2700, 583: 2704, 2700, 587: 2700, 2700, 2700, 2700, 2700, 2700, 601: 2700, 699: 2700, 712: 2700, 756: 2700, 758: 2700, 2700, 2700, 2700},
{2699, 2699, 2699, 2699, 2699, 2699, 2699, 2699, 2699, 2699, 2699, 2699, 2699, 2699, 2699, 2699, 63: 2699, 583: 2703, 2699, 587: 2699, 2699, 2699, 2699, 2699, 2699, 601: 2699, 699: 2699, 712: 2699, 756: 2699, 758: 2699, 2699, 2699, 2699},
{583: 2702},
{583: 2698},
{63: 5611},
// 2515
{2711, 2711, 2711, 2711, 2711, 2711, 2711, 2711, 2711, 2711, 2711, 2711, 2711, 2711, 2711, 2711, 63: 2711, 584: 2711, 587: 2711, 2711, 2711, 2711, 2711, 2711, 601: 2711, 699: 2711, 712: 2711, 756: 2711, 758: 2711, 2711, 2711, 2711},
{63: 5613, 604: 3284, 854: 5614},
{2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, 2713, 63: 2713, 584: 2713, 587: 2713, 2713, 2713, 2713, 2713, 2713, 601: 2713, 699: 2713, 712: 2713, 756: 2713, 758: 2713, 2713, 2713, 2713},
{63: 5615},
{2712, 2712, 2712, 2712, 2712, 2712, 2712, 2712, 2712, 2712, 2712, 2712, 2712, 2712, 2712, 2712, 63: 2712, 584: 2712, 587: 2712, 2712, 2712, 2712, 2712, 2712, 601: 2712, 699: 2712, 712: 2712, 756: 2712, 758: 2712, 2712, 2712, 2712},
// 2520
{234: 5617},
{2779, 2779, 2779, 2779, 2779, 2779, 2779, 2779, 2779, 2779, 2779, 2779, 2779, 2779, 2779, 2779, 63: 2779, 584: 2779, 587: 2779, 2779, 2779, 2779, 2779, 2779, 601: 2779, 699: 2779, 712: 2779, 756: 2779, 758: 2779, 2779, 2779, 2779},
{2780, 2780, 2780, 2780, 2780, 2780, 2780, 2780, 2780, 2780, 2780, 2780, 2780, 2780, 2780, 2780, 63: 2780, 584: 2780, 587: 2780, 2780, 2780, 2780, 2780, 2780, 601: 2780, 699: 2780, 712: 2780, 756: 2780, 758: 2780, 2780, 2780, 2780},
{2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726, 2726, 63: 2726, 584: 2726, 587: 2726, 2726, 2726, 2726, 2726, 2726, 601: 2726, 699: 2726, 712: 2726, 756: 2726, 758: 2726, 2726, 2726, 2726},
{2725, 2725, 2725, 2725, 2725, 2725, 2725, 2725, 2725, 2725, 2725, 2725, 2725, 2725, 2725, 2725, 63: 2725, 584: 2725, 587: 2725, 2725, 2725, 2725, 2725, 2725, 601: 2725, 699: 2725, 712: 2725, 756: 2725, 758: 2725, 2725, 2725, 2725},
// 2525
{2724, 2724, 2724, 2724, 2724, 2724, 2724, 2724, 2724, 2724, 2724, 2724, 2724, 2724, 2724, 2724, 63: 2724, 584: 2724, 587: 2724, 2724, 2724, 2724, 2724, 2724, 601: 2724, 699: 2724, 712: 2724, 756: 2724, 758: 2724, 2724, 2724, 2724},
{2723, 2723, 2723, 2723, 2723, 2723, 2723, 2723, 2723, 2723, 2723, 2723, 2723, 2723, 2723, 2723, 63: 2723, 584: 2723, 587: 2723, 2723, 2723, 2723, 2723, 2723, 601: 2723, 699: 2723, 712: 2723, 756: 2723, 758: 2723, 2723, 2723, 2723},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 5641, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 5639, 585: 3933, 597: 5348, 5349, 601: 3924, 603: 5625, 3928, 667: 3923, 669: 3925, 3927, 3926, 688: 3931, 693: 3932, 702: 3930, 704: 5609, 5608, 5604, 5605, 5606, 5607, 826: 5637, 3292, 3293, 3291, 832: 5347, 3929, 835: 5627, 1046: 5640, 1073: 5638, 1091: 5603, 1094: 5601, 5602, 5626, 1136: 5643, 5642},
{583: 5633},
{583: 5630},
// 2530
{2715, 2715, 2715, 2715, 2715, 2715, 2715, 2715, 2715, 2715, 2715, 2715, 2715, 2715, 2715, 2715, 63: 2715, 584: 2715, 587: 2715, 2715, 2715, 2715, 2715, 2715, 601: 2715, 699: 2715, 712: 2715, 756: 2715, 758: 2715, 2715, 2715, 2715},
{2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 2708, 63: 2708, 584: 2708, 587: 2708, 2708, 2708, 2708, 2708, 2708, 601: 2708, 699: 2708, 712: 2708, 756: 2708, 758: 2708, 2708, 2708, 2708},
{234: 4905},
{583: 4902},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4151, 909: 5631},
// 2535
{9: 4302, 63: 5632},
{2717, 2717, 2717, 2717, 2717, 2717, 2717, 2717, 2717, 2717, 2717, 2717, 2717, 2717, 2717, 2717, 63: 2717, 584: 2717, 587: 2717, 2717, 2717, 2717, 2717, 2717, 601: 2717, 699: 2717, 712: 2717, 756: 2717, 758: 2717, 2717, 2717, 2717},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 5634, 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4151, 909: 5635},
{2719, 2719, 2719, 2719, 2719, 2719, 2719, 2719, 2719, 2719, 2719, 2719, 2719, 2719, 2719, 2719, 63: 2719, 584: 2719, 587: 2719, 2719, 2719, 2719, 2719, 2719, 601: 2719, 699: 2719, 712: 2719, 756: 2719, 758: 2719, 2719, 2719, 2719},
{9: 4302, 63: 5636},
// 2540
{2718, 2718, 2718, 2718, 2718, 2718, 2718, 2718, 2718, 2718, 2718, 2718, 2718, 2718, 2718, 2718, 63: 2718, 584: 2718, 587: 2718, 2718, 2718, 2718, 2718, 2718, 601: 2718, 699: 2718, 712: 2718, 756: 2718, 758: 2718, 2718, 2718, 2718},
{63: 5648},
{63: 5647},
{65: 5624, 276: 5628, 366: 5629, 583: 5639, 603: 5625, 704: 5609, 5608, 5604, 5605, 5606, 5607, 835: 5627, 1046: 5640, 1091: 5603, 1094: 5601, 5602, 5626, 1136: 5643, 5642},
{63: 5646},
// 2545
{63: 2253, 583: 5633},
{63: 5645},
{63: 5644},
{2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, 2709, 63: 2709, 584: 2709, 587: 2709, 2709, 2709, 2709, 2709, 2709, 601: 2709, 699: 2709, 712: 2709, 756: 2709, 758: 2709, 2709, 2709, 2709},
{2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716, 2716, 63: 2716, 584: 2716, 587: 2716, 2716, 2716, 2716, 2716, 2716, 601: 2716, 699: 2716, 712: 2716, 756: 2716, 758: 2716, 2716, 2716, 2716},
// 2550
{2720, 2720, 2720, 2720, 2720, 2720, 2720, 2720, 2720, 2720, 2720, 2720, 2720, 2720, 2720, 2720, 63: 2720, 584: 2720, 587: 2720, 2720, 2720, 2720, 2720, 2720, 601: 2720, 699: 2720, 712: 2720, 756: 2720, 758: 2720, 2720, 2720, 2720},
{2721, 2721, 2721, 2721, 2721, 2721, 2721, 2721, 2721, 2721, 2721, 2721, 2721, 2721, 2721, 2721, 63: 2721, 584: 2721, 587: 2721, 2721, 2721, 2721, 2721, 2721, 601: 2721, 699: 2721, 712: 2721, 756: 2721, 758: 2721, 2721, 2721, 2721},
{2722, 2722, 2722, 2722, 2722, 2722, 2722, 2722, 2722, 2722, 2722, 2722, 2722, 2722, 2722, 2722, 63: 2722, 584: 2722, 587: 2722, 2722, 2722, 2722, 2722, 2722, 601: 2722, 699: 2722, 712: 2722, 756: 2722, 758: 2722, 2722, 2722, 2722},
{2784, 2784, 2784, 2784, 2784, 2784, 2784, 2784, 2784, 2784, 2784, 2784, 2784, 2784, 2784, 2784, 63: 2784, 584: 2784, 587: 2784, 2784, 2784, 2784, 2784, 2784, 601: 2784, 699: 2784, 712: 2784, 756: 2784, 758: 2784, 2784, 2784, 2784},
{2783, 2783, 2783, 2783, 2783, 2783, 2783, 2783, 2783, 2783, 2783, 2783, 2783, 2783, 2783, 2783, 63: 2783, 584: 2783, 587: 2783, 2783, 2783, 2783, 2783, 2783, 601: 2783, 699: 2783, 712: 2783, 756: 2783, 758: 2783, 2783, 2783, 2783},
// 2555
{2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 63: 2924, 69: 5652, 71: 5653, 584: 2924, 587: 2924, 2924, 2924, 2924, 2924, 2924, 601: 2924, 699: 2924, 712: 2924, 756: 2924, 758: 2924, 2924, 2924, 2924, 1127: 5654},
{2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923, 63: 2923, 584: 2923, 587: 2923, 2923, 2923, 2923, 2923, 2923, 601: 2923, 699: 2923, 712: 2923, 756: 2923, 758: 2923, 2923, 2923, 2923},
{2922, 2922, 2922, 2922, 2922, 2922, 2922, 2922, 2922, 2922, 2922, 2922, 2922, 2922, 2922, 2922, 63: 2922, 584: 2922, 587: 2922, 2922, 2922, 2922, 2922, 2922, 601: 2922, 699: 2922, 712: 2922, 756: 2922, 758: 2922, 2922, 2922, 2922},
{2781, 2781, 2781, 2781, 2781, 2781, 2781, 2781, 2781, 2781, 2781, 2781, 2781, 2781, 2781, 2781, 63: 2781, 584: 2781, 587: 2781, 2781, 2781, 2781, 2781, 2781, 601: 2781, 699: 2781, 712: 2781, 756: 2781, 758: 2781, 2781, 2781, 2781},
{2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 63: 2924, 69: 5652, 71: 5653, 107: 5656, 109: 5657, 584: 2924, 587: 2924, 2924, 2924, 2924, 2924, 2924, 601: 2924, 699: 2924, 712: 2924, 756: 2924, 758: 2924, 2924, 2924, 2924, 992: 5659, 1127: 5658},
// 2560
{2926, 2926, 2926, 2926, 2926, 2926, 2926, 2926, 2926, 2926, 2926, 2926, 2926, 2926, 2926, 2926, 21: 2926, 2926, 63: 2926, 69: 2926, 71: 2926, 106: 2926, 2926, 2926, 2926, 2926, 2926, 2926, 584: 2926, 586: 2926, 2926, 2926, 2926, 2926, 2926, 2926, 594: 2926, 601: 2926, 609: 2926, 615: 2926, 699: 2926, 712: 2926, 756: 2926, 758: 2926, 2926, 2926, 2926},
{2925, 2925, 2925, 2925, 2925, 2925, 2925, 2925, 2925, 2925, 2925, 2925, 2925, 2925, 2925, 2925, 21: 2925, 2925, 63: 2925, 69: 2925, 71: 2925, 106: 2925, 2925, 2925, 2925, 2925, 2925, 2925, 584: 2925, 586: 2925, 2925, 2925, 2925, 2925, 2925, 2925, 594: 2925, 601: 2925, 609: 2925, 615: 2925, 699: 2925, 712: 2925, 756: 2925, 758: 2925, 2925, 2925, 2925},
{2786, 2786, 2786, 2786, 2786, 2786, 2786, 2786, 2786, 2786, 2786, 2786, 2786, 2786, 2786, 2786, 63: 2786, 584: 2786, 587: 2786, 2786, 2786, 2786, 2786, 2786, 601: 2786, 699: 2786, 712: 2786, 756: 2786, 758: 2786, 2786, 2786, 2786},
{2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 2924, 63: 2924, 69: 5652, 71: 5653, 584: 2924, 587: 2924, 2924, 2924, 2924, 2924, 2924, 601: 2924, 699: 2924, 712: 2924, 756: 2924, 758: 2924, 2924, 2924, 2924, 1127: 5660},
{2785, 2785, 2785, 2785, 2785, 2785, 2785, 2785, 2785, 2785, 2785, 2785, 2785, 2785, 2785, 2785, 63: 2785, 584: 2785, 587: 2785, 2785, 2785, 2785, 2785, 2785, 601: 2785, 699: 2785, 712: 2785, 756: 2785, 758: 2785, 2785, 2785, 2785},
// 2565
{2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789, 2789, 63: 2789, 584: 2789, 587: 2789, 2789, 2789, 2789, 2789, 2789, 601: 2789, 699: 2789, 712: 2789, 756: 2789, 758: 2789, 2789, 2789, 2789},
{699: 2895, 712: 2895, 756: 2895, 758: 2895, 764: 2895, 817: 2895, 2895},
{2894, 2894, 2894, 2894, 2894, 2894, 9: 2894, 587: 2894, 699: 2894, 712: 2894, 756: 2894, 758: 2894, 764: 2894, 817: 2894, 2894},
{2822, 2822, 2822, 2822, 2822, 2822, 9: 2822, 11: 2822, 2822, 63: 2822, 587: 2822},
{2956, 2956, 2956, 2956, 2956, 2956, 9: 2956, 587: 2956},
// 2570
{2905, 2905, 2905, 2905, 2905, 2905, 9: 2905, 587: 2905},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4336, 3292, 3293, 3291, 876: 5668},
{2904, 2904, 2904, 2904, 2904, 2904, 9: 2904, 587: 2904},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4336, 3292, 3293, 3291, 876: 5672, 1181: 5671, 1396: 5670},
{2960, 2960, 2960, 2960, 2960, 2960, 9: 5674, 587: 2960},
// 2575
{1620, 1620, 1620, 1620, 1620, 1620, 9: 1620, 587: 1620},
{1610, 1610, 1610, 1610, 1610, 1610, 9: 1610, 587: 1610, 632: 5531, 660: 5530, 1138: 5673},
{1618, 1618, 1618, 1618, 1618, 1618, 9: 1618, 587: 1618},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4336, 3292, 3293, 3291, 876: 5672, 1181: 5675},
{1619, 1619, 1619, 1619, 1619, 1619, 9: 1619, 587: 1619},
// 2580
{2: 837, 837, 837, 837, 837, 837, 837, 10: 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 64: 837, 837, 837, 837, 837, 5679, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 770: 837, 951: 5678, 970: 5677},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 770: 5681, 826: 5683, 3292, 3293, 3291, 916: 5682, 993: 5680},
{836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 64: 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, 587: 836, 604: 836, 637: 836, 642: 836, 770: 836},
{835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 64: 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 587: 835, 604: 835, 637: 835, 642: 835, 770: 835},
{2963, 2963, 2963, 2963, 2963, 2963, 9: 2963, 587: 2963},
// 2585
{2932, 2932, 2932, 2932, 2932, 2932, 9: 2932, 23: 2932, 587: 2932},
{2931, 2931, 2931, 2931, 2931, 2931, 9: 5684, 23: 2931, 587: 2931},
{2899, 2899, 2899, 2899, 2899, 2899, 9: 2899, 23: 2899, 63: 2899, 157: 2899, 245: 2899, 253: 2899, 586: 2899, 2899, 616: 2899, 764: 2899, 770: 2899},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5685, 3292, 3293, 3291},
{2898, 2898, 2898, 2898, 2898, 2898, 9: 2898, 23: 2898, 63: 2898, 157: 2898, 245: 2898, 253: 2898, 586: 2898, 2898, 616: 2898, 764: 2898, 770: 2898},
// 2590
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 770: 5681, 826: 5683, 3292, 3293, 3291, 916: 5682, 993: 5688},
{2964, 2964, 2964, 2964, 2964, 2964, 9: 2964, 587: 2964},
{23: 5689},
{2966, 2966, 2966, 2966, 2966, 2966, 9: 2966, 587: 2966},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 770: 5681, 826: 5683, 3292, 3293, 3291, 916: 5682, 993: 5692},
// 2595
{2965, 2965, 2965, 2965, 2965, 2965, 9: 2965, 587: 2965},
{23: 5693},
{2967, 2967, 2967, 2967, 2967, 2967, 9: 2967, 587: 2967},
{2: 837, 837, 837, 837, 837, 837, 837, 10: 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 64: 837, 837, 837, 837, 837, 5679, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 770: 837, 951: 5678, 970: 5695},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 770: 5681, 826: 5683, 3292, 3293, 3291, 916: 5682, 993: 5696},
// 2600
{2968, 2968, 2968, 2968, 2968, 2968, 9: 2968, 587: 2968},
{2: 837, 837, 837, 837, 837, 837, 837, 10: 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 64: 837, 837, 837, 837, 837, 5679, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 770: 837, 951: 5678, 970: 5698},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 770: 5681, 826: 5683, 3292, 3293, 3291, 916: 5682, 993: 5699},
{2969, 2969, 2969, 2969, 2969, 2969, 9: 2969, 587: 2969},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 770: 5681, 826: 5683, 3292, 3293, 3291, 916: 5682, 993: 5701},
// 2605
{2970, 2970, 2970, 2970, 2970, 2970, 9: 2970, 587: 2970},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5703, 3292, 3293, 3291},
{586: 5704},
{642: 5705},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 5706},
// 2610
{2930, 2930, 2930, 2930, 2930, 2930, 9: 2930, 313: 5710, 586: 5709, 2930, 1606: 5708, 5707},
{2971, 2971, 2971, 2971, 2971, 2971, 9: 2971, 587: 2971},
{2929, 2929, 2929, 2929, 2929, 2929, 9: 2929, 587: 2929},
{286: 5712},
{286: 5711},
// 2615
{2927, 2927, 2927, 2927, 2927, 2927, 9: 2927, 587: 2927},
{2928, 2928, 2928, 2928, 2928, 2928, 9: 2928, 587: 2928},
{238: 5714},
{244: 5715},
{583: 5716},
// 2620
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 5717},
{63: 5718, 597: 4091, 4092, 4097, 614: 4093, 672: 4094, 680: 4095, 4088, 4098, 4087, 4096, 4089, 4090},
{2291, 2291, 2291, 2291, 2291, 2291, 9: 2291, 587: 2291, 631: 5356, 914: 5719},
{2973, 2973, 2973, 2973, 2973, 2973, 9: 2973, 587: 2973},
{69: 5679, 604: 837, 951: 5678, 970: 5721},
// 2625
{604: 3284, 854: 5722},
{2977, 2977, 2977, 2977, 2977, 2977, 9: 2977, 587: 2977},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 770: 5681, 826: 5683, 3292, 3293, 3291, 916: 5682, 993: 5724},
{2978, 2978, 2978, 2978, 2978, 2978, 9: 2978, 587: 2978},
{13: 5732, 133: 5414, 139: 5415, 185: 5404, 189: 5425, 5424, 192: 5427, 5406, 5387, 5730, 198: 5426, 5384, 210: 5421, 212: 5393, 5383, 215: 5402, 218: 5410, 5409, 5413, 606: 5408, 611: 5403, 637: 5398, 763: 5407, 782: 5390, 5388, 5385, 5389, 5412, 5411, 790: 5381, 5375, 793: 5399, 795: 5382, 5417, 5391, 5392, 5376, 5377, 5378, 5379, 5380, 5405, 5419, 5423, 5418, 5373, 5422, 5374, 5386, 5372, 5416, 5371, 5420, 975: 5394, 1040: 5396, 1042: 5370, 5400, 1045: 5367, 1050: 5365, 1055: 5368, 5369, 1060: 5366, 1063: 5395, 5363, 5397, 1074: 5364, 1078: 5401, 5731, 1081: 5428},
// 2630
{2: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 10: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 64: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 631: 5356, 914: 5727},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4336, 3292, 3293, 3291, 876: 5360, 1025: 5728},
{2906, 2906, 2906, 2906, 2906, 2906, 9: 2906, 11: 5666, 5667, 587: 2906, 996: 5729},
{2957, 2957, 2957, 2957, 2957, 2957, 9: 2957, 587: 2957},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5738, 3292, 3293, 3291, 963: 5737},
// 2635
{2752, 2752, 2752, 2752, 2752, 2752, 5507, 5515, 5513, 2752, 5501, 2752, 2752, 5505, 5514, 5512, 584: 5506, 587: 2752, 4121, 5504, 4120, 2759, 5511, 601: 5500, 699: 2799, 712: 5498, 756: 2897, 758: 5503, 5496, 5519, 5516, 949: 5499, 960: 5508, 989: 5510, 995: 5517, 1000: 5509, 1006: 5502, 1026: 5518, 5735},
{2752, 2752, 2752, 2752, 2752, 2752, 5507, 5515, 5513, 2752, 5501, 2752, 2752, 5505, 5514, 5512, 584: 5506, 587: 2752, 4121, 5504, 4120, 2759, 5511, 601: 5500, 699: 2799, 712: 5498, 756: 2897, 758: 5503, 5496, 5519, 5516, 949: 5499, 960: 5508, 989: 5510, 995: 5517, 1000: 5509, 1006: 5502, 1026: 5518, 5733},
{2906, 2906, 2906, 2906, 2906, 2906, 9: 2906, 11: 5666, 5667, 587: 2906, 996: 5734},
{2983, 2983, 2983, 2983, 2983, 2983, 9: 2983, 587: 2983},
{2906, 2906, 2906, 2906, 2906, 2906, 9: 2906, 11: 5666, 5667, 587: 2906, 996: 5736},
// 2640
{2984, 2984, 2984, 2984, 2984, 2984, 9: 2984, 587: 2984},
{611: 5739},
{2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 17: 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 63: 2661, 132: 2661, 144: 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 2661, 583: 2661, 2661, 586: 2661, 2661, 589: 2661, 591: 2661, 2661, 2661, 600: 2661, 602: 2661, 2661, 606: 2661, 611: 2661, 618: 2661, 642: 2661, 692: 2661, 763: 2661, 2661},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 646: 5741, 826: 5740, 3292, 3293, 3291},
{605: 5751},
// 2645
{584: 5742},
{302: 5744, 583: 5743},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5747, 3292, 3293, 3291, 1135: 5746, 1285: 5745},
{2981, 2981, 2981, 2981, 2981, 2981, 9: 2981, 587: 2981},
{9: 5749, 63: 5748},
// 2650
{9: 204, 63: 204},
{9: 202, 63: 202},
{2982, 2982, 2982, 2982, 2982, 2982, 9: 2982, 587: 2982},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5747, 3292, 3293, 3291, 1135: 5750},
{9: 203, 63: 203},
// 2655
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 5752},
{2985, 2985, 2985, 2985, 2985, 2985, 9: 2985, 587: 2985, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{2509, 2509, 2509, 2509, 2509, 2509, 9: 2509, 195: 5776, 587: 2509, 646: 5774, 788: 5775, 1070: 5777},
{2: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 10: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 64: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 631: 5356, 914: 5771},
{699: 5770},
// 2660
{2: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 10: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 64: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 631: 5356, 914: 5768},
{2: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 10: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 64: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 631: 5356, 914: 5766},
{2: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 10: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 64: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 631: 5356, 914: 5764},
{699: 5762},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5761, 3292, 3293, 3291},
// 2665
{2938, 2938, 2938, 2938, 2938, 2938, 9: 2938, 587: 2938},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5663, 3292, 3293, 3291, 1369: 5763},
{2961, 2961, 2961, 2961, 2961, 2961, 9: 2961, 587: 2961},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5765, 3292, 3293, 3291},
{2962, 2962, 2962, 2962, 2962, 2962, 9: 2962, 587: 2962},
// 2670
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5767, 3292, 3293, 3291},
{2972, 2972, 2972, 2972, 2972, 2972, 9: 2972, 587: 2972},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5683, 3292, 3293, 3291, 916: 5769},
{2974, 2974, 2974, 2974, 2974, 2974, 9: 5684, 587: 2974},
{2975, 2975, 2975, 2975, 2975, 2975, 9: 2975, 587: 2975},
// 2675
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4336, 3292, 3293, 3291, 876: 5772},
{2509, 2509, 2509, 2509, 2509, 2509, 9: 2509, 587: 2509, 646: 5774, 788: 5775, 1070: 5773},
{2976, 2976, 2976, 2976, 2976, 2976, 9: 2976, 587: 2976},
{2508, 2508, 2508, 2508, 2508, 2508, 9: 2508, 587: 2508},
{2507, 2507, 2507, 2507, 2507, 2507, 9: 2507, 587: 2507},
// 2680
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5738, 3292, 3293, 3291, 963: 5778},
{2986, 2986, 2986, 2986, 2986, 2986, 9: 2986, 587: 2986},
{2987, 2987, 2987, 2987, 2987, 2987, 9: 2987, 587: 2987},
{195: 5781},
{2959, 2959, 2959, 2959, 2959, 2959, 9: 2959, 587: 2959},
// 2685
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5738, 3292, 3293, 3291, 963: 5782},
{2988, 2988, 2988, 2988, 2988, 2988, 9: 2988, 587: 2988},
{195: 5785},
{2958, 2958, 2958, 2958, 2958, 2958, 9: 2958, 587: 2958},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5738, 3292, 3293, 3291, 963: 5786},
// 2690
{2989, 2989, 2989, 2989, 2989, 2989, 9: 2989, 587: 2989},
{238: 5788},
{244: 5789},
{583: 5790},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 5791},
// 2695
{63: 5792, 597: 4091, 4092, 4097, 614: 4093, 672: 4094, 680: 4095, 4088, 4098, 4087, 4096, 4089, 4090},
{837, 837, 837, 837, 837, 837, 9: 837, 69: 5679, 587: 837, 951: 5678, 970: 5793},
{2994, 2994, 2994, 2994, 2994, 2994, 9: 2994, 587: 2994},
{2: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 10: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 64: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 631: 5806, 915: 6004},
{2997, 2997, 2997, 2997, 2997, 2997, 9: 2997, 587: 2997},
// 2700
{2289, 2289, 2289, 2289, 2289, 2289, 9: 2289, 69: 2289, 142: 2289, 583: 2289, 587: 2289, 631: 5806, 915: 5953, 951: 2289},
{2: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 10: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 64: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 631: 5806, 915: 5944},
{13: 5921, 133: 5414, 139: 5415, 185: 5404, 189: 5425, 5424, 192: 5427, 5406, 5387, 5922, 198: 5426, 5384, 210: 5421, 212: 5393, 5383, 215: 5402, 218: 5410, 5409, 5413, 606: 5408, 611: 5403, 637: 5398, 763: 5407, 782: 5390, 5388, 5385, 5389, 5412, 5411, 790: 5381, 5375, 793: 5399, 795: 5382, 5417, 5391, 5392, 5376, 5377, 5378, 5379, 5380, 5405, 5419, 5423, 5418, 5373, 5422, 5374, 5386, 5372, 5416, 5371, 5420, 975: 5394, 1040: 5396, 1042: 5370, 5400, 1045: 5367, 1050: 5365, 1055: 5368, 5369, 1060: 5366, 1063: 5395, 5363, 5397, 1074: 5364, 1078: 5401, 5920, 1081: 5428},
{699: 5314, 712: 5876, 756: 5881, 758: 5879, 764: 5315, 817: 5880, 5877, 988: 5878, 1425: 5882},
{764: 5869},
// 2705
{764: 5805},
{697, 697, 697, 697, 697, 697, 9: 697, 63: 697, 587: 697},
{696, 696, 696, 696, 696, 696, 9: 696, 63: 696, 587: 696},
{695, 695, 695, 695, 695, 695, 9: 695, 63: 695, 587: 695},
{2: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 10: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 64: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 594: 2289, 631: 5806, 915: 5807},
// 2710
{588: 4121, 590: 4120, 949: 5867},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 2285, 594: 2285, 826: 5808, 3292, 3293, 3291, 1001: 5809, 1058: 5810},
{106: 5865, 583: 2284, 594: 2284},
{583: 2268, 594: 5863},
{583: 5811},
// 2715
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 5526, 826: 4336, 3292, 3293, 3291, 876: 5525, 968: 5524, 978: 5812},
{9: 5535, 63: 5813},
{2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283, 9: 2283, 21: 2283, 2283, 63: 2283, 69: 2283, 71: 2283, 106: 2283, 2283, 2283, 2283, 2283, 2283, 586: 2283, 2283, 594: 2283, 609: 2283, 1003: 5814},
{698, 698, 698, 698, 698, 698, 5820, 5826, 9: 698, 21: 5816, 5825, 63: 698, 69: 5824, 71: 5823, 106: 5829, 5656, 5334, 5657, 5333, 5817, 586: 5819, 698, 594: 5828, 609: 5827, 986: 5821, 5818, 992: 5822, 1002: 5815},
{2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 9: 2282, 21: 2282, 2282, 63: 2282, 69: 2282, 71: 2282, 106: 2282, 2282, 2282, 2282, 2282, 2282, 2282, 586: 2282, 2282, 594: 2282, 609: 2282, 615: 2282},
// 2720
{604: 2504, 4917, 855: 5861},
{2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 9: 2280, 21: 2280, 2280, 63: 2280, 69: 2280, 71: 2280, 106: 2280, 2280, 2280, 2280, 2280, 2280, 2280, 586: 2280, 2280, 594: 2280, 609: 2280, 615: 2280},
{2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 9: 2279, 21: 2279, 2279, 63: 2279, 69: 2279, 71: 2279, 106: 2279, 2279, 2279, 2279, 2279, 2279, 2279, 586: 2279, 2279, 594: 2279, 609: 2279, 615: 2279},
{458: 5859},
{585: 5858},
// 2725
{2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 9: 2276, 21: 2276, 2276, 63: 2276, 69: 2276, 71: 2276, 106: 2276, 2276, 2276, 2276, 2276, 2276, 2276, 586: 2276, 2276, 594: 2276, 609: 2276, 615: 2276},
{2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 9: 2275, 21: 2275, 2275, 63: 2275, 69: 2275, 71: 2275, 106: 2275, 2275, 2275, 2275, 2275, 2275, 2275, 586: 2275, 2275, 594: 2275, 609: 2275, 615: 2275},
{2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 9: 2274, 21: 2274, 2274, 63: 2274, 69: 2274, 71: 2274, 106: 2274, 2274, 2274, 2274, 2274, 2274, 2274, 586: 2274, 2274, 594: 2274, 609: 2274, 615: 2274},
{2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 9: 2273, 21: 2273, 2273, 63: 2273, 69: 2273, 71: 2273, 106: 2273, 2273, 2273, 2273, 2273, 2273, 2273, 586: 2273, 2273, 594: 2273, 609: 2273, 615: 2273},
{583: 2504, 604: 2504, 4917, 855: 5841},
// 2730
{585: 2504, 605: 4917, 855: 5839},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 5838},
{230: 5832, 248: 5834, 264: 5831, 270: 5835, 5836, 280: 5833, 1093: 5837},
{230: 5832, 248: 5834, 264: 5831, 270: 5835, 5836, 280: 5833, 1093: 5830},
{2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 9: 2262, 21: 2262, 2262, 63: 2262, 69: 2262, 71: 2262, 106: 2262, 2262, 2262, 2262, 2262, 2262, 2262, 584: 2262, 586: 2262, 2262, 594: 2262, 609: 2262, 615: 2262},
// 2735
{2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 9: 2261, 21: 2261, 2261, 63: 2261, 69: 2261, 71: 2261, 106: 2261, 2261, 2261, 2261, 2261, 2261, 2261, 583: 2261, 2261, 586: 2261, 2261, 594: 2261, 609: 2261, 615: 2261},
{2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 9: 2260, 21: 2260, 2260, 63: 2260, 69: 2260, 71: 2260, 106: 2260, 2260, 2260, 2260, 2260, 2260, 2260, 583: 2260, 2260, 586: 2260, 2260, 594: 2260, 609: 2260, 615: 2260},
{2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 9: 2259, 21: 2259, 2259, 63: 2259, 69: 2259, 71: 2259, 106: 2259, 2259, 2259, 2259, 2259, 2259, 2259, 583: 2259, 2259, 586: 2259, 2259, 594: 2259, 609: 2259, 615: 2259},
{2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 9: 2258, 21: 2258, 2258, 63: 2258, 69: 2258, 71: 2258, 106: 2258, 2258, 2258, 2258, 2258, 2258, 2258, 583: 2258, 2258, 586: 2258, 2258, 594: 2258, 609: 2258, 615: 2258},
{2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 9: 2257, 21: 2257, 2257, 63: 2257, 69: 2257, 71: 2257, 106: 2257, 2257, 2257, 2257, 2257, 2257, 2257, 583: 2257, 2257, 586: 2257, 2257, 594: 2257, 609: 2257, 615: 2257},
// 2740
{2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 9: 2256, 21: 2256, 2256, 63: 2256, 69: 2256, 71: 2256, 106: 2256, 2256, 2256, 2256, 2256, 2256, 2256, 583: 2256, 2256, 586: 2256, 2256, 594: 2256, 609: 2256, 615: 2256},
{2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 9: 2263, 21: 2263, 2263, 63: 2263, 69: 2263, 71: 2263, 106: 2263, 2263, 2263, 2263, 2263, 2263, 2263, 584: 2263, 586: 2263, 2263, 594: 2263, 609: 2263, 615: 2263},
{2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 9: 2269, 21: 2269, 2269, 63: 2269, 69: 2269, 71: 2269, 106: 2269, 2269, 2269, 2269, 2269, 2269, 2269, 586: 2269, 2269, 594: 2269, 609: 2269, 615: 2269, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{585: 5840},
{2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 9: 2270, 21: 2270, 2270, 63: 2270, 69: 2270, 71: 2270, 106: 2270, 2270, 2270, 2270, 2270, 2270, 2270, 586: 2270, 2270, 594: 2270, 609: 2270, 615: 2270},
// 2745
{583: 5842, 604: 3284, 854: 4867, 880: 5843},
{673: 5844, 776: 5846, 1013: 5845, 1157: 5847},
{2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 9: 2271, 21: 2271, 2271, 63: 2271, 69: 2271, 71: 2271, 106: 2271, 2271, 2271, 2271, 2271, 2271, 2271, 586: 2271, 2271, 594: 2271, 609: 2271, 615: 2271},
{583: 4202, 1010: 5853},
{2866, 2866, 63: 2866},
// 2750
{583: 4202, 1010: 5850, 1170: 5849},
{63: 5848},
{2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 9: 2272, 21: 2272, 2272, 63: 2272, 69: 2272, 71: 2272, 106: 2272, 2272, 2272, 2272, 2272, 2272, 2272, 586: 2272, 2272, 594: 2272, 609: 2272, 615: 2272},
{2865, 2865, 9: 5851, 63: 2865},
{1650, 1650, 9: 1650, 16: 1650, 63: 1650, 584: 1650, 594: 1650},
// 2755
{583: 4202, 1010: 5852},
{1649, 1649, 9: 1649, 16: 1649, 63: 1649, 584: 1649, 594: 1649},
{620: 5854},
{583: 4202, 1010: 5855},
{132: 5856},
// 2760
{604: 3284, 854: 4867, 880: 5857},
{2867, 2867, 2867, 63: 2867, 583: 2867, 2867, 586: 2867, 591: 2867, 600: 2867, 602: 2867, 2867, 642: 2867, 692: 2867},
{2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 9: 2277, 21: 2277, 2277, 63: 2277, 69: 2277, 71: 2277, 106: 2277, 2277, 2277, 2277, 2277, 2277, 2277, 586: 2277, 2277, 594: 2277, 609: 2277, 615: 2277},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5860, 3292, 3293, 3291},
{2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 9: 2278, 21: 2278, 2278, 63: 2278, 69: 2278, 71: 2278, 106: 2278, 2278, 2278, 2278, 2278, 2278, 2278, 586: 2278, 2278, 594: 2278, 609: 2278, 615: 2278},
// 2765
{604: 3284, 854: 4175, 865: 5862},
{2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 9: 2281, 21: 2281, 2281, 63: 2281, 69: 2281, 71: 2281, 106: 2281, 2281, 2281, 2281, 2281, 2281, 2281, 586: 2281, 2281, 594: 2281, 609: 2281, 615: 2281},
{230: 5832, 248: 5834, 264: 5831, 270: 5835, 5836, 280: 5833, 1093: 5864},
{583: 2267},
{230: 5832, 248: 5834, 264: 5831, 270: 5835, 5836, 280: 5833, 1093: 5866},
// 2770
{583: 2266},
{701: 5868},
{2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 64: 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 2288, 585: 2288, 587: 2288, 589: 2288, 594: 2288, 614: 2288, 687: 2288, 951: 2288},
{2: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 10: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 64: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 594: 2289, 631: 5806, 915: 5870},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 2285, 594: 2285, 826: 5808, 3292, 3293, 3291, 1001: 5809, 1058: 5871},
// 2775
{583: 5872},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 5526, 826: 4336, 3292, 3293, 3291, 876: 5525, 968: 5524, 978: 5873},
{9: 5535, 63: 5874},
{2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283, 9: 2283, 21: 2283, 2283, 63: 2283, 69: 2283, 71: 2283, 106: 2283, 2283, 2283, 2283, 2283, 2283, 586: 2283, 2283, 594: 2283, 609: 2283, 1003: 5875},
{699, 699, 699, 699, 699, 699, 5820, 5826, 9: 699, 21: 5816, 5825, 63: 699, 69: 5824, 71: 5823, 106: 5829, 5656, 5334, 5657, 5333, 5817, 586: 5819, 699, 594: 5828, 609: 5827, 986: 5821, 5818, 992: 5822, 1002: 5815},
// 2780
{699: 5914},
{2: 2910, 2910, 2910, 2910, 2910, 2910, 2910, 10: 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 64: 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 699: 5314, 764: 5315, 988: 5895, 1270: 5908},
{2: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 10: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 64: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 594: 2289, 631: 5806, 915: 5902},
{2: 2910, 2910, 2910, 2910, 2910, 2910, 2910, 10: 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 64: 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 2910, 594: 2910, 699: 5314, 764: 5315, 988: 5895, 1270: 5896},
{699: 5887},
// 2785
{583: 5883},
{700, 700, 700, 700, 700, 700, 9: 700, 63: 700, 587: 700},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 5884},
{63: 5885, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{2793, 2793, 2793, 2793, 2793, 2793, 9: 2793, 63: 2793, 236: 5337, 587: 2793, 4121, 590: 4120, 949: 5338, 1124: 5594, 1242: 5886},
// 2790
{2745, 2745, 2745, 2745, 2745, 2745, 9: 2745, 63: 2745, 587: 2745},
{2: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 10: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 64: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 631: 5806, 915: 5888},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 2285, 826: 5890, 3292, 3293, 3291, 1001: 5889},
{583: 5891},
{583: 2284},
// 2795
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 5526, 826: 4336, 3292, 3293, 3291, 876: 5525, 968: 5524, 978: 5892},
{9: 5535, 63: 5893},
{760: 5519, 989: 5894},
{2746, 2746, 2746, 2746, 2746, 2746, 9: 2746, 63: 2746, 587: 2746},
{2: 2909, 2909, 2909, 2909, 2909, 2909, 2909, 10: 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 64: 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 2909, 594: 2909},
// 2800
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 2285, 594: 2285, 826: 5808, 3292, 3293, 3291, 1001: 5809, 1058: 5897},
{583: 5898},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 5526, 826: 4336, 3292, 3293, 3291, 876: 5525, 968: 5524, 978: 5899},
{9: 5535, 63: 5900},
{2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283, 9: 2283, 21: 2283, 2283, 63: 2283, 69: 2283, 71: 2283, 106: 2283, 2283, 2283, 2283, 2283, 2283, 586: 2283, 2283, 594: 2283, 609: 2283, 1003: 5901},
// 2805
{2747, 2747, 2747, 2747, 2747, 2747, 5820, 5826, 9: 2747, 21: 5816, 5825, 63: 2747, 69: 5824, 71: 5823, 106: 5829, 5656, 5334, 5657, 5333, 5817, 586: 5819, 2747, 594: 5828, 609: 5827, 986: 5821, 5818, 992: 5822, 1002: 5815},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 2285, 594: 2285, 826: 5808, 3292, 3293, 3291, 1001: 5809, 1058: 5903},
{583: 5904},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 5526, 826: 4336, 3292, 3293, 3291, 876: 5525, 968: 5524, 978: 5905},
{9: 5535, 63: 5906},
// 2810
{2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283, 9: 2283, 21: 2283, 2283, 63: 2283, 69: 2283, 71: 2283, 106: 2283, 2283, 2283, 2283, 2283, 2283, 586: 2283, 2283, 594: 2283, 609: 2283, 1003: 5907},
{2748, 2748, 2748, 2748, 2748, 2748, 5820, 5826, 9: 2748, 21: 5816, 5825, 63: 2748, 69: 5824, 71: 5823, 106: 5829, 5656, 5334, 5657, 5333, 5817, 586: 5819, 2748, 594: 5828, 609: 5827, 986: 5821, 5818, 992: 5822, 1002: 5815},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 2285, 826: 5890, 3292, 3293, 3291, 1001: 5909},
{583: 5910},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 5526, 826: 4336, 3292, 3293, 3291, 876: 5525, 968: 5524, 978: 5911},
// 2815
{9: 5535, 63: 5912},
{2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283, 9: 2283, 21: 2283, 2283, 63: 2283, 69: 2283, 71: 2283, 106: 2283, 2283, 2283, 2283, 2283, 2283, 586: 2283, 2283, 594: 2283, 609: 2283, 1003: 5913},
{2749, 2749, 2749, 2749, 2749, 2749, 5820, 5826, 9: 2749, 21: 5816, 5825, 63: 2749, 69: 5824, 71: 5823, 106: 5829, 5656, 5334, 5657, 5333, 5817, 586: 5819, 2749, 594: 5828, 609: 5827, 986: 5821, 5818, 992: 5822, 1002: 5815},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 2285, 594: 2285, 826: 5808, 3292, 3293, 3291, 1001: 5809, 1058: 5915},
{583: 5916},
// 2820
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 5526, 826: 4336, 3292, 3293, 3291, 876: 5525, 968: 5524, 978: 5917},
{9: 5535, 63: 5918},
{2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283, 9: 2283, 21: 2283, 2283, 63: 2283, 69: 2283, 71: 2283, 106: 2283, 2283, 2283, 2283, 2283, 2283, 586: 2283, 2283, 594: 2283, 609: 2283, 1003: 5919},
{2750, 2750, 2750, 2750, 2750, 2750, 5820, 5826, 9: 2750, 21: 5816, 5825, 63: 2750, 69: 5824, 71: 5823, 106: 5829, 5656, 5334, 5657, 5333, 5817, 586: 5819, 2750, 594: 5828, 609: 5827, 986: 5821, 5818, 992: 5822, 1002: 5815},
{2752, 2752, 2752, 2752, 2752, 2752, 5507, 5515, 5513, 2752, 5501, 2752, 2752, 5505, 5514, 5512, 584: 5506, 587: 2752, 4121, 5504, 4120, 2759, 5511, 601: 5500, 699: 2799, 712: 5498, 756: 2897, 758: 5503, 5496, 5519, 5516, 949: 5499, 960: 5508, 989: 5510, 995: 5517, 1000: 5509, 1006: 5502, 1026: 5518, 5942},
// 2825
{2752, 2752, 2752, 2752, 2752, 2752, 5507, 5515, 5513, 2752, 5501, 2752, 2752, 5505, 5514, 5512, 584: 5506, 587: 2752, 4121, 5504, 4120, 2759, 5511, 601: 5500, 699: 2799, 712: 5498, 756: 2897, 758: 5503, 5496, 5519, 5516, 949: 5499, 960: 5508, 989: 5510, 995: 5517, 1000: 5509, 1006: 5502, 1026: 5518, 5940},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5738, 3292, 3293, 3291, 963: 5923},
{584: 5924},
{583: 5925},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5926, 3292, 3293, 3291},
// 2830
{63: 5927},
{591: 5928},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 5929},
{207, 207, 207, 207, 207, 207, 9: 207, 225: 207, 207, 587: 207, 620: 4054, 4052, 4053, 4051, 4049, 646: 5931, 856: 4050, 4048, 1284: 5930},
{210, 210, 210, 210, 210, 210, 9: 210, 225: 5939, 5938, 587: 210, 1286: 5937},
// 2835
{584: 5932},
{302: 5934, 583: 5933},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5747, 3292, 3293, 3291, 1135: 5746, 1285: 5935},
{205, 205, 205, 205, 205, 205, 9: 205, 225: 205, 205, 587: 205},
{9: 5749, 63: 5936},
// 2840
{206, 206, 206, 206, 206, 206, 9: 206, 225: 206, 206, 587: 206},
{2990, 2990, 2990, 2990, 2990, 2990, 9: 2990, 587: 2990},
{209, 209, 209, 209, 209, 209, 9: 209, 587: 209},
{208, 208, 208, 208, 208, 208, 9: 208, 587: 208},
{2906, 2906, 2906, 2906, 2906, 2906, 9: 2906, 11: 5666, 5667, 587: 2906, 996: 5941},
// 2845
{2991, 2991, 2991, 2991, 2991, 2991, 9: 2991, 587: 2991},
{2906, 2906, 2906, 2906, 2906, 2906, 9: 2906, 11: 5666, 5667, 587: 2906, 996: 5943},
{2992, 2992, 2992, 2992, 2992, 2992, 9: 2992, 587: 2992},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5945, 3292, 3293, 3291},
{323: 5947, 331: 5949, 334: 5948, 1365: 5946},
// 2850
{583: 5950},
{63: 2690, 583: 2690},
{63: 2689, 583: 2689},
{63: 2688, 583: 2688},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4336, 3292, 3293, 3291, 876: 4337, 959: 5951},
// 2855
{9: 4339, 63: 5952},
{2993, 2993, 2993, 2993, 2993, 2993, 9: 2993, 587: 2993},
{837, 837, 837, 837, 837, 837, 9: 837, 69: 5679, 142: 837, 583: 837, 587: 837, 951: 5678, 970: 5954},
{2602, 2602, 2602, 2602, 2602, 2602, 9: 2602, 142: 5956, 583: 5957, 587: 2602, 1307: 5955},
{2996, 2996, 2996, 2996, 2996, 2996, 9: 2996, 587: 2996},
// 2860
{604: 3284, 854: 6003},
{587: 5960, 1141: 5959, 1306: 5958},
{9: 6001, 63: 6000},
{9: 2600, 63: 2600},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5961, 3292, 3293, 3291},
// 2865
{6: 2577, 2577, 2577, 2577, 20: 2577, 23: 2577, 25: 2577, 2577, 2577, 2577, 2577, 2577, 2577, 63: 2577, 228: 5966, 299: 5965, 583: 2577, 589: 5964, 600: 5963, 764: 2577, 1499: 5962},
{6: 2592, 2592, 2592, 2592, 20: 2592, 23: 2592, 25: 2592, 2592, 2592, 2592, 2592, 2592, 2592, 63: 2592, 583: 2592, 764: 2592, 1140: 5987},
{238: 5967, 661: 5968},
{6: 2574, 2574, 2574, 2574, 20: 2574, 23: 2574, 25: 2574, 2574, 2574, 2574, 2574, 2574, 2574, 63: 2574, 583: 2574, 764: 2574},
{6: 2572, 2572, 2572, 2572, 20: 2572, 23: 2572, 25: 2572, 2572, 2572, 2572, 2572, 2572, 2572, 63: 2572, 583: 2572, 764: 2572},
// 2870
{6: 2571, 2571, 2571, 2571, 20: 2571, 23: 2571, 25: 2571, 2571, 2571, 2571, 2571, 2571, 2571, 63: 2571, 583: 2571, 764: 2571},
{244: 5977},
{583: 5969},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 5971, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 5972, 1221: 5973, 1433: 5970},
{9: 5975, 63: 5974},
// 2875
{9: 2375, 63: 2375, 583: 4209},
{9: 2374, 63: 2374, 597: 4091, 4092, 4097, 614: 4093, 672: 4094, 680: 4095, 4088, 4098, 4087, 4096, 4089, 4090},
{9: 2358, 63: 2358},
{6: 2573, 2573, 2573, 2573, 20: 2573, 23: 2573, 25: 2573, 2573, 2573, 2573, 2573, 2573, 2573, 63: 2573, 583: 2573, 764: 2573},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 5971, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 5972, 1221: 5976},
// 2880
{9: 2357, 63: 2357},
{583: 5979, 775: 5978},
{6: 2576, 2576, 2576, 2576, 20: 2576, 23: 2576, 25: 2576, 2576, 2576, 2576, 2576, 2576, 2576, 63: 2576, 583: 2576, 764: 2576},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 775: 5981, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 5982, 1287: 5983, 1480: 5980},
{9: 5985, 63: 5984},
// 2885
{9: 2373, 63: 2373},
{9: 2372, 63: 2372, 597: 4091, 4092, 4097, 614: 4093, 672: 4094, 680: 4095, 4088, 4098, 4087, 4096, 4089, 4090},
{9: 2360, 63: 2360},
{6: 2575, 2575, 2575, 2575, 20: 2575, 23: 2575, 25: 2575, 2575, 2575, 2575, 2575, 2575, 2575, 63: 2575, 583: 2575, 764: 2575},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 775: 5981, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 5982, 1287: 5986},
// 2890
{9: 2359, 63: 2359},
{6: 5103, 5107, 5991, 2597, 20: 5059, 23: 5113, 25: 5104, 5109, 5106, 5108, 5111, 5112, 5114, 63: 2597, 583: 5989, 764: 5110, 921: 5115, 972: 5990, 1565: 5988},
{9: 2598, 63: 2598},
{141: 5994, 1367: 5993, 1564: 5992},
{2591, 2591, 6: 2591, 2591, 2591, 2591, 20: 2591, 23: 2591, 25: 2591, 2591, 2591, 2591, 2591, 2591, 2591, 63: 2591, 583: 2591, 764: 2591},
// 2895
{25: 5285},
{9: 5998, 63: 5997},
{9: 2595, 63: 2595},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5995, 3292, 3293, 3291},
{6: 2592, 2592, 2592, 2592, 20: 2592, 23: 2592, 25: 2592, 2592, 2592, 2592, 2592, 2592, 2592, 63: 2592, 764: 2592, 1140: 5996},
// 2900
{6: 5103, 5107, 5991, 2593, 20: 5059, 23: 5113, 25: 5104, 5109, 5106, 5108, 5111, 5112, 5114, 63: 2593, 764: 5110, 921: 5115, 972: 5990},
{9: 2596, 63: 2596},
{141: 5994, 1367: 5999},
{9: 2594, 63: 2594},
{2601, 2601, 2601, 2601, 2601, 2601, 9: 2601, 583: 2601, 2601, 586: 2601, 2601, 591: 2601, 600: 2601, 602: 2601, 2601, 642: 2601, 692: 2601, 766: 2601},
// 2905
{587: 5960, 1141: 6002},
{9: 2599, 63: 2599},
{2995, 2995, 2995, 2995, 2995, 2995, 9: 2995, 587: 2995},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 6006, 826: 4336, 3292, 3293, 3291, 876: 5360, 1025: 6005},
{2906, 2906, 2906, 2906, 2906, 2906, 9: 2906, 11: 5666, 5667, 587: 2906, 996: 6016},
// 2910
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 6008, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 6009, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 699: 2897, 712: 2897, 756: 2897, 758: 2897, 5496, 764: 2897, 817: 2897, 2897, 826: 4336, 3292, 3293, 3291, 876: 5360, 960: 5799, 1025: 6010, 1087: 5802, 5804, 5803, 6011, 1163: 6012, 1370: 6007},
{9: 6014, 63: 6013},
{13: 1869, 133: 1869, 139: 1869, 185: 1869, 189: 1869, 1869, 192: 1869, 1869, 1869, 198: 1869, 1869, 210: 1869, 212: 1869, 1869, 215: 1869, 218: 1869, 1869, 1869, 606: 1869, 611: 1869, 637: 1869, 763: 1869, 5869, 769: 1869, 782: 1869, 1869, 1869, 1869, 1869, 1869, 790: 1869, 1869, 793: 1869, 795: 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869},
{13: 1868, 133: 1868, 139: 1868, 185: 1868, 189: 1868, 1868, 192: 1868, 1868, 1868, 198: 1868, 1868, 210: 1868, 212: 1868, 1868, 215: 1868, 218: 1868, 1868, 1868, 606: 1868, 611: 1868, 637: 1868, 763: 1868, 5805, 769: 1868, 782: 1868, 1868, 1868, 1868, 1868, 1868, 790: 1868, 1868, 793: 1868, 795: 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868},
{9: 692, 63: 692},
// 2915
{9: 691, 63: 691},
{9: 690, 63: 690},
{2998, 2998, 2998, 2998, 2998, 2998, 9: 2998, 587: 2998},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 6008, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 6009, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 699: 2897, 712: 2897, 756: 2897, 758: 2897, 5496, 764: 2897, 817: 2897, 2897, 826: 4336, 3292, 3293, 3291, 876: 5360, 960: 5799, 1025: 6010, 1087: 5802, 5804, 5803, 6011, 1163: 6015},
{9: 689, 63: 689},
// 2920
{2999, 2999, 2999, 2999, 2999, 2999, 9: 2999, 587: 2999},
{18: 4738, 606: 4739, 763: 4737, 908: 6018},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 589: 6020, 637: 4666, 826: 4046, 3292, 3293, 3291, 860: 4665, 965: 6019},
{501, 501, 501, 501, 501, 501, 9: 501, 587: 501, 592: 6022, 1295: 6024},
{501, 501, 501, 501, 501, 501, 9: 501, 587: 501, 592: 6022, 1295: 6021},
// 2925
{3000, 3000, 3000, 3000, 3000, 3000, 9: 3000, 587: 3000},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 637: 4044, 826: 4046, 3292, 3293, 3291, 860: 4043, 1048: 6023},
{500, 500, 500, 500, 500, 500, 9: 500, 587: 500},
{3001, 3001, 3001, 3001, 3001, 3001, 9: 3001, 587: 3001},
{254: 6034},
// 2930
{245: 6027},
{254: 6028},
{604: 3284, 854: 4175, 865: 6029},
{3006, 3006, 3006, 3006, 3006, 3006, 9: 3006, 259: 6030, 587: 3006, 1134: 6031},
{359: 6032},
// 2935
{3002, 3002, 3002, 3002, 3002, 3002, 9: 3002, 587: 3002},
{585: 5045, 1159: 6033},
{3005, 3005, 3005, 3005, 3005, 3005, 9: 5047, 18: 3005, 20: 3005, 24: 3005, 587: 3005, 589: 3005, 592: 3005, 606: 3005, 611: 3005, 763: 3005},
{604: 3284, 854: 4175, 865: 6035},
{3006, 3006, 3006, 3006, 3006, 3006, 9: 3006, 259: 6030, 587: 3006, 1134: 6036},
// 2940
{3003, 3003, 3003, 3003, 3003, 3003, 9: 3003, 587: 3003},
{10: 640, 34: 640},
{634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 17: 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 583: 634, 634, 586: 634, 634, 589: 634, 591: 634, 634, 634, 600: 634, 602: 634, 634, 606: 634, 618: 634, 642: 634, 692: 634, 763: 634, 634},
{6: 5103, 5107, 5105, 10: 641, 17: 5124, 2643, 5122, 5059, 5126, 5138, 5113, 5142, 5104, 5109, 5106, 5108, 5111, 5112, 5114, 5121, 5152, 641, 5147, 5132, 5133, 5143, 5146, 5119, 5120, 5125, 5127, 5153, 5139, 5148, 5149, 5150, 5155, 5140, 5137, 5130, 5135, 5136, 5129, 5131, 5134, 5123, 5151, 5144, 5145, 589: 5102, 592: 2643, 5141, 606: 2643, 618: 6037, 763: 2643, 5110, 921: 5115, 948: 5117, 972: 5116, 999: 5118, 1009: 5128, 1015: 6040},
{633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 17: 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 583: 633, 633, 586: 633, 633, 589: 633, 591: 633, 633, 633, 600: 633, 602: 633, 633, 606: 633, 618: 633, 642: 633, 692: 633, 763: 633, 633},
// 2945
{585: 6043, 589: 6042},
{3017, 3017, 3017, 3017, 3017, 3017, 9: 3017, 587: 3017},
{3016, 3016, 3016, 3016, 3016, 3016, 9: 3016, 587: 3016},
{585: 6046, 589: 6045},
{3019, 3019, 3019, 3019, 3019, 3019, 9: 3019, 587: 3019},
// 2950
{3018, 3018, 3018, 3018, 3018, 3018, 9: 3018, 587: 3018},
{2: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 10: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 64: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 585: 2504, 589: 2504, 605: 4917, 611: 6049, 855: 6048},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 6051, 589: 6053, 826: 5738, 3292, 3293, 3291, 963: 6052},
{589: 6050},
{3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 17: 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 3020, 63: 3020, 583: 3020, 3020, 586: 3020, 3020, 589: 3020, 591: 3020, 3020, 3020, 600: 3020, 602: 3020, 3020, 606: 3020, 611: 3020, 618: 3020, 642: 3020, 692: 3020, 763: 3020, 3020},
// 2955
{3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 17: 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 3023, 63: 3023, 583: 3023, 3023, 586: 3023, 3023, 589: 3023, 591: 3023, 3023, 3023, 600: 3023, 602: 3023, 3023, 606: 3023, 611: 3023, 618: 3023, 642: 3023, 692: 3023, 763: 3023, 3023},
{3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 17: 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 3022, 63: 3022, 583: 3022, 3022, 586: 3022, 3022, 589: 3022, 591: 3022, 3022, 3022, 600: 3022, 602: 3022, 3022, 606: 3022, 611: 3022, 618: 3022, 642: 3022, 692: 3022, 763: 3022, 3022},
{3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 17: 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 3021, 63: 3021, 583: 3021, 3021, 586: 3021, 3021, 589: 3021, 591: 3021, 3021, 3021, 600: 3021, 602: 3021, 3021, 606: 3021, 611: 3021, 618: 3021, 642: 3021, 692: 3021, 763: 3021, 3021},
{254: 6059},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5683, 3292, 3293, 3291, 916: 6056},
// 2960
{3089, 3089, 9: 5684, 245: 6057},
{254: 6058},
{3088, 3088},
{3090, 3090},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5683, 3292, 3293, 3291, 916: 6061},
// 2965
{2847, 2847, 9: 5684, 586: 6064, 764: 6063, 958: 6062},
{3093, 3093},
{1207, 1207, 3731, 3552, 3516, 3387, 3431, 3348, 3554, 1207, 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 586: 1207, 712: 6083, 826: 6082, 3292, 3293, 3291, 1033: 6081},
{604: 6069, 670: 4401, 4400, 854: 6067, 962: 6068, 1112: 6066, 1401: 6065},
{2846, 2846, 9: 6078, 604: 6069, 670: 4401, 4400, 854: 6067, 962: 6068, 1112: 6079},
// 2970
{2845, 2845, 9: 2845, 604: 2845, 670: 2845, 2845},
{321: 6072, 326: 6074, 380: 6075, 402: 6073},
{275: 6071, 281: 6070},
{275: 2693, 281: 2693, 321: 2393, 326: 2393, 380: 2393, 402: 2393},
{2837, 2837, 9: 2837, 604: 2837, 670: 2837, 2837},
// 2975
{2836, 2836, 9: 2836, 604: 2836, 670: 2836, 2836},
{2842, 2842, 9: 2842, 604: 2842, 670: 2842, 2842},
{2841, 2841, 9: 2841, 604: 2841, 670: 2841, 2841},
{428: 6076, 501: 6077},
{2838, 2838, 9: 2838, 604: 2838, 670: 2838, 2838},
// 2980
{2840, 2840, 9: 2840, 604: 2840, 670: 2840, 2840},
{2839, 2839, 9: 2839, 604: 2839, 670: 2839, 2839},
{604: 6069, 670: 4401, 4400, 854: 6067, 962: 6068, 1112: 6080},
{2843, 2843, 9: 2843, 604: 2843, 670: 2843, 2843},
{2844, 2844, 9: 2844, 604: 2844, 670: 2844, 2844},
// 2985
{2847, 2847, 9: 6085, 586: 6064, 958: 6084},
{1206, 1206, 9: 1206, 63: 1206, 586: 1206},
{1204, 1204, 9: 1204, 63: 1204, 586: 1204},
{3092, 3092},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 712: 6087, 826: 6086, 3292, 3293, 3291},
// 2990
{1205, 1205, 9: 1205, 63: 1205, 586: 1205},
{1203, 1203, 9: 1203, 63: 1203, 586: 1203},
{3094, 3094},
{673: 5844, 712: 6209, 764: 6210, 775: 6212, 1013: 6211},
{3015, 3015},
// 2995
{38: 6208, 460: 6207},
{587: 6199},
{3012, 3012},
{11: 6192},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 776: 6097, 826: 6096, 3292, 3293, 3291},
// 3000
{2592, 2592, 6: 2592, 2592, 2592, 20: 2592, 23: 2592, 25: 2592, 2592, 2592, 2592, 2592, 2592, 2592, 288: 5060, 764: 2592, 1114: 6190, 1140: 6191},
{230: 2610, 448: 6102, 488: 6103, 645: 6101, 699: 2610, 1275: 6104, 6099, 1368: 6100, 1501: 6098},
{2604, 2604, 2604, 141: 2604, 6167, 583: 2604, 2604, 586: 2604, 591: 2604, 600: 2604, 602: 2604, 2604, 642: 2604, 692: 2604, 766: 2604, 1502: 6166},
{230: 6154, 699: 6153},
{2628, 2628, 2628, 141: 2628, 2628, 583: 2628, 2628, 586: 2628, 591: 2628, 600: 2628, 602: 2628, 2628, 642: 2628, 692: 2628, 766: 2628},
// 3005
{157: 4262, 184: 4261, 583: 6117, 998: 6118},
{157: 4262, 184: 4261, 583: 6110, 998: 6111},
{2621, 2621, 2621, 141: 2621, 2621, 583: 2621, 2621, 586: 2621, 591: 2621, 600: 2621, 602: 2621, 2621, 612: 6106, 642: 2621, 692: 2621, 696: 6105, 766: 2621},
{230: 2609, 699: 2609},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 6108},
// 3010
{604: 3284, 854: 4175, 865: 6107},
{2622, 2622, 2622, 141: 2622, 2622, 583: 2622, 2622, 586: 2622, 591: 2622, 600: 2622, 602: 2622, 2622, 642: 2622, 692: 2622, 766: 2622},
{133: 4076, 139: 4084, 163: 4072, 165: 4069, 4071, 4068, 4070, 4074, 4075, 4080, 4079, 4078, 4082, 4083, 4077, 4081, 4073, 620: 4054, 4052, 4053, 4051, 4049, 649: 4066, 4063, 4065, 4064, 4060, 4062, 4061, 4058, 4059, 4057, 4067, 856: 4050, 4048, 944: 4056, 957: 6109},
{2623, 2623, 2623, 141: 2623, 2623, 583: 2623, 2623, 586: 2623, 591: 2623, 600: 2623, 602: 2623, 2623, 642: 2623, 692: 2623, 766: 2623},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 6115},
// 3015
{583: 6112},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4336, 3292, 3293, 3291, 876: 4337, 959: 6113},
{9: 4339, 63: 6114},
{2624, 2624, 2624, 141: 2624, 2624, 583: 2624, 2624, 586: 2624, 591: 2624, 600: 2624, 602: 2624, 2624, 642: 2624, 692: 2624, 766: 2624},
{63: 6116, 597: 4091, 4092, 4097, 614: 4093, 672: 4094, 680: 4095, 4088, 4098, 4087, 4096, 4089, 4090},
// 3020
{2625, 2625, 2625, 141: 2625, 2625, 583: 2625, 2625, 586: 2625, 591: 2625, 600: 2625, 602: 2625, 2625, 642: 2625, 692: 2625, 766: 2625},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 6150},
{583: 6119},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4336, 3292, 3293, 3291, 876: 4337, 959: 6120},
{9: 4339, 63: 6121},
// 3025
{2620, 2620, 2620, 141: 2620, 2620, 583: 2620, 2620, 586: 2620, 591: 2620, 600: 2620, 602: 2620, 2620, 642: 2620, 692: 2620, 696: 6123, 766: 2620, 1308: 6122},
{2626, 2626, 2626, 141: 2626, 2626, 583: 2626, 2626, 586: 2626, 591: 2626, 600: 2626, 602: 2626, 2626, 642: 2626, 692: 2626, 766: 2626},
{583: 6124},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 6126, 1464: 6125},
{63: 6128},
// 3030
{63: 2618, 133: 4076, 139: 4084, 163: 4072, 165: 4069, 4071, 4068, 4070, 4074, 4075, 4080, 4079, 4078, 4082, 4083, 4077, 4081, 4073, 597: 4091, 4092, 4097, 614: 4093, 649: 4066, 4063, 4065, 4064, 4060, 4062, 4061, 4058, 4059, 4057, 4067, 672: 4094, 680: 4095, 4088, 4098, 4087, 4096, 4089, 4090, 944: 4056, 957: 6127},
{63: 2617},
{2612, 2612, 2612, 11: 6130, 141: 2612, 2612, 583: 2612, 2612, 586: 2612, 591: 2612, 600: 2612, 2612, 2612, 2612, 642: 2612, 692: 2612, 766: 2612, 775: 2612, 1446: 6129},
{2616, 2616, 2616, 141: 2616, 2616, 583: 2616, 2616, 586: 2616, 591: 2616, 600: 2616, 6145, 2616, 2616, 642: 2616, 692: 2616, 766: 2616, 775: 2616, 1481: 6144},
{587: 6131},
// 3035
{238: 6132},
{244: 6133},
{583: 6134},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 6135},
{63: 6136, 597: 4091, 4092, 4097, 614: 4093, 672: 4094, 680: 4095, 4088, 4098, 4087, 4096, 4089, 4090},
// 3040
{273: 6137},
{587: 6138},
{238: 6139},
{244: 6140},
{583: 6141},
// 3045
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 6142},
{63: 6143, 597: 4091, 4092, 4097, 614: 4093, 672: 4094, 680: 4095, 4088, 4098, 4087, 4096, 4089, 4090},
{2611, 2611, 2611, 141: 2611, 2611, 583: 2611, 2611, 586: 2611, 591: 2611, 600: 2611, 2611, 2611, 2611, 642: 2611, 692: 2611, 766: 2611, 775: 2611},
{2614, 2614, 2614, 141: 2614, 2614, 583: 2614, 2614, 586: 2614, 591: 2614, 600: 2614, 602: 2614, 2614, 642: 2614, 692: 2614, 766: 2614, 775: 6148, 1479: 6147},
{587: 6146},
// 3050
{2615, 2615, 2615, 141: 2615, 2615, 583: 2615, 2615, 586: 2615, 591: 2615, 600: 2615, 602: 2615, 2615, 642: 2615, 692: 2615, 766: 2615, 775: 2615},
{2619, 2619, 2619, 141: 2619, 2619, 583: 2619, 2619, 586: 2619, 591: 2619, 600: 2619, 602: 2619, 2619, 642: 2619, 692: 2619, 766: 2619},
{587: 6149},
{2613, 2613, 2613, 141: 2613, 2613, 583: 2613, 2613, 586: 2613, 591: 2613, 600: 2613, 602: 2613, 2613, 642: 2613, 692: 2613, 766: 2613},
{63: 6151, 597: 4091, 4092, 4097, 614: 4093, 672: 4094, 680: 4095, 4088, 4098, 4087, 4096, 4089, 4090},
// 3055
{2620, 2620, 2620, 141: 2620, 2620, 583: 2620, 2620, 586: 2620, 591: 2620, 600: 2620, 602: 2620, 2620, 642: 2620, 692: 2620, 696: 6123, 766: 2620, 1308: 6152},
{2627, 2627, 2627, 141: 2627, 2627, 583: 2627, 2627, 586: 2627, 591: 2627, 600: 2627, 602: 2627, 2627, 642: 2627, 692: 2627, 766: 2627},
{112: 6159, 583: 2630, 1500: 6158},
{583: 6155},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 6156},
// 3060
{63: 6157, 597: 4091, 4092, 4097, 614: 4093, 672: 4094, 680: 4095, 4088, 4098, 4087, 4096, 4089, 4090},
{2631, 2631, 2631, 141: 2631, 2631, 311: 2631, 583: 2631, 2631, 586: 2631, 591: 2631, 600: 2631, 602: 2631, 2631, 642: 2631, 692: 2631, 766: 2631},
{583: 6162},
{605: 6160},
{604: 3284, 854: 6161},
// 3065
{583: 2629},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 2815, 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4336, 3292, 3293, 3291, 876: 4337, 959: 6163, 1198: 6164},
{9: 4339, 63: 2814},
{63: 6165},
{2632, 2632, 2632, 141: 2632, 2632, 311: 2632, 583: 2632, 2632, 586: 2632, 591: 2632, 600: 2632, 602: 2632, 2632, 642: 2632, 692: 2632, 766: 2632},
// 3070
{2608, 2608, 2608, 141: 6170, 583: 2608, 2608, 586: 2608, 591: 2608, 600: 2608, 602: 2608, 2608, 642: 2608, 692: 2608, 766: 2608, 1567: 6169},
{604: 3284, 854: 4175, 865: 6168},
{2603, 2603, 2603, 141: 2603, 583: 2603, 2603, 586: 2603, 591: 2603, 600: 2603, 602: 2603, 2603, 642: 2603, 692: 2603, 766: 2603},
{2602, 2602, 2602, 583: 5957, 2602, 586: 2602, 591: 2602, 600: 2602, 602: 2602, 2602, 642: 2602, 692: 2602, 766: 2602, 1307: 6176},
{776: 6171},
// 3075
{230: 2610, 699: 2610, 1275: 6104, 6099, 1368: 6172},
{2606, 2606, 2606, 311: 6174, 583: 2606, 2606, 586: 2606, 591: 2606, 600: 2606, 602: 2606, 2606, 642: 2606, 692: 2606, 766: 2606, 1566: 6173},
{2607, 2607, 2607, 583: 2607, 2607, 586: 2607, 591: 2607, 600: 2607, 602: 2607, 2607, 642: 2607, 692: 2607, 766: 2607},
{604: 3284, 854: 4175, 865: 6175},
{2605, 2605, 2605, 583: 2605, 2605, 586: 2605, 591: 2605, 600: 2605, 602: 2605, 2605, 642: 2605, 692: 2605, 766: 2605},
// 3080
{2634, 2634, 2634, 583: 2634, 2634, 586: 2634, 591: 2634, 600: 2634, 602: 2634, 2634, 642: 2634, 692: 2634, 766: 6178, 1581: 6177},
{2640, 2640, 2640, 583: 2640, 2640, 586: 2640, 591: 2640, 600: 2640, 602: 2640, 2640, 642: 2640, 692: 2640},
{354: 6179},
{583: 6180},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 6181, 3292, 3293, 3291, 1382: 6182, 1580: 6183},
// 3085
{69: 6187, 71: 6188, 1453: 6189},
{9: 2636, 63: 2636},
{9: 6184, 63: 6185},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 6181, 3292, 3293, 3291, 1382: 6186},
{2633, 2633, 2633, 583: 2633, 2633, 586: 2633, 591: 2633, 600: 2633, 602: 2633, 2633, 642: 2633, 692: 2633},
// 3090
{9: 2635, 63: 2635},
{9: 2639, 63: 2639},
{9: 2638, 63: 2638},
{9: 2637, 63: 2637},
{3009, 3009},
// 3095
{3008, 3008, 6: 5103, 5107, 5991, 20: 5059, 23: 5113, 25: 5104, 5109, 5106, 5108, 5111, 5112, 5114, 764: 5110, 921: 5115, 972: 5990},
{587: 6193},
{238: 6194},
{244: 6195},
{583: 6196},
// 3100
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 6197},
{63: 6198, 597: 4091, 4092, 4097, 614: 4093, 672: 4094, 680: 4095, 4088, 4098, 4087, 4096, 4089, 4090},
{3010, 3010},
{837, 837, 837, 837, 837, 837, 837, 837, 837, 10: 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 64: 837, 837, 837, 837, 837, 5679, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 837, 951: 5678, 970: 6200},
{2934, 2934, 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5683, 3292, 3293, 3291, 916: 6202, 1524: 6201},
// 3105
{3013, 3013},
{9: 5684, 616: 6203},
{583: 6204},
{587: 5960, 1141: 5959, 1306: 6205},
{9: 6001, 63: 6206},
// 3110
{2933, 2933},
{3014, 3014},
{3007, 3007},
{699: 6221},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 6219, 3292, 3293, 3291},
// 3115
{3081, 3081, 3081, 583: 3081, 3081, 586: 3081, 591: 3081, 600: 3081, 602: 3081, 3081, 642: 3081, 692: 3081},
{587: 6213},
{238: 6214},
{244: 6215},
{583: 6216},
// 3120
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 6217},
{63: 6218, 597: 4091, 4092, 4097, 614: 4093, 672: 4094, 680: 4095, 4088, 4098, 4087, 4096, 4089, 4090},
{3011, 3011},
{673: 5844, 1013: 6220},
{3082, 3082, 3082, 583: 3082, 3082, 586: 3082, 591: 3082, 600: 3082, 602: 3082, 3082, 642: 3082, 692: 3082},
// 3125
{673: 5844, 1013: 6222},
{3083, 3083, 3083, 583: 3083, 3083, 586: 3083, 591: 3083, 600: 3083, 602: 3083, 3083, 642: 3083, 692: 3083},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 6226, 826: 6227, 3292, 3293, 3291, 1158: 6225, 1362: 6224},
{225, 225, 9: 6234, 188: 225, 216: 6236, 239: 6237, 1521: 6235, 6233},
{227, 227, 9: 227, 188: 227, 216: 227, 239: 227},
// 3130
{769: 6231},
{216, 216, 9: 216, 188: 216, 216: 216, 239: 216, 769: 6228},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 6229, 826: 6230, 3292, 3293, 3291},
{218, 218, 9: 218, 188: 218, 216: 218, 239: 218},
{217, 217, 9: 217, 188: 217, 216: 217, 239: 217},
// 3135
{614: 6232},
{219, 219, 9: 219, 188: 219, 216: 219, 239: 219},
{221, 221, 188: 6240, 1520: 6239},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 6226, 826: 6227, 3292, 3293, 3291, 1158: 6238},
{224, 224, 188: 224},
// 3140
{223, 223, 188: 223},
{222, 222, 188: 222},
{226, 226, 9: 226, 188: 226, 216: 226, 239: 226},
{228, 228},
{220, 220},
// 3145
{32: 236, 65: 236, 196: 236, 583: 236, 603: 236, 236},
{65: 5624, 583: 6242, 603: 5625, 1046: 5640},
{241, 241},
{604: 3284, 854: 6248},
{604: 3284, 854: 6247},
// 3150
{238, 238},
{239, 239},
{240, 240},
{182: 6251, 642: 6250, 1164: 6252},
{2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 10: 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 64: 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 2506, 586: 2506, 614: 2506, 631: 2506},
// 3155
{2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 10: 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 64: 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 2505, 586: 2505, 614: 2505, 631: 2505},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 4238, 939: 6253},
{242, 242, 9: 4240},
{612: 6257},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4336, 3292, 3293, 3291, 876: 6256},
// 3160
{612: 243},
{604: 3284, 854: 6258},
{341: 6260, 586: 247, 603: 247, 640: 247, 766: 247, 858: 247, 1435: 6259},
{586: 3149, 603: 3134, 640: 3133, 766: 3263, 858: 3114, 870: 6263, 877: 3262, 3115, 6267, 881: 6268, 6266, 890: 3116, 894: 6265, 1539: 6264},
{378: 6261},
// 3165
{196: 6262, 586: 246, 603: 246, 640: 246, 766: 246, 858: 246},
{586: 245, 603: 245, 640: 245, 766: 245, 858: 245},
{766: 3263, 858: 3114, 877: 6271, 6269, 890: 6270},
{252, 252},
{251, 251},
// 3170
{250, 250},
{249, 249},
{248, 248},
{2528, 2528},
{2527, 2527},
// 3175
{486, 486, 594: 486},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 6284, 1371: 6285, 1570: 6283},
{261, 261, 261, 261, 261, 261, 261, 261, 261, 10: 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 64: 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, 614: 261},
{260, 260, 260, 260, 260, 260, 260, 260, 260, 10: 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 64: 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 614: 260},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 6276, 939: 6277},
// 3180
{1355, 1355, 9: 1355, 587: 6278},
{234, 234, 9: 4240},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 6280, 826: 5683, 3292, 3293, 3291, 916: 6279},
{233, 233, 9: 5684},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5683, 3292, 3293, 3291, 916: 6281},
// 3185
{9: 5684, 63: 6282},
{232, 232},
{262, 262, 9: 6291},
{792: 6287, 823: 6288, 1474: 6286},
{254, 254, 9: 254},
// 3190
{259, 259, 9: 259},
{258, 258, 9: 258, 69: 6290},
{256, 256, 9: 256, 69: 6289},
{255, 255, 9: 255},
{257, 257, 9: 257},
// 3195
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 6284, 1371: 6292},
{253, 253, 9: 253},
{263, 263},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 6295, 939: 6296},
{1355, 1355, 9: 1355, 587: 6297},
// 3200
{231, 231, 9: 4240},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 6299, 826: 5683, 3292, 3293, 3291, 916: 6298},
{230, 230, 9: 5684},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5683, 3292, 3293, 3291, 916: 6300},
{9: 5684, 63: 6301},
// 3205
{229, 229},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 6303},
{583: 6304, 611: 2803, 617: 2803, 1200: 6305},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 2809, 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 668: 3872, 826: 4336, 3292, 3293, 3291, 831: 6338, 876: 6337, 1199: 6336, 1420: 6335, 6339},
{611: 6306, 617: 280, 1280: 6307},
// 3210
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4210, 3292, 3293, 3291, 834: 6330, 1279: 6329, 1472: 6328},
{617: 6308},
{583: 3150, 585: 6311, 3149, 600: 3148, 642: 3147, 692: 3143, 830: 6309, 861: 6310, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 4155, 6314, 6313, 1457: 6312},
{264, 264, 586: 264, 593: 1112, 607: 1112, 1112, 610: 4168, 612: 4167, 619: 4166, 897: 4169, 4170},
{267, 267, 586: 267, 593: 1113, 607: 1113, 1113},
// 3215
{309, 309, 269: 6324, 586: 309, 1253: 6325},
{275, 275, 586: 6315, 1133: 6316},
{266, 266, 586: 266},
{265, 265, 586: 265},
{65: 6319, 1278: 6318, 1471: 6317},
// 3220
{268, 268},
{274, 274, 9: 6322},
{273, 273, 9: 273},
{271, 271, 9: 271, 605: 6320},
{585: 3933, 597: 5348, 5349, 601: 3924, 604: 3928, 667: 3923, 669: 3925, 3927, 3926, 688: 3931, 693: 3932, 702: 3930, 832: 5347, 3929, 1073: 6321},
// 3225
{270, 270, 9: 270},
{65: 6319, 1278: 6323},
{272, 272, 9: 272},
{585: 6327},
{275, 275, 586: 6315, 1133: 6326},
// 3230
{269, 269},
{308, 308, 586: 308, 602: 308, 308, 616: 308},
{279, 279, 9: 6333, 586: 279, 617: 279},
{277, 277, 9: 277, 586: 277, 617: 277},
{605: 6331},
// 3235
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 4208, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4204, 947: 6332},
{276, 276, 9: 276, 586: 276, 617: 276},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4210, 3292, 3293, 3291, 834: 6330, 1279: 6334},
{278, 278, 9: 278, 586: 278, 617: 278},
{9: 6341, 63: 2808},
// 3240
{9: 2807, 63: 2807},
{9: 2805, 63: 2805},
{9: 2804, 63: 2804},
{63: 6340},
{2802, 2802, 586: 2802, 611: 2802, 617: 2802},
// 3245
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 668: 3872, 826: 4336, 3292, 3293, 3291, 831: 6338, 876: 6337, 1199: 6342},
{9: 2806, 63: 2806},
{69: 311, 887: 6347, 1059: 311, 1476: 6346},
{585: 6345},
{235, 235},
// 3250
{69: 6349, 1059: 303, 1473: 6348},
{69: 310, 1059: 310},
{1059: 6350},
{1059: 302},
{585: 6351},
// 3255
{269: 6324, 602: 309, 309, 616: 309, 1253: 6352},
{602: 6353, 6354, 616: 2570, 1238: 6355},
{2569, 2569, 583: 2569, 2569, 586: 2569, 591: 2569, 600: 2569, 616: 2569, 642: 2569, 692: 2569},
{2568, 2568, 583: 2568, 2568, 586: 2568, 591: 2568, 600: 2568, 616: 2568, 642: 2568, 692: 2568},
{616: 6356},
// 3260
{642: 6357},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 6358},
{305, 305, 157: 305, 184: 305, 583: 305, 586: 305, 602: 305, 611: 305, 763: 6360, 778: 305, 1416: 6359},
{301, 301, 157: 4262, 184: 4261, 583: 301, 586: 301, 602: 301, 611: 301, 778: 301, 998: 4260, 1247: 6363},
{611: 6361},
// 3265
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 637: 4666, 826: 4046, 3292, 3293, 3291, 860: 4665, 965: 6362},
{304, 304, 157: 304, 184: 304, 583: 304, 586: 304, 602: 304, 611: 304, 778: 304},
{286, 286, 583: 286, 586: 286, 602: 286, 611: 286, 778: 4290, 1277: 6364},
{307, 307, 583: 307, 586: 307, 602: 6366, 611: 307, 1455: 6365},
{2803, 2803, 583: 6304, 586: 2803, 611: 2803, 1200: 6369},
// 3270
{604: 3284, 854: 6367},
{778: 6368},
{306, 306, 583: 306, 586: 306, 611: 306},
{280, 280, 586: 280, 611: 6306, 1280: 6370},
{275, 275, 586: 6315, 1133: 6371},
// 3275
{312, 312},
{9: 370, 65: 370, 584: 370, 617: 370, 668: 2253, 767: 370, 781: 2253},
{9: 334, 583: 334, 334, 617: 334, 668: 2217, 767: 334, 781: 2217},
{9: 349, 583: 349, 349, 617: 349, 668: 2189, 767: 349, 781: 2189},
{9: 335, 583: 335, 335, 617: 335, 668: 2185, 767: 335, 781: 2185},
// 3280
{9: 324, 583: 324, 324, 617: 324, 668: 2145, 767: 324, 781: 2145},
{451: 6483, 668: 2074, 781: 2074},
{9: 345, 583: 345, 345, 617: 345, 668: 2064, 767: 345, 781: 2064},
{9: 350, 583: 350, 350, 617: 350, 668: 2057, 767: 350, 781: 2057},
{385: 6481, 420: 6482, 668: 2037, 781: 2037},
// 3285
{9: 336, 583: 336, 336, 617: 336, 668: 2034, 767: 336, 781: 2034},
{9: 325, 583: 325, 325, 617: 325, 668: 2031, 767: 325, 781: 2031},
{668: 6479, 781: 6478},
{9: 1032, 584: 1032, 617: 1032, 668: 492, 767: 1032, 781: 492},
{9: 1031, 584: 1031, 617: 1031, 767: 1031},
// 3290
{9: 366, 65: 6477, 584: 366, 617: 366, 767: 366},
{9: 368, 584: 368, 617: 368, 767: 368},
{9: 367, 584: 367, 617: 367, 767: 367},
{617: 6475},
{9: 346, 583: 346, 346, 616: 6473, 346, 767: 346},
// 3295
{9: 363, 584: 363, 617: 363, 767: 363},
{9: 6425, 584: 6426, 617: 6427},
{9: 361, 583: 6422, 361, 617: 361, 767: 361},
{9: 359, 278: 6421, 583: 359, 359, 617: 359, 767: 359},
{9: 357, 376: 6420, 583: 357, 357, 617: 357, 767: 357},
// 3300
{9: 356, 23: 6414, 161: 6413, 6416, 233: 6417, 256: 6415, 376: 6418, 583: 356, 356, 617: 356, 767: 356},
{9: 353, 583: 353, 353, 617: 353, 767: 353},
{9: 352, 583: 352, 352, 617: 352, 767: 352},
{9: 351, 233: 6412, 583: 351, 351, 617: 351, 767: 351},
{9: 348, 583: 348, 348, 617: 348, 767: 348},
// 3305
{9: 347, 583: 347, 347, 617: 347, 767: 347},
{162: 6411, 1218: 6410},
{9: 343, 583: 343, 343, 617: 343, 767: 343},
{1067: 6409},
{9: 341, 583: 341, 341, 617: 341, 767: 341},
// 3310
{9: 337, 583: 337, 337, 617: 337, 767: 337},
{182: 6408},
{9: 332, 583: 332, 332, 617: 332, 767: 332},
{9: 342, 583: 342, 342, 617: 342, 767: 342},
{9: 344, 583: 344, 344, 617: 344, 767: 344},
// 3315
{9: 330, 583: 330, 330, 617: 330, 767: 330},
{9: 328, 583: 328, 328, 617: 328, 767: 328},
{9: 355, 583: 355, 355, 617: 355, 767: 355},
{9: 354, 583: 354, 354, 617: 354, 767: 354},
{182: 6419},
// 3320
{9: 331, 583: 331, 331, 617: 331, 767: 331},
{9: 329, 583: 329, 329, 617: 329, 767: 329},
{9: 327, 583: 327, 327, 617: 327, 767: 327},
{9: 333, 583: 333, 333, 617: 333, 767: 333},
{9: 326, 583: 326, 326, 617: 326, 767: 326},
// 3325
{9: 358, 583: 358, 358, 617: 358, 767: 358},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4336, 3292, 3293, 3291, 876: 4337, 959: 6423},
{9: 4339, 63: 6424},
{9: 360, 584: 360, 617: 360, 767: 360},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 6372, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 6377, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 6374, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 6381, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 6376, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 6373, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 6382, 3480, 3355, 3760, 6375, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 6379, 3382, 3383, 3637, 6380, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 6378, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 6384, 615: 6407, 640: 6401, 692: 6390, 760: 6405, 764: 6400, 766: 6403, 770: 6394, 777: 6395, 789: 6399, 816: 6396, 826: 4046, 3292, 3293, 3291, 858: 6398, 860: 6383, 954: 6385, 969: 6389, 1011: 6402, 1031: 6404, 1125: 6386, 1144: 6387, 6393, 1152: 6388, 6472, 1166: 6397, 1169: 6406},
// 3330
{2: 323, 323, 323, 323, 323, 323, 323, 10: 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 64: 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 6439, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 614: 323, 642: 6438, 1035: 6440, 1289: 6441},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 687: 6429, 826: 4046, 3292, 3293, 3291, 860: 6428, 910: 6430, 1039: 6431},
{1045, 1045, 6: 1045, 9: 1045, 17: 1045, 62: 1045, 64: 1045, 66: 1045, 1045, 1045, 162: 1045, 231: 1045, 586: 1045, 594: 1045, 605: 1045, 668: 6436, 757: 1045, 767: 1045, 772: 1045, 779: 1045, 781: 6435},
{1511, 1511, 6: 1511, 9: 1511, 17: 1511, 62: 1511, 64: 1511, 66: 1511, 1511, 1511, 162: 1511, 231: 1511, 583: 4675, 586: 1511, 594: 1511, 605: 1511, 757: 1511, 767: 1511, 772: 1511, 779: 1511, 1299: 6434},
{1041, 1041, 9: 1041, 586: 1041},
// 3335
{313, 313, 9: 6432},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 687: 6429, 826: 4046, 3292, 3293, 3291, 860: 6428, 910: 6433},
{1040, 1040, 9: 1040, 586: 1040},
{1042, 1042, 6: 1042, 9: 1042, 17: 1042, 62: 1042, 64: 1042, 66: 1042, 1042, 1042, 162: 1042, 231: 1042, 586: 1042, 594: 1042, 605: 1042, 757: 1042, 767: 1042, 772: 1042, 779: 1042},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 826: 4046, 3292, 3293, 3291, 860: 6437},
// 3340
{1043, 1043, 6: 1043, 9: 1043, 17: 1043, 62: 1043, 64: 1043, 66: 1043, 1043, 1043, 162: 1043, 231: 1043, 586: 1043, 594: 1043, 605: 1043, 757: 1043, 767: 1043, 772: 1043, 779: 1043},
{1044, 1044, 6: 1044, 9: 1044, 17: 1044, 62: 1044, 64: 1044, 66: 1044, 1044, 1044, 162: 1044, 231: 1044, 586: 1044, 594: 1044, 605: 1044, 757: 1044, 767: 1044, 772: 1044, 779: 1044},
{2: 322, 322, 322, 322, 322, 322, 322, 10: 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 64: 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, 614: 322},
{2: 321, 321, 321, 321, 321, 321, 321, 10: 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 64: 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 614: 321},
{2: 320, 320, 320, 320, 320, 320, 320, 10: 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 64: 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 614: 320},
// 3345
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 6442, 826: 6443, 3292, 3293, 3291, 1316: 6444},
{617: 319, 767: 319, 769: 6470},
{617: 315, 767: 315, 769: 6467},
{617: 6445},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 687: 6429, 826: 4046, 3292, 3293, 3291, 860: 6428, 910: 6446, 1080: 6447, 1110: 6448},
// 3350
{423, 423, 6: 423, 9: 423, 17: 423, 62: 423, 64: 423, 66: 423, 423, 423, 231: 6452, 586: 423, 779: 423, 1406: 6451},
{470, 470, 6: 470, 9: 470, 17: 470, 62: 470, 64: 470, 66: 470, 470, 470, 586: 470, 779: 470},
{314, 314, 9: 6449},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 687: 6429, 826: 4046, 3292, 3293, 3291, 860: 6428, 910: 6446, 1080: 6450},
{469, 469, 6: 469, 9: 469, 17: 469, 62: 469, 64: 469, 66: 469, 469, 469, 586: 469, 779: 469},
// 3355
{471, 471, 6: 471, 9: 471, 17: 471, 62: 471, 64: 471, 66: 471, 471, 471, 586: 471, 779: 471},
{586: 6454, 776: 6453},
{17: 6465, 585: 6462, 1084: 6464},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 826: 4046, 3292, 3293, 3291, 860: 6456, 1407: 6455},
{421, 421, 6: 421, 9: 421, 17: 421, 62: 421, 64: 421, 66: 421, 421, 421, 586: 421, 591: 6458, 776: 6457, 779: 421},
// 3360
{417, 417, 6: 417, 9: 417, 17: 417, 62: 417, 64: 417, 66: 417, 417, 417, 586: 417, 591: 417, 776: 417, 779: 417},
{585: 6462, 1084: 6463},
{585: 6460, 688: 6461, 1260: 6459},
{419, 419, 6: 419, 9: 419, 17: 419, 62: 419, 64: 419, 66: 419, 419, 419, 586: 419, 779: 419},
{416, 416, 6: 416, 9: 416, 17: 416, 62: 416, 64: 416, 66: 416, 416, 416, 586: 416, 779: 416},
// 3365
{415, 415, 6: 415, 9: 415, 17: 415, 62: 415, 64: 415, 66: 415, 415, 415, 586: 415, 779: 415},
{1037, 1037, 6: 1037, 9: 1037, 17: 1037, 62: 1037, 1037, 1037, 66: 1037, 1037, 1037, 586: 1037, 779: 1037},
{420, 420, 6: 420, 9: 420, 17: 420, 62: 420, 64: 420, 66: 420, 420, 420, 586: 420, 779: 420},
{422, 422, 6: 422, 9: 422, 17: 422, 62: 422, 64: 422, 66: 422, 422, 422, 586: 422, 779: 422},
{585: 6460, 688: 6461, 1260: 6466},
// 3370
{418, 418, 6: 418, 9: 418, 17: 418, 62: 418, 64: 418, 66: 418, 418, 418, 586: 418, 779: 418},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 6468, 826: 6469, 3292, 3293, 3291},
{617: 317, 767: 317},
{617: 316, 767: 316},
{614: 6471},
// 3375
{617: 318, 767: 318},
{9: 362, 584: 362, 617: 362, 767: 362},
{379: 6474},
{9: 364, 584: 364, 617: 364, 767: 364},
{379: 6476},
// 3380
{9: 365, 584: 365, 617: 365, 767: 365},
{9: 369, 65: 369, 584: 369, 617: 369, 767: 369},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 826: 4046, 3292, 3293, 3291, 860: 6480},
{1033, 1033, 9: 1033, 584: 1033, 617: 1033, 767: 1033},
{1034, 1034, 9: 1034, 584: 1034, 617: 1034, 767: 1034},
// 3385
{9: 340, 583: 340, 340, 617: 340, 767: 340},
{9: 339, 583: 339, 339, 617: 339, 767: 339},
{9: 338, 583: 338, 338, 617: 338, 767: 338},
{584: 6526, 668: 2161, 781: 2161},
{9: 6425, 584: 6486, 767: 6487},
// 3390
{2: 323, 323, 323, 323, 323, 323, 323, 10: 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 64: 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 6439, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 614: 323, 642: 6438, 1035: 6440, 1289: 6489},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 687: 6429, 826: 4046, 3292, 3293, 3291, 860: 6428, 910: 6430, 1039: 6488},
{377, 377, 9: 6432},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 6442, 826: 6443, 3292, 3293, 3291, 1316: 6490},
{767: 6491},
// 3395
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 687: 6429, 826: 4046, 3292, 3293, 3291, 860: 6428, 910: 6446, 1080: 6447, 1110: 6492},
{460, 460, 9: 6449, 586: 460, 779: 6494, 1149: 6493, 6495},
{459, 459, 6: 459, 17: 459, 62: 459, 64: 459, 66: 459, 459, 459, 586: 459},
{200: 6515, 202: 6513, 208: 6516, 6514, 211: 6517, 302: 6508, 502: 6510, 1151: 6512, 1526: 6511, 1555: 6509},
{376, 376, 586: 6497, 1389: 6496},
// 3400
{379, 379},
{203: 6501, 6499, 6500, 6502, 1031: 6498},
{1067: 6507},
{604: 3284, 854: 6506},
{604: 3284, 854: 6505},
// 3405
{604: 3284, 854: 6504},
{604: 3284, 854: 6503},
{371, 371},
{372, 372},
{373, 373},
// 3410
{374, 374},
{375, 375},
{458, 458, 6: 458, 17: 458, 62: 458, 64: 458, 66: 458, 458, 458, 586: 458},
{457, 457, 6: 457, 17: 457, 62: 457, 64: 457, 66: 457, 457, 457, 586: 457},
{456, 456, 6: 456, 17: 456, 62: 456, 64: 456, 66: 456, 456, 456, 586: 456},
// 3415
{455, 455, 6: 455, 17: 455, 62: 455, 64: 455, 66: 455, 455, 455, 200: 6515, 202: 6513, 208: 6516, 6514, 211: 6517, 586: 455, 620: 6523, 1151: 6524},
{454, 454, 6: 454, 17: 454, 62: 454, 64: 454, 66: 454, 454, 454, 200: 454, 202: 454, 208: 454, 454, 211: 454, 586: 454, 620: 454},
{585: 6522},
{585: 6521},
{585: 6520},
// 3420
{585: 6519},
{585: 6518},
{447, 447, 6: 447, 17: 447, 62: 447, 64: 447, 66: 447, 447, 447, 200: 447, 202: 447, 208: 447, 447, 211: 447, 586: 447, 620: 447},
{448, 448, 6: 448, 17: 448, 62: 448, 64: 448, 66: 448, 448, 448, 200: 448, 202: 448, 208: 448, 448, 211: 448, 586: 448, 620: 448},
{449, 449, 6: 449, 17: 449, 62: 449, 64: 449, 66: 449, 449, 449, 200: 449, 202: 449, 208: 449, 449, 211: 449, 586: 449, 620: 449},
// 3425
{450, 450, 6: 450, 17: 450, 62: 450, 64: 450, 66: 450, 450, 450, 200: 450, 202: 450, 208: 450, 450, 211: 450, 586: 450, 620: 450},
{451, 451, 6: 451, 17: 451, 62: 451, 64: 451, 66: 451, 451, 451, 200: 451, 202: 451, 208: 451, 451, 211: 451, 586: 451, 620: 451},
{200: 6515, 202: 6513, 208: 6516, 6514, 211: 6517, 1151: 6525},
{452, 452, 6: 452, 17: 452, 62: 452, 64: 452, 66: 452, 452, 452, 200: 452, 202: 452, 208: 452, 452, 211: 452, 586: 452, 620: 452},
{453, 453, 6: 453, 17: 453, 62: 453, 64: 453, 66: 453, 453, 453, 200: 453, 202: 453, 208: 453, 453, 211: 453, 586: 453, 620: 453},
// 3430
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 687: 6429, 826: 4046, 3292, 3293, 3291, 860: 6428, 910: 6527},
{767: 6528},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 687: 6429, 826: 4046, 3292, 3293, 3291, 860: 6428, 910: 6430, 1039: 6529},
{376, 376, 9: 6432, 586: 6497, 1389: 6530},
{378, 378},
// 3435
{378: 6532, 412: 6534, 602: 6535, 611: 6536, 1011: 6533},
{384, 384, 586: 6549, 613: 6547, 1324: 6548},
{1067: 6546},
{604: 3284, 854: 6545},
{604: 3284, 854: 6544},
// 3440
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 6539, 3292, 3293, 3291, 1148: 6538, 1323: 6537},
{385, 385, 9: 6542},
{382, 382, 9: 382},
{605: 6540},
{585: 3933, 601: 3924, 604: 3928, 667: 3923, 669: 3925, 3927, 3926, 688: 3931, 693: 3932, 702: 3930, 832: 6541, 3929},
// 3445
{380, 380, 9: 380},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 6539, 3292, 3293, 3291, 1148: 6543},
{381, 381, 9: 381},
{386, 386},
{387, 387},
// 3450
{388, 388},
{585: 6551},
{389, 389},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 6539, 3292, 3293, 3291, 1148: 6538, 1323: 6550},
{383, 383, 9: 6542},
// 3455
{384, 384, 586: 6549, 1324: 6552},
{390, 390},
{2662, 2662, 9: 2662, 18: 2662, 20: 2662, 24: 2662, 589: 2662, 592: 2662, 606: 2662, 609: 2662, 611: 2662, 617: 2662, 633: 2662, 763: 2662, 767: 2662, 819: 2662, 2662},
{483, 483},
{2: 1152, 1152, 1152, 1152, 1152, 1152, 1152, 10: 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 64: 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 585: 1152, 588: 1152, 1152, 1152, 595: 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 606: 1152, 614: 1152, 616: 1152, 1152, 627: 1152, 631: 1152, 637: 1152, 640: 1152, 663: 1152, 1152, 667: 1152, 1152, 1152, 1152, 1152, 687: 1152, 1152, 693: 1152, 695: 1152, 1152, 1152, 1152, 700: 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 713: 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 765: 1152, 770: 1152, 780: 1152, 884: 1152, 1152, 887: 1152, 889: 1152, 891: 1152, 895: 1152, 904: 1152, 1152, 1152},
// 3460
{2: 1150, 1150, 1150, 1150, 1150, 1150, 1150, 10: 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 64: 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 602: 1150, 614: 1150, 616: 1150, 1150, 698: 1150, 780: 1150, 887: 1150, 889: 1150, 891: 1150},
{2: 1360, 1360, 1360, 1360, 1360, 1360, 1360, 10: 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 64: 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 602: 1360, 614: 1360, 698: 1360, 780: 1360, 887: 6558, 889: 6560, 891: 6559, 1007: 6561, 1069: 6562},
{2: 1363, 1363, 1363, 1363, 1363, 1363, 1363, 10: 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 64: 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 585: 1363, 588: 1363, 1363, 1363, 595: 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 606: 1363, 614: 1363, 616: 1363, 1363, 627: 1363, 631: 1363, 637: 1363, 640: 1363, 663: 1363, 1363, 667: 1363, 1363, 1363, 1363, 1363, 687: 1363, 1363, 693: 1363, 695: 1363, 1363, 1363, 1363, 700: 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 713: 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 765: 1363, 770: 1363, 780: 1363, 884: 1363, 1363, 887: 1363, 889: 1363, 891: 1363, 895: 1363, 904: 1363, 1363, 1363},
{2: 1362, 1362, 1362, 1362, 1362, 1362, 1362, 10: 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 64: 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 585: 1362, 588: 1362, 1362, 1362, 595: 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 606: 1362, 614: 1362, 616: 1362, 1362, 627: 1362, 631: 1362, 637: 1362, 640: 1362, 663: 1362, 1362, 667: 1362, 1362, 1362, 1362, 1362, 687: 1362, 1362, 693: 1362, 695: 1362, 1362, 1362, 1362, 700: 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 713: 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 765: 1362, 770: 1362, 780: 1362, 884: 1362, 1362, 887: 1362, 889: 1362, 891: 1362, 895: 1362, 904: 1362, 1362, 1362},
{2: 1361, 1361, 1361, 1361, 1361, 1361, 1361, 10: 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 64: 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 585: 1361, 588: 1361, 1361, 1361, 595: 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 606: 1361, 614: 1361, 616: 1361, 1361, 627: 1361, 631: 1361, 637: 1361, 640: 1361, 663: 1361, 1361, 667: 1361, 1361, 1361, 1361, 1361, 687: 1361, 1361, 693: 1361, 695: 1361, 1361, 1361, 1361, 700: 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 713: 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 765: 1361, 770: 1361, 780: 1361, 884: 1361, 1361, 887: 1361, 889: 1361, 891: 1361, 895: 1361, 904: 1361, 1361, 1361},
// 3465
{2: 1359, 1359, 1359, 1359, 1359, 1359, 1359, 10: 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 64: 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 602: 1359, 614: 1359, 616: 1359, 1359, 698: 1359, 780: 1359},
{2: 2287, 2287, 2287, 2287, 2287, 2287, 2287, 10: 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 64: 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 602: 5053, 614: 2287, 698: 2287, 780: 2287, 1032: 6563},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 6573, 614: 4237, 698: 6567, 780: 6572, 826: 4236, 3292, 3293, 3291, 6571, 859: 6570, 950: 6569, 955: 6568, 6566, 1029: 6564, 1077: 6565},
{1233, 1233, 9: 1233, 16: 1233, 63: 1233, 584: 1233, 586: 1233, 593: 1233, 1233, 607: 1233, 1233, 1233, 1233, 1233, 1233, 1233, 615: 1233, 1233, 619: 1233, 625: 1233, 1233, 628: 1233},
{9: 6623, 611: 6722},
// 3470
{9: 1231, 595: 6586, 6587, 611: 6686, 627: 6585, 630: 6588, 634: 6584, 6589, 6590, 979: 6583, 984: 6582},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 6683, 3292, 3293, 3291},
{1229, 1229, 9: 1229, 16: 1229, 63: 1229, 584: 1229, 586: 1229, 593: 1229, 1229, 1229, 1229, 607: 1229, 1229, 1229, 1229, 1229, 1229, 1229, 615: 1229, 1229, 619: 1229, 625: 1229, 1229, 1229, 1229, 630: 1229, 634: 1229, 1229, 1229, 638: 1229},
{1228, 1228, 9: 1228, 16: 1228, 63: 1228, 584: 1228, 586: 1228, 593: 1228, 1228, 1228, 1228, 607: 1228, 1228, 1228, 1228, 1228, 1228, 1228, 615: 1228, 1228, 619: 1228, 625: 1228, 1228, 1228, 1228, 630: 1228, 634: 1228, 1228, 1228, 638: 1228},
{1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 584: 1223, 586: 1223, 6636, 591: 1223, 593: 1223, 1223, 1223, 1223, 602: 1223, 607: 1223, 1223, 1223, 1223, 1223, 1223, 1223, 615: 1223, 1223, 618: 1223, 1223, 625: 1223, 1223, 1223, 1223, 1223, 1223, 634: 1223, 1223, 1223, 638: 1223, 647: 1223, 794: 1223, 1005: 6635},
// 3475
{1221, 1221, 3731, 3552, 3516, 3387, 3431, 3348, 3554, 1221, 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 1221, 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 584: 1221, 586: 1221, 591: 6580, 593: 1221, 1221, 1221, 1221, 607: 1221, 1221, 1221, 1221, 1221, 1221, 1221, 615: 1221, 1221, 619: 1221, 625: 1221, 1221, 1221, 1221, 630: 1221, 634: 1221, 1221, 1221, 638: 1221, 826: 6579, 3292, 3293, 3291, 1075: 6578, 1162: 6577},
{583: 3150, 830: 6626},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 6573, 586: 3149, 600: 3148, 614: 4237, 642: 3147, 692: 3143, 698: 6567, 780: 6572, 826: 4236, 3292, 3293, 3291, 6576, 859: 6570, 861: 4156, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 4155, 4158, 4157, 950: 6569, 955: 6568, 6575, 1029: 6564, 1077: 6574},
{9: 6623, 63: 6624},
{1231, 1231, 9: 1231, 16: 1231, 63: 1231, 584: 1231, 586: 1231, 593: 1231, 1231, 6586, 6587, 607: 1231, 1231, 1231, 1231, 1231, 1231, 1231, 615: 1231, 1231, 619: 1231, 625: 1231, 1231, 6585, 1231, 630: 6588, 634: 6584, 6589, 6590, 979: 6583, 984: 6582},
// 3480
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 1221, 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 4301, 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 591: 6580, 593: 1112, 595: 1221, 1221, 607: 1112, 1112, 610: 4168, 612: 4167, 619: 4166, 627: 1221, 630: 1221, 634: 1221, 1221, 1221, 826: 6579, 3292, 3293, 3291, 897: 4169, 4170, 1075: 6578, 1162: 6577},
{1226, 1226, 9: 1226, 16: 1226, 63: 1226, 584: 1226, 586: 1226, 593: 1226, 1226, 1226, 1226, 607: 1226, 1226, 1226, 1226, 1226, 1226, 1226, 615: 1226, 1226, 619: 1226, 625: 1226, 1226, 1226, 1226, 630: 1226, 634: 1226, 1226, 1226, 638: 1226},
{1220, 1220, 9: 1220, 16: 1220, 63: 1220, 584: 1220, 586: 1220, 593: 1220, 1220, 1220, 1220, 602: 1220, 607: 1220, 1220, 1220, 1220, 1220, 1220, 1220, 615: 1220, 1220, 618: 1220, 1220, 625: 1220, 1220, 1220, 1220, 1220, 1220, 634: 1220, 1220, 1220, 638: 1220, 647: 1220, 794: 1220},
{1217, 1217, 9: 1217, 16: 1217, 63: 1217, 583: 1217, 1217, 586: 1217, 593: 1217, 1217, 1217, 1217, 602: 1217, 607: 1217, 1217, 1217, 1217, 1217, 1217, 1217, 615: 1217, 1217, 618: 1217, 1217, 625: 1217, 1217, 1217, 1217, 1217, 1217, 634: 1217, 1217, 1217, 638: 1217, 647: 1217, 794: 1217},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 6581, 3292, 3293, 3291},
// 3485
{1216, 1216, 9: 1216, 16: 1216, 63: 1216, 583: 1216, 1216, 586: 1216, 593: 1216, 1216, 1216, 1216, 602: 1216, 607: 1216, 1216, 1216, 1216, 1216, 1216, 1216, 615: 1216, 1216, 618: 1216, 1216, 625: 1216, 1216, 1216, 1216, 1216, 1216, 634: 1216, 1216, 1216, 638: 1216, 647: 1216, 794: 1216},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 6573, 614: 4237, 780: 6572, 826: 4236, 3292, 3293, 3291, 6571, 859: 6570, 950: 6569, 955: 6568, 6616},
{630: 1186, 1100: 6603, 1305: 6607},
{595: 6586, 6587, 630: 6600, 979: 6601},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 6573, 614: 4237, 780: 6572, 826: 4236, 3292, 3293, 3291, 6571, 859: 6570, 950: 6569, 955: 6568, 6593},
// 3490
{630: 1188, 1100: 1188},
{630: 1187, 1100: 1187},
{2: 1184, 1184, 1184, 1184, 1184, 1184, 1184, 10: 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 64: 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 614: 1184, 780: 1184},
{630: 6592},
{630: 6591},
// 3495
{2: 1182, 1182, 1182, 1182, 1182, 1182, 1182, 10: 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 64: 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 614: 1182, 780: 1182},
{2: 1183, 1183, 1183, 1183, 1183, 1183, 1183, 10: 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 64: 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 614: 1183, 780: 1183},
{1191, 1191, 9: 1191, 16: 1191, 63: 1191, 584: 6594, 586: 1191, 593: 1191, 6595, 1191, 1191, 607: 1191, 1191, 1191, 1191, 1191, 1191, 1191, 615: 1191, 1191, 619: 1191, 625: 1191, 1191, 1191, 1191, 630: 1191, 634: 1191, 1191, 1191, 638: 1191, 979: 6583, 984: 6582},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 6599},
{583: 6596},
// 3500
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4336, 3292, 3293, 3291, 876: 4337, 959: 6597},
{9: 4339, 63: 6598},
{1189, 1189, 9: 1189, 16: 1189, 63: 1189, 584: 1189, 586: 1189, 593: 1189, 1189, 1189, 1189, 607: 1189, 1189, 1189, 1189, 1189, 1189, 1189, 615: 1189, 1189, 619: 1189, 625: 1189, 1189, 1189, 1189, 630: 1189, 634: 1189, 1189, 1189, 638: 1189},
{1190, 1190, 9: 1190, 16: 1190, 63: 1190, 584: 1190, 586: 1190, 593: 1190, 1190, 1190, 1190, 607: 1190, 1190, 1190, 1190, 1190, 1190, 1190, 615: 1190, 1190, 619: 1190, 4054, 4052, 4053, 4051, 4049, 1190, 1190, 1190, 1190, 630: 1190, 634: 1190, 1190, 1190, 638: 1190, 856: 4050, 4048},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 6573, 614: 4237, 780: 6572, 826: 4236, 3292, 3293, 3291, 6571, 859: 6570, 950: 6569, 955: 6568, 6606},
// 3505
{630: 1186, 1100: 6603, 1305: 6602},
{630: 6604},
{630: 1185},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 6573, 614: 4237, 780: 6572, 826: 4236, 3292, 3293, 3291, 6571, 859: 6570, 950: 6569, 955: 6568, 6605},
{1192, 1192, 9: 1192, 16: 1192, 63: 1192, 584: 1192, 586: 1192, 593: 1192, 1192, 1192, 1192, 607: 1192, 1192, 1192, 1192, 1192, 1192, 1192, 615: 1192, 1192, 619: 1192, 625: 1192, 1192, 1192, 1192, 630: 1192, 634: 1192, 1192, 1192, 638: 1192, 979: 6583, 984: 6582},
// 3510
{1193, 1193, 9: 1193, 16: 1193, 63: 1193, 584: 1193, 586: 1193, 593: 1193, 1193, 1193, 1193, 607: 1193, 1193, 1193, 1193, 1193, 1193, 1193, 615: 1193, 1193, 619: 1193, 625: 1193, 1193, 1193, 1193, 630: 1193, 634: 1193, 1193, 1193, 638: 1193, 979: 6583, 984: 6582},
{630: 6608},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 6573, 614: 4237, 780: 6572, 826: 4236, 3292, 3293, 3291, 6571, 859: 6570, 950: 6569, 955: 6568, 6609},
{584: 6610, 594: 6611, 6586, 6587, 627: 6585, 630: 6588, 634: 6584, 6589, 6590, 979: 6583, 984: 6582},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 6615},
// 3515
{583: 6612},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4336, 3292, 3293, 3291, 876: 4337, 959: 6613},
{9: 4339, 63: 6614},
{1194, 1194, 9: 1194, 16: 1194, 63: 1194, 584: 1194, 586: 1194, 593: 1194, 1194, 1194, 1194, 607: 1194, 1194, 1194, 1194, 1194, 1194, 1194, 615: 1194, 1194, 619: 1194, 625: 1194, 1194, 1194, 1194, 630: 1194, 634: 1194, 1194, 1194, 638: 1194},
{1195, 1195, 9: 1195, 16: 1195, 63: 1195, 584: 1195, 586: 1195, 593: 1195, 1195, 1195, 1195, 607: 1195, 1195, 1195, 1195, 1195, 1195, 1195, 615: 1195, 1195, 619: 1195, 4054, 4052, 4053, 4051, 4049, 1195, 1195, 1195, 1195, 630: 1195, 634: 1195, 1195, 1195, 638: 1195, 856: 4050, 4048},
// 3520
{1198, 1198, 9: 1198, 16: 1198, 63: 1198, 584: 6617, 586: 1198, 593: 1198, 6618, 6586, 6587, 607: 1198, 1198, 1198, 1198, 1198, 1198, 1198, 615: 1198, 1198, 619: 1198, 625: 1198, 1198, 6585, 1198, 630: 6588, 634: 6584, 6589, 6590, 638: 1198, 979: 6583, 984: 6582},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 6622},
{583: 6619},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4336, 3292, 3293, 3291, 876: 4337, 959: 6620},
{9: 4339, 63: 6621},
// 3525
{1196, 1196, 9: 1196, 16: 1196, 63: 1196, 584: 1196, 586: 1196, 593: 1196, 1196, 1196, 1196, 607: 1196, 1196, 1196, 1196, 1196, 1196, 1196, 615: 1196, 1196, 619: 1196, 625: 1196, 1196, 1196, 1196, 630: 1196, 634: 1196, 1196, 1196, 638: 1196},
{1197, 1197, 9: 1197, 16: 1197, 63: 1197, 584: 1197, 586: 1197, 593: 1197, 1197, 1197, 1197, 607: 1197, 1197, 1197, 1197, 1197, 1197, 1197, 615: 1197, 1197, 619: 1197, 4054, 4052, 4053, 4051, 4049, 1197, 1197, 1197, 1197, 630: 1197, 634: 1197, 1197, 1197, 638: 1197, 856: 4050, 4048},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 6573, 614: 4237, 698: 6567, 780: 6572, 826: 4236, 3292, 3293, 3291, 6571, 859: 6570, 950: 6569, 955: 6568, 6575, 1029: 6625},
{1224, 1224, 9: 1224, 16: 1224, 63: 1224, 584: 1224, 586: 1224, 593: 1224, 1224, 1224, 1224, 607: 1224, 1224, 1224, 1224, 1224, 1224, 1224, 615: 1224, 1224, 619: 1224, 625: 1224, 1224, 1224, 1224, 630: 1224, 634: 1224, 1224, 1224, 638: 1224},
{1232, 1232, 9: 1232, 16: 1232, 63: 1232, 584: 1232, 586: 1232, 593: 1232, 1232, 607: 1232, 1232, 1232, 1232, 1232, 1232, 1232, 615: 1232, 1232, 619: 1232, 625: 1232, 1232, 628: 1232},
// 3530
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 591: 6580, 826: 6579, 3292, 3293, 3291, 1075: 6627},
{2813, 2813, 9: 2813, 16: 2813, 63: 2813, 583: 6628, 2813, 586: 2813, 593: 2813, 2813, 2813, 2813, 607: 2813, 2813, 2813, 2813, 2813, 2813, 2813, 615: 2813, 2813, 619: 2813, 625: 2813, 2813, 2813, 2813, 630: 2813, 634: 2813, 2813, 2813, 638: 2813, 1263: 6629},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 6631, 3292, 3293, 3291, 1057: 6630},
{1225, 1225, 9: 1225, 16: 1225, 63: 1225, 584: 1225, 586: 1225, 593: 1225, 1225, 1225, 1225, 607: 1225, 1225, 1225, 1225, 1225, 1225, 1225, 615: 1225, 1225, 619: 1225, 625: 1225, 1225, 1225, 1225, 630: 1225, 634: 1225, 1225, 1225, 638: 1225},
{9: 6633, 63: 6632},
// 3535
{2811, 2811, 9: 2811, 63: 2811, 586: 2811},
{2812, 2812, 9: 2812, 16: 2812, 63: 2812, 584: 2812, 586: 2812, 591: 2812, 593: 2812, 2812, 2812, 2812, 607: 2812, 2812, 2812, 2812, 2812, 2812, 2812, 615: 2812, 2812, 619: 2812, 625: 2812, 2812, 2812, 2812, 630: 2812, 634: 2812, 2812, 2812, 638: 2812},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 6634, 3292, 3293, 3291},
{2810, 2810, 9: 2810, 63: 2810, 586: 2810},
{1221, 1221, 3731, 3552, 3516, 3387, 3431, 3348, 3554, 1221, 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 1221, 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 584: 1221, 586: 1221, 591: 6580, 593: 1221, 1221, 1221, 1221, 602: 1221, 607: 1221, 1221, 1221, 1221, 1221, 1221, 1221, 615: 1221, 1221, 618: 1221, 1221, 625: 1221, 1221, 1221, 1221, 1221, 1221, 634: 1221, 1221, 1221, 638: 1221, 647: 1221, 794: 1221, 826: 6579, 3292, 3293, 3291, 1075: 6578, 1162: 6640},
// 3540
{583: 6637},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5683, 3292, 3293, 3291, 916: 6638},
{9: 5684, 63: 6639},
{1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 586: 1222, 591: 1222, 593: 1222, 1222, 1222, 1222, 600: 1222, 602: 1222, 607: 1222, 1222, 1222, 1222, 1222, 1222, 1222, 615: 1222, 1222, 618: 1222, 1222, 625: 1222, 1222, 1222, 1222, 1222, 1222, 634: 1222, 1222, 1222, 638: 1222, 642: 1222, 647: 1222, 673: 1222, 692: 1222, 764: 1222, 776: 1222, 794: 1222},
{2294, 2294, 9: 2294, 16: 2294, 63: 2294, 584: 2294, 586: 2294, 593: 2294, 2294, 2294, 2294, 602: 2294, 607: 2294, 2294, 2294, 2294, 2294, 2294, 2294, 615: 2294, 2294, 618: 2294, 2294, 625: 2294, 2294, 2294, 2294, 2294, 2294, 634: 2294, 2294, 2294, 638: 2294, 647: 2294, 794: 5008, 1082: 6641, 1404: 6642},
// 3545
{2293, 2293, 9: 2293, 16: 2293, 63: 2293, 584: 2293, 586: 2293, 593: 2293, 2293, 2293, 2293, 602: 2293, 607: 2293, 2293, 2293, 2293, 2293, 2293, 2293, 615: 2293, 2293, 618: 2293, 2293, 625: 2293, 2293, 2293, 2293, 2293, 2293, 634: 2293, 2293, 2293, 638: 2293, 647: 2293},
{1200, 1200, 9: 1200, 16: 1200, 63: 1200, 584: 1200, 586: 1200, 593: 1200, 1200, 1200, 1200, 602: 6645, 607: 1200, 1200, 1200, 1200, 1200, 1200, 1200, 615: 1200, 1200, 618: 6646, 1200, 625: 1200, 1200, 1200, 1200, 6644, 1200, 634: 1200, 1200, 1200, 638: 1200, 647: 1200, 1130: 6648, 6647, 1264: 6649, 6643},
{1318, 1318, 9: 1318, 16: 1318, 63: 1318, 584: 1318, 586: 1318, 593: 1318, 1318, 1318, 1318, 607: 1318, 1318, 1318, 1318, 1318, 1318, 1318, 615: 1318, 1318, 619: 1318, 625: 1318, 1318, 1318, 1318, 630: 1318, 634: 1318, 1318, 1318, 638: 1318, 647: 6664, 1573: 6665},
{699: 5314, 764: 5315, 988: 6663},
{699: 5314, 764: 5315, 988: 6662},
// 3550
{699: 5314, 764: 5315, 988: 6661},
{583: 1212, 613: 6651, 1458: 6652},
{1202, 1202, 9: 1202, 16: 1202, 63: 1202, 584: 1202, 586: 1202, 593: 1202, 1202, 1202, 1202, 602: 1202, 607: 1202, 1202, 1202, 1202, 1202, 1202, 1202, 615: 1202, 1202, 618: 1202, 1202, 625: 1202, 1202, 1202, 1202, 1202, 1202, 634: 1202, 1202, 1202, 638: 1202, 647: 1202},
{1199, 1199, 9: 1199, 16: 1199, 63: 1199, 584: 1199, 586: 1199, 593: 1199, 1199, 1199, 1199, 602: 6645, 607: 1199, 1199, 1199, 1199, 1199, 1199, 1199, 615: 1199, 1199, 618: 6646, 1199, 625: 1199, 1199, 1199, 1199, 6644, 1199, 634: 1199, 1199, 1199, 638: 1199, 647: 1199, 1130: 6650, 6647},
{1201, 1201, 9: 1201, 16: 1201, 63: 1201, 584: 1201, 586: 1201, 593: 1201, 1201, 1201, 1201, 602: 1201, 607: 1201, 1201, 1201, 1201, 1201, 1201, 1201, 615: 1201, 1201, 618: 1201, 1201, 625: 1201, 1201, 1201, 1201, 1201, 1201, 634: 1201, 1201, 1201, 638: 1201, 647: 1201},
// 3555
{619: 6657, 625: 6658, 630: 6656},
{583: 6653},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 1207, 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 1207, 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 712: 6083, 826: 6082, 3292, 3293, 3291, 1033: 6654},
{9: 6085, 63: 6655},
{1208, 1208, 9: 1208, 16: 1208, 63: 1208, 584: 1208, 586: 1208, 593: 1208, 1208, 1208, 1208, 602: 1208, 607: 1208, 1208, 1208, 1208, 1208, 1208, 1208, 615: 1208, 1208, 618: 1208, 1208, 625: 1208, 1208, 1208, 1208, 1208, 1208, 634: 1208, 1208, 1208, 638: 1208, 647: 1208},
// 3560
{583: 1211},
{776: 6660},
{776: 6659},
{583: 1209},
{583: 1210},
// 3565
{583: 1213, 613: 1213},
{583: 1214, 613: 1214},
{583: 1215, 613: 1215},
{132: 6669, 414: 6668, 487: 6667, 583: 1315, 1572: 6666},
{1227, 1227, 9: 1227, 16: 1227, 63: 1227, 584: 1227, 586: 1227, 593: 1227, 1227, 1227, 1227, 607: 1227, 1227, 1227, 1227, 1227, 1227, 1227, 615: 1227, 1227, 619: 1227, 625: 1227, 1227, 1227, 1227, 630: 1227, 634: 1227, 1227, 1227, 638: 1227},
// 3570
{583: 6670},
{583: 1314},
{583: 1313},
{583: 1312},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 6672, 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 6671},
// 3575
{63: 1311, 461: 6680, 620: 4054, 4052, 4053, 4051, 4049, 641: 6679, 856: 4050, 4048, 1574: 6678},
{1308, 1308, 9: 1308, 16: 1308, 63: 1308, 308: 6674, 584: 1308, 586: 1308, 593: 1308, 1308, 1308, 1308, 607: 1308, 1308, 1308, 1308, 1308, 1308, 1308, 615: 1308, 1308, 619: 1308, 625: 1308, 1308, 1308, 1308, 630: 1308, 634: 1308, 1308, 1308, 638: 1308, 1332: 6673},
{1316, 1316, 9: 1316, 16: 1316, 63: 1316, 584: 1316, 586: 1316, 593: 1316, 1316, 1316, 1316, 607: 1316, 1316, 1316, 1316, 1316, 1316, 1316, 615: 1316, 1316, 619: 1316, 625: 1316, 1316, 1316, 1316, 630: 1316, 634: 1316, 1316, 1316, 638: 1316},
{583: 6675},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 6676},
// 3580
{63: 6677, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{1307, 1307, 9: 1307, 16: 1307, 63: 1307, 584: 1307, 586: 1307, 593: 1307, 1307, 1307, 1307, 607: 1307, 1307, 1307, 1307, 1307, 1307, 1307, 615: 1307, 1307, 619: 1307, 625: 1307, 1307, 1307, 1307, 630: 1307, 634: 1307, 1307, 1307, 638: 1307},
{63: 6681},
{63: 1310},
{63: 1309},
// 3585
{1308, 1308, 9: 1308, 16: 1308, 63: 1308, 308: 6674, 584: 1308, 586: 1308, 593: 1308, 1308, 1308, 1308, 607: 1308, 1308, 1308, 1308, 1308, 1308, 1308, 615: 1308, 1308, 619: 1308, 625: 1308, 1308, 1308, 1308, 630: 1308, 634: 1308, 1308, 1308, 638: 1308, 1332: 6682},
{1317, 1317, 9: 1317, 16: 1317, 63: 1317, 584: 1317, 586: 1317, 593: 1317, 1317, 1317, 1317, 607: 1317, 1317, 1317, 1317, 1317, 1317, 1317, 615: 1317, 1317, 619: 1317, 625: 1317, 1317, 1317, 1317, 630: 1317, 634: 1317, 1317, 1317, 638: 1317},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 6573, 614: 4237, 780: 6572, 826: 4236, 3292, 3293, 3291, 6571, 859: 6570, 950: 6569, 955: 6568, 6684},
{595: 6586, 6587, 627: 6585, 630: 6588, 634: 6584, 6589, 6590, 638: 6685, 979: 6583, 984: 6582},
{1230, 1230, 9: 1230, 16: 1230, 63: 1230, 584: 1230, 586: 1230, 593: 1230, 1230, 607: 1230, 1230, 1230, 1230, 1230, 1230, 1230, 615: 1230, 1230, 619: 1230, 625: 1230, 1230, 628: 1230},
// 3590
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4336, 3292, 3293, 3291, 876: 6687, 1083: 6688, 1113: 6689},
{605: 6719, 772: 6720, 946: 6718},
{2834, 2834, 9: 2834, 16: 2834, 594: 2834, 609: 2834, 612: 2834, 619: 2834},
{481, 481, 9: 6690, 16: 481, 594: 481, 609: 5030, 612: 481, 619: 481, 941: 5031, 6691},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4336, 3292, 3293, 3291, 876: 6687, 1083: 6717},
// 3595
{1607, 1607, 16: 1607, 594: 1607, 612: 1607, 619: 4166, 897: 4220, 971: 6692},
{1181, 1181, 16: 1181, 594: 1181, 612: 6693, 1274: 6694},
{604: 3284, 697: 4177, 854: 4175, 865: 4176, 1061: 6716},
{1637, 1637, 16: 6695, 594: 1637, 1102: 6696},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 614: 6698, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 6699, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 6697, 1126: 6700, 1246: 6701},
// 3600
{485, 485, 594: 485},
{2307, 2307, 3731, 3552, 3516, 3387, 3431, 3348, 3554, 2307, 3307, 3359, 3309, 3454, 3573, 3566, 2307, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 2307, 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 584: 2307, 6713, 2307, 591: 6712, 593: 2307, 2307, 607: 2307, 2307, 2307, 2307, 612: 2307, 2307, 615: 2307, 2307, 2307, 619: 2307, 4054, 4052, 4053, 4051, 4049, 2307, 2307, 826: 6711, 3292, 3293, 3291, 856: 4050, 4048, 1443: 6710, 6709},
{2311, 2311, 9: 2311, 16: 2311, 63: 2311, 584: 2311, 586: 2311, 593: 2311, 2311, 607: 2311, 2311, 2311, 2311, 612: 2311, 2311, 615: 2311, 2311, 2311, 619: 2311, 625: 2311, 2311},
{1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 584: 1589, 1589, 1589, 588: 1589, 590: 1589, 1589, 1589, 1589, 1589, 597: 1589, 1589, 1589, 605: 1589, 607: 1589, 1589, 1589, 1589, 612: 1589, 1589, 1589, 1589, 1589, 1589, 619: 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 633: 1589, 661: 1589, 665: 1589, 1589, 672: 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 689: 1589, 1589, 1589, 694: 1589, 762: 1589, 769: 6704, 773: 1589, 1589},
{2301, 2301, 9: 2301, 16: 2301, 63: 2301, 584: 2301, 586: 2301, 593: 2301, 2301, 607: 2301, 2301, 2301, 2301, 612: 2301, 2301, 615: 2301, 2301, 2301, 619: 2301, 625: 2301, 2301},
// 3605
{1636, 1636, 9: 6702, 594: 1636},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 614: 6698, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 6699, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 6697, 1126: 6703},
{2300, 2300, 9: 2300, 16: 2300, 63: 2300, 584: 2300, 586: 2300, 593: 2300, 2300, 607: 2300, 2300, 2300, 2300, 612: 2300, 2300, 615: 2300, 2300, 2300, 619: 2300, 625: 2300, 2300},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 6705, 826: 6706, 3292, 3293, 3291},
{2310, 2310, 9: 2310, 16: 2310, 63: 2310, 584: 2310, 586: 2310, 593: 2310, 2310, 607: 2310, 2310, 2310, 2310, 612: 2310, 2310, 615: 2310, 2310, 2310, 619: 2310, 625: 2310, 2310},
// 3610
{1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 4797, 1588, 1588, 1588, 588: 1588, 590: 1588, 1588, 1588, 1588, 1588, 597: 1588, 1588, 1588, 605: 1588, 607: 1588, 1588, 1588, 1588, 612: 1588, 1588, 1588, 1588, 1588, 1588, 619: 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 633: 1588, 661: 1588, 665: 1588, 1588, 672: 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 689: 1588, 1588, 1588, 694: 1588, 762: 1588, 769: 6707, 773: 1588, 1588},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 6708, 826: 4216, 3292, 3293, 3291},
{2309, 2309, 9: 2309, 16: 2309, 63: 2309, 584: 2309, 586: 2309, 593: 2309, 2309, 607: 2309, 2309, 2309, 2309, 612: 2309, 2309, 615: 2309, 2309, 2309, 619: 2309, 625: 2309, 2309},
{2308, 2308, 9: 2308, 16: 2308, 63: 2308, 584: 2308, 586: 2308, 593: 2308, 2308, 607: 2308, 2308, 2308, 2308, 612: 2308, 2308, 615: 2308, 2308, 2308, 619: 2308, 625: 2308, 2308},
{2306, 2306, 9: 2306, 16: 2306, 63: 2306, 584: 2306, 586: 2306, 593: 2306, 2306, 607: 2306, 2306, 2306, 2306, 612: 2306, 2306, 615: 2306, 2306, 2306, 619: 2306, 625: 2306, 2306},
// 3615
{2305, 2305, 9: 2305, 16: 2305, 63: 2305, 584: 2305, 586: 2305, 593: 2305, 2305, 607: 2305, 2305, 2305, 2305, 612: 2305, 2305, 615: 2305, 2305, 2305, 619: 2305, 625: 2305, 2305},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 6715, 826: 6714, 3292, 3293, 3291},
{2303, 2303, 9: 2303, 16: 2303, 63: 2303, 584: 2303, 586: 2303, 593: 2303, 2303, 607: 2303, 2303, 2303, 2303, 612: 2303, 2303, 615: 2303, 2303, 2303, 619: 2303, 625: 2303, 2303},
{2304, 2304, 9: 2304, 16: 2304, 63: 2304, 584: 2304, 586: 2304, 593: 2304, 2304, 607: 2304, 2304, 2304, 2304, 612: 2304, 2304, 615: 2304, 2304, 2304, 619: 2304, 625: 2304, 2304},
{2302, 2302, 9: 2302, 16: 2302, 63: 2302, 584: 2302, 586: 2302, 593: 2302, 2302, 607: 2302, 2302, 2302, 2302, 612: 2302, 2302, 615: 2302, 2302, 2302, 619: 2302, 625: 2302, 2302},
// 3620
{1180, 1180, 16: 1180, 594: 1180},
{2833, 2833, 9: 2833, 16: 2833, 594: 2833, 609: 2833, 612: 2833, 619: 2833},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 4208, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4204, 947: 6721},
{2: 1076, 1076, 1076, 1076, 1076, 1076, 1076, 10: 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 64: 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 588: 1076, 1076, 1076, 595: 1076, 1076, 1076, 1076, 1076, 1076, 1076, 603: 1076, 1076, 606: 1076, 631: 1076, 637: 1076, 640: 1076, 663: 1076, 1076, 667: 1076, 1076, 1076, 1076, 1076, 687: 1076, 1076, 693: 1076, 695: 1076, 1076, 1076, 1076, 700: 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 713: 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 765: 1076},
{2: 1075, 1075, 1075, 1075, 1075, 1075, 1075, 10: 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 64: 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 588: 1075, 1075, 1075, 595: 1075, 1075, 1075, 1075, 1075, 1075, 1075, 603: 1075, 1075, 606: 1075, 631: 1075, 637: 1075, 640: 1075, 663: 1075, 1075, 667: 1075, 1075, 1075, 1075, 1075, 687: 1075, 1075, 693: 1075, 695: 1075, 1075, 1075, 1075, 700: 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 713: 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 765: 1075},
// 3625
{2835, 2835, 9: 2835, 16: 2835, 594: 2835, 609: 2835, 612: 2835, 619: 2835},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4336, 3292, 3293, 3291, 876: 6687, 1083: 6688, 1113: 6723},
{481, 481, 9: 6690, 16: 481, 594: 481, 609: 5030, 941: 5031, 6724},
{1637, 1637, 16: 6695, 594: 1637, 1102: 6725},
{484, 484, 594: 484},
// 3630
{2: 631, 631, 631, 631, 631, 631, 631, 10: 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 64: 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 614: 631},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 6728},
{630, 630},
{25: 6740, 181: 6732, 6251, 191: 845, 278: 6731, 283: 6743, 295: 6741, 312: 6733, 325: 6737, 347: 6742, 351: 6734, 387: 6738, 637: 6739, 642: 6250, 1164: 6736, 1448: 6730, 1475: 6735},
{856, 856},
// 3635
{853, 853},
{852, 852},
{304: 6753},
{850, 850},
{191: 6752},
// 3640
{834, 834, 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 586: 834, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 4238, 939: 5203, 1372: 6747},
{847, 847},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 6226, 826: 6227, 3292, 3293, 3291, 1158: 6225, 1362: 6744},
{191: 844},
{191: 843},
// 3645
{191: 842},
{191: 841},
{191: 840},
{839, 839, 9: 6234, 188: 6746, 1417: 6745},
{846, 846},
// 3650
{838, 838},
{832, 832, 586: 6749, 1604: 6748},
{848, 848},
{792: 6750},
{615: 6751},
// 3655
{831, 831},
{849, 849},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 6754, 3292, 3293, 3291, 1143: 6755},
{855, 855, 9: 855},
{851, 851, 9: 6756},
// 3660
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 6757, 3292, 3293, 3291},
{854, 854, 9: 854},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 6899, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 6898, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 6897, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 6900},
{642: 6883, 764: 6884},
{764: 6880},
// 3665
{408: 6878},
{642: 6873, 764: 6872},
{642: 6870},
{266: 6867},
{266: 6864},
// 3670
{266: 6858},
{188: 6854, 224: 6853, 310: 6856, 388: 6855, 436: 6851, 457: 6852},
{225: 6848, 6847},
{642: 6801},
{71: 6797, 224: 6795, 260: 867, 282: 6799, 356: 6798, 1560: 6796},
// 3675
{224: 6794},
{224: 6793},
{316: 6788},
{316: 6786},
{266: 6776},
// 3680
{217: 6777},
{604: 3284, 854: 4867, 880: 6778},
{65: 6781, 1180: 6780, 1395: 6779},
{987, 987, 9: 6784},
{986, 986, 9: 986},
// 3685
{605: 6782},
{585: 3933, 597: 5348, 5349, 601: 3924, 604: 3928, 667: 3923, 669: 3925, 3927, 3926, 688: 3931, 693: 3932, 702: 3930, 832: 5347, 3929, 1073: 6783},
{984, 984, 9: 984},
{65: 6781, 1180: 6785},
{985, 985, 9: 985},
// 3690
{233: 6787},
{988, 988},
{233: 6789},
{477: 6791, 712: 6790, 1409: 6792},
{1023, 1023},
// 3695
{1022, 1022},
{990, 990},
{996, 996},
{997, 997},
{998, 998},
// 3700
{260: 6800},
{260: 866},
{260: 865},
{260: 864},
{991, 991},
// 3705
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 6802},
{816: 6803, 1117: 6804},
{71: 6807, 256: 6806, 642: 2521, 1139: 6805},
{999, 999},
{642: 6809},
// 3710
{182: 2520, 642: 2520},
{256: 6808},
{182: 2519, 642: 2519},
{2: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 10: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 64: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 614: 2289, 631: 5806, 915: 6810},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 6811},
// 3715
{688, 688, 688, 6: 688, 688, 688, 10: 688, 17: 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, 583: 6815, 688, 586: 688, 688, 589: 688, 591: 688, 688, 688, 600: 688, 602: 688, 688, 606: 688, 618: 688, 633: 6814, 642: 688, 692: 688, 763: 688, 688, 1469: 6813, 1569: 6812},
{637, 637, 637, 6: 5103, 5107, 5105, 10: 641, 17: 5124, 2643, 5122, 5059, 5126, 5138, 5113, 5142, 5104, 5109, 5106, 5108, 5111, 5112, 5114, 5121, 5152, 641, 5147, 5132, 5133, 5143, 5146, 5119, 5120, 5125, 5127, 5153, 5139, 5148, 5149, 5150, 5155, 5140, 5137, 5130, 5135, 5136, 5129, 5131, 5134, 5123, 5151, 5144, 5145, 583: 637, 637, 586: 637, 637, 589: 5102, 591: 637, 2643, 5141, 600: 637, 602: 637, 637, 606: 2643, 618: 6037, 642: 637, 692: 637, 763: 2643, 5110, 921: 5115, 948: 5117, 972: 5116, 999: 5118, 1009: 5128, 1015: 5154, 1106: 6830, 1215: 6829},
{2646, 2646, 584: 6823, 1292: 6822},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 6821},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 6008, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 6009, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 633: 6816, 699: 2897, 712: 2897, 756: 2897, 758: 2897, 5496, 764: 2897, 817: 2897, 2897, 826: 4336, 3292, 3293, 3291, 876: 5360, 960: 5799, 1025: 6010, 1087: 5802, 5804, 5803, 6011, 1163: 6012, 1370: 6817},
// 3720
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 6819},
{9: 6014, 63: 6818},
{687, 687, 687, 6: 687, 687, 687, 10: 687, 17: 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, 583: 687, 687, 586: 687, 687, 589: 687, 591: 687, 687, 687, 600: 687, 602: 687, 687, 606: 687, 618: 687, 642: 687, 692: 687, 763: 687, 687},
{63: 6820},
{2555, 2555, 584: 2555},
// 3725
{2556, 2556, 584: 2556},
{2647, 2647},
{114: 6824},
{465: 6826, 858: 6825},
{641: 6828},
// 3730
{641: 6827},
{2644, 2644},
{2645, 2645},
{2641, 2641, 2641, 583: 2641, 2641, 586: 2641, 6832, 591: 2641, 600: 2641, 602: 2641, 2641, 642: 2641, 692: 2641, 1309: 6831},
{636, 636, 636, 6: 5103, 5107, 5105, 6039, 641, 17: 5124, 2643, 5122, 5059, 5126, 5138, 5113, 5142, 5104, 5109, 5106, 5108, 5111, 5112, 5114, 5121, 5152, 641, 5147, 5132, 5133, 5143, 5146, 5119, 5120, 5125, 5127, 5153, 5139, 5148, 5149, 5150, 5155, 5140, 5137, 5130, 5135, 5136, 5129, 5131, 5134, 5123, 5151, 5144, 5145, 583: 636, 636, 586: 636, 636, 589: 5102, 591: 636, 2643, 5141, 600: 636, 602: 636, 636, 606: 2643, 618: 6037, 642: 636, 692: 636, 763: 2643, 5110, 921: 5115, 948: 5117, 972: 5116, 999: 5118, 1009: 5128, 1015: 6038},
// 3735
{3087, 3087, 6835, 583: 3087, 3087, 586: 3087, 591: 3087, 600: 3087, 602: 3087, 3087, 642: 3087, 692: 3087, 1156: 6834, 1551: 6833, 6836},
{776: 6097},
{3086, 3086, 6835, 583: 3086, 3086, 586: 3086, 591: 3086, 600: 3086, 602: 3086, 3086, 642: 3086, 692: 3086, 1156: 6846},
{3085, 3085, 3085, 583: 3085, 3085, 586: 3085, 591: 3085, 600: 3085, 602: 3085, 3085, 642: 3085, 692: 3085},
{673: 5844, 712: 6209, 764: 6210, 1013: 6211},
// 3740
{2570, 2570, 583: 2570, 2570, 586: 2570, 591: 2570, 600: 2570, 602: 6353, 6354, 642: 2570, 692: 2570, 1238: 6837},
{2567, 2567, 583: 2567, 2567, 586: 2567, 591: 6839, 600: 2567, 642: 2567, 692: 2567, 1405: 6838},
{2565, 2565, 583: 3150, 2565, 586: 3149, 600: 3148, 642: 3147, 692: 3143, 830: 6844, 861: 6842, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 4155, 6843, 6841, 1428: 6840},
{2566, 2566, 583: 2566, 2566, 586: 2566, 600: 2566, 642: 2566, 692: 2566},
{2646, 2646, 584: 6823, 1292: 6845},
// 3745
{2564, 2564, 584: 2564},
{2563, 2563, 584: 2563, 593: 1113, 607: 1113, 1113},
{2562, 2562, 584: 2562},
{2561, 2561, 584: 2561, 593: 1112, 607: 1112, 1112, 610: 4168, 612: 4167, 619: 4166, 897: 4169, 4170},
{2648, 2648},
// 3750
{3084, 3084, 3084, 583: 3084, 3084, 586: 3084, 591: 3084, 600: 3084, 602: 3084, 3084, 642: 3084, 692: 3084},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 6754, 3292, 3293, 3291, 1143: 6850},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 6754, 3292, 3293, 3291, 1143: 6849},
{1001, 1001, 9: 6756},
{1002, 1002, 9: 6756},
// 3755
{1004, 1004},
{1003, 1003},
{995, 995},
{224: 6857},
{993, 993},
// 3760
{992, 992},
{994, 994},
{217: 6859},
{604: 3284, 854: 4867, 880: 6861, 1097: 6860},
{1008, 1008, 9: 6862},
// 3765
{976, 976, 9: 976},
{604: 3284, 854: 4867, 880: 6863},
{975, 975, 9: 975},
{217: 6865},
{604: 3284, 854: 4867, 880: 6861, 1097: 6866},
// 3770
{1009, 1009, 9: 6862},
{217: 6868},
{604: 3284, 854: 4867, 880: 6861, 1097: 6869},
{1010, 1010, 9: 6862},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 4238, 939: 6871},
// 3775
{1011, 1011, 9: 4240},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 6876},
{615: 6874},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 4238, 939: 6875},
{1000, 1000, 9: 4240},
// 3780
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 6877, 3292, 3293, 3291},
{1013, 1013},
{74: 6879},
{1014, 1014},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 6881},
// 3785
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 6882, 3292, 3293, 3291},
{1015, 1015},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 4238, 939: 6896},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 6885},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 6886, 3292, 3293, 3291},
// 3790
{1016, 1016, 583: 6889, 1259: 6888, 1454: 6887},
{1012, 1012, 9: 6894},
{979, 979, 9: 979},
{604: 3284, 854: 4867, 880: 6890},
{9: 6891},
// 3795
{604: 3284, 854: 4867, 880: 6892},
{63: 6893},
{977, 977, 9: 977},
{583: 6889, 1259: 6895},
{978, 978, 9: 978},
// 3800
{1017, 1017, 9: 4240},
{233: 6925, 250: 2231, 769: 2231},
{250: 2043, 470: 6917, 493: 6918, 769: 2043, 1393: 6916},
{1021, 1021, 217: 6902, 227: 6903, 250: 1841, 769: 1841},
{250: 6901},
// 3805
{1018, 1018},
{481, 481, 604: 3284, 609: 5030, 854: 4867, 880: 6914, 941: 5031, 6913},
{468: 6904},
{604: 3284, 612: 6905, 854: 4867, 880: 6861, 1097: 6906, 1394: 6907},
{604: 3284, 854: 4175, 865: 6908},
// 3810
{1007, 1007, 9: 6862},
{1006, 1006},
{1026, 1026, 9: 6909, 252: 6910},
{604: 3284, 854: 4175, 865: 6912},
{604: 3284, 854: 4175, 865: 6911},
// 3815
{1024, 1024},
{1025, 1025},
{1020, 1020},
{481, 481, 609: 5030, 941: 5031, 6915},
{1019, 1019},
// 3820
{1005, 1005},
{604: 3284, 854: 6924},
{443: 6920, 604: 3284, 770: 6921, 854: 6919},
{982, 982},
{604: 3284, 854: 6923},
// 3825
{604: 3284, 854: 6922},
{980, 980},
{981, 981},
{983, 983},
{989, 989},
// 3830
{2: 503, 503, 503, 503, 503, 503, 503, 10: 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 64: 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 585: 503, 589: 503, 605: 2219, 637: 503, 769: 2219, 772: 2219},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 7087, 605: 2217, 769: 2217, 772: 2217, 826: 7086, 3292, 3293, 3291},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 7084, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 605: 2177, 769: 2177, 772: 2177, 826: 6941, 3292, 3293, 3291, 983: 6982},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 605: 2171, 769: 2171, 772: 2171, 826: 6941, 3292, 3293, 3291, 983: 7081},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 589: 7077, 605: 2169, 637: 4666, 769: 2169, 772: 2169, 826: 4046, 3292, 3293, 3291, 860: 4665, 965: 7076},
// 3835
{605: 6719, 613: 7066, 769: 2164, 772: 2164, 946: 7065},
{605: 2154, 625: 7063, 769: 2154, 772: 2154},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 6962, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 6963, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 6967, 589: 7060, 605: 2152, 769: 2152, 7058, 772: 2152, 826: 4046, 3292, 3293, 3291, 860: 6383, 954: 6969, 981: 6970, 6968, 1037: 6966, 1347: 7059, 1538: 7057},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 7055, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 605: 2148, 769: 2148, 772: 2148, 826: 6941, 3292, 3293, 3291, 983: 6979},
{272: 7040, 605: 2129, 769: 2129, 772: 2129, 792: 7041, 1109: 7039, 1165: 7038},
// 3840
{429: 6990, 431: 6989, 605: 2071, 769: 2071, 772: 2071, 1411: 6991},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 605: 1955, 769: 1955, 772: 1955, 826: 6941, 3292, 3293, 3291, 983: 6986},
{585: 6985, 605: 1828, 769: 1828, 772: 1828},
{1107, 1107, 9: 6975},
{233: 6961},
// 3845
{605: 1074, 769: 6959, 772: 1074},
{605: 6719, 772: 6720, 946: 6957},
{605: 6719, 772: 6720, 946: 6952},
{605: 6719, 772: 6720, 946: 6950},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 589: 6949, 637: 4666, 826: 4046, 3292, 3293, 3291, 860: 4665, 965: 6948, 1415: 6947},
// 3850
{1051, 1051, 9: 1051},
{1058, 1058, 9: 1058},
{1057, 1057, 9: 1057},
{1056, 1056, 9: 1056},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 6951},
// 3855
{1063, 1063, 9: 1063, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 6954, 3933, 588: 3949, 4208, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 6953, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4204, 947: 6955, 991: 6956},
{1078, 1078, 3731, 3552, 3516, 3387, 3431, 3348, 3554, 1078, 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 3963, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4770, 3944, 4026, 3943, 3940},
{1079, 1079, 9: 1079},
{1077, 1077, 9: 1077},
// 3860
{1064, 1064, 9: 1064},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 6954, 3933, 588: 3949, 4208, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 6953, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4204, 947: 6955, 991: 6958},
{1069, 1069, 9: 1069},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 6960, 3292, 3293, 3291},
{605: 1073, 772: 1073},
// 3865
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 6962, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 6963, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 6967, 770: 6965, 826: 4046, 3292, 3293, 3291, 860: 6383, 954: 6969, 981: 6970, 6968, 1037: 6966, 1347: 6964},
{1035, 1035, 9: 1035, 668: 2253, 767: 1035, 781: 2253},
{1095, 1095, 668: 2066, 767: 1095, 781: 2066},
{767: 6973},
{767: 1094},
// 3870
{1093, 1093, 9: 6971, 767: 1093},
{1036, 1036, 9: 1036, 668: 492, 767: 1036, 781: 492},
{1030, 1030, 9: 1030, 767: 1030},
{1029, 1029, 9: 1029, 767: 1029},
{1028, 1028, 9: 1028, 767: 1028},
// 3875
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 6962, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 6967, 826: 4046, 3292, 3293, 3291, 860: 6383, 954: 6969, 981: 6972, 6968},
{1027, 1027, 9: 1027, 767: 1027},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 687: 6429, 826: 4046, 3292, 3293, 3291, 860: 6428, 910: 6430, 1039: 6974},
{1096, 1096, 9: 6432},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 6926, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 6929, 3684, 6976, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 6977, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 6937, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 6930, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 606: 4739, 668: 6944, 710: 6943, 763: 4737, 826: 6941, 3292, 3293, 3291, 908: 6945, 983: 6942, 1173: 6978},
// 3880
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 605: 2177, 769: 2177, 772: 2177, 826: 6941, 3292, 3293, 3291, 983: 6982},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 605: 2148, 769: 2148, 772: 2148, 826: 6941, 3292, 3293, 3291, 983: 6979},
{1050, 1050, 9: 1050},
{605: 6719, 772: 6720, 946: 6980},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 6954, 3933, 588: 3949, 4208, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 6953, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4204, 947: 6955, 991: 6981},
// 3885
{1066, 1066, 9: 1066},
{605: 6719, 772: 6720, 946: 6983},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 6954, 3933, 588: 3949, 4208, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 6953, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4204, 947: 6955, 991: 6984},
{1068, 1068, 9: 1068},
{1099, 1099},
// 3890
{605: 6719, 772: 6720, 946: 6987},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 6954, 3933, 588: 3949, 4208, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 6953, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4204, 947: 6955, 991: 6988},
{1067, 1067, 9: 1067},
{613: 2687},
{613: 2686},
// 3895
{613: 6992},
{583: 3150, 586: 3149, 600: 3148, 603: 3134, 640: 3133, 642: 3147, 692: 3143, 757: 7004, 766: 3263, 830: 6995, 858: 6993, 861: 6996, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 6994, 6998, 6997, 877: 3262, 7000, 7001, 881: 7002, 6999, 994: 7003},
{2: 1151, 1151, 1151, 1151, 1151, 1151, 1151, 10: 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 64: 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 602: 1151, 617: 1151, 887: 1151, 889: 1151, 891: 1151, 895: 6555, 1014: 6556, 1076: 7009},
{583: 3150, 600: 3148, 642: 3147, 692: 3143, 766: 3263, 830: 4163, 861: 4162, 3144, 3145, 3146, 866: 3155, 3153, 4164, 4165, 877: 6271},
{408, 408, 593: 1112, 408, 607: 1112, 1112, 610: 4168, 612: 4167, 619: 4166, 897: 4169, 4170},
// 3900
{410, 410, 593: 1113, 410, 607: 1113, 1113},
{411, 411, 594: 411},
{409, 409, 594: 409},
{407, 407, 594: 407},
{406, 406, 594: 406},
// 3905
{405, 405, 594: 405},
{404, 404, 594: 404},
{393, 393, 594: 7007},
{258: 7005},
{585: 7006},
// 3910
{391, 391},
{583: 3150, 586: 3149, 600: 3148, 603: 3134, 640: 3133, 642: 3147, 692: 3143, 766: 3263, 830: 6995, 858: 6993, 861: 6996, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 6994, 6998, 6997, 877: 3262, 7000, 7001, 881: 7002, 6999, 994: 7008},
{392, 392},
{2: 1360, 1360, 1360, 1360, 1360, 1360, 1360, 10: 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 64: 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 602: 1360, 617: 1360, 887: 6558, 889: 6560, 891: 6559, 1007: 6561, 1069: 7010},
{2: 1347, 1347, 1347, 1347, 1347, 1347, 1347, 10: 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 64: 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 7012, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 602: 1347, 617: 1347, 1322: 7011},
// 3915
{2: 2287, 2287, 2287, 2287, 2287, 2287, 2287, 10: 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 64: 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 602: 5053, 617: 2287, 1032: 7013},
{2: 1346, 1346, 1346, 1346, 1346, 1346, 1346, 10: 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 64: 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 602: 1346, 617: 1346},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 617: 7014, 826: 7016, 3292, 3293, 3291, 1105: 7017, 1161: 7015},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 7029},
{9: 7025, 617: 7024},
// 3920
{9: 1349, 594: 1349, 617: 1349, 769: 7019, 1099: 7018},
{9: 1351, 594: 1351, 617: 1351},
{9: 1353, 594: 1353, 617: 1353},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 7021, 826: 7020, 3292, 3293, 3291},
{9: 1349, 594: 1349, 617: 1349, 769: 7023, 1099: 7022},
// 3925
{9: 1348, 594: 1348, 617: 1348},
{9: 1352, 594: 1352, 617: 1352},
{614: 7021},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 6573, 614: 4237, 698: 6567, 780: 6572, 826: 4236, 3292, 3293, 3291, 6571, 859: 6570, 950: 6569, 955: 6568, 6575, 1029: 6564, 1077: 7027},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 7016, 3292, 3293, 3291, 1105: 7026},
// 3930
{9: 1350, 594: 1350, 617: 1350},
{481, 481, 9: 6623, 594: 481, 609: 5030, 941: 5031, 7028},
{2532, 2532, 594: 2532},
{1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 10: 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 64: 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 587: 6636, 591: 1223, 594: 1223, 602: 1223, 609: 1223, 612: 1223, 618: 1223, 1223, 629: 1223, 1005: 7030},
{1219, 1219, 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 1219, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 591: 6580, 594: 1219, 602: 1219, 609: 1219, 612: 1219, 618: 1219, 1219, 629: 1219, 826: 6579, 3292, 3293, 3291, 1075: 7032, 1568: 7031},
// 3935
{1200, 1200, 16: 1200, 594: 1200, 602: 6645, 609: 1200, 612: 1200, 618: 6646, 1200, 629: 6644, 1130: 6648, 6647, 1264: 6649, 7033},
{1218, 1218, 16: 1218, 594: 1218, 602: 1218, 609: 1218, 612: 1218, 618: 1218, 1218, 629: 1218},
{481, 481, 16: 481, 594: 481, 609: 5030, 612: 481, 619: 481, 941: 5031, 7034},
{1607, 1607, 16: 1607, 594: 1607, 612: 1607, 619: 4166, 897: 4220, 971: 7035},
{1181, 1181, 16: 1181, 594: 1181, 612: 6693, 1274: 7036},
// 3940
{1637, 1637, 16: 6695, 594: 1637, 1102: 7037},
{2533, 2533, 594: 2533},
{1102, 1102, 9: 7053},
{1089, 1089, 9: 1089},
{447: 7045},
// 3945
{241: 7043, 823: 7042},
{1086, 1086, 9: 1086},
{1085, 1085, 9: 1085, 794: 5008, 1082: 7044},
{1084, 1084, 9: 1084},
{308: 7047, 479: 7049, 792: 7048, 1465: 7046},
// 3950
{1087, 1087, 9: 1087},
{792: 7052},
{424: 7050, 498: 7051},
{1080, 1080, 9: 1080},
{1082, 1082, 9: 1082},
// 3955
{1081, 1081, 9: 1081},
{1083, 1083, 9: 1083},
{272: 7040, 792: 7041, 1109: 7054},
{1088, 1088, 9: 1088},
{272: 7040, 605: 2129, 769: 2129, 772: 2129, 792: 7041, 1109: 7039, 1165: 7056},
// 3960
{1103, 1103, 9: 7053},
{1097, 1097},
{1094, 1094, 607: 7061},
{1091, 1091},
{1090, 1090},
// 3965
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 6962, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 6967, 826: 4046, 3292, 3293, 3291, 860: 6383, 954: 6969, 981: 6970, 6968, 1037: 7062},
{1092, 1092, 9: 6971},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 589: 3289, 826: 3288, 3292, 3293, 3291, 980: 7064},
{1098, 1098},
{17: 7071, 585: 7070, 1310: 7075},
// 3970
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 687: 6429, 826: 4046, 3292, 3293, 3291, 860: 6428, 910: 7067},
{605: 6719, 772: 6720, 946: 7068},
{17: 7071, 585: 7070, 1310: 7069},
{1105, 1105},
{1039, 1039},
// 3975
{583: 7072},
{585: 6462, 1084: 7073},
{63: 7074},
{1038, 1038},
{1106, 1106},
// 3980
{1062, 1062, 9: 1062, 592: 7078},
{1059, 1059, 9: 1059},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 589: 7079, 826: 4046, 3292, 3293, 3291, 860: 7080},
{1061, 1061, 9: 1061},
{1060, 1060, 9: 1060},
// 3985
{605: 6719, 772: 6720, 946: 7082},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 6954, 3933, 588: 3949, 4208, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 6953, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4204, 947: 6955, 991: 7083},
{1065, 1065, 9: 1065},
{272: 7040, 605: 2129, 769: 2129, 772: 2129, 792: 7041, 1109: 7039, 1165: 7085},
{1104, 1104, 9: 7053},
// 3990
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 7089, 3292, 3293, 3291, 1086: 7096},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 7089, 3292, 3293, 3291, 1086: 7088},
{605: 6719, 772: 6720, 946: 7094},
{598: 7091, 605: 1072, 769: 7090, 772: 1072},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 7089, 3292, 3293, 3291, 1086: 7093},
// 3995
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 7089, 3292, 3293, 3291, 1086: 7092},
{605: 1070, 772: 1070},
{605: 1071, 772: 1071},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 6954, 3933, 588: 3949, 4208, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 6953, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4204, 947: 6955, 991: 7095},
{1100, 1100},
// 4000
{605: 6719, 772: 6720, 946: 7097},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 6954, 3933, 588: 3949, 4208, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 6953, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4204, 947: 6955, 991: 7098},
{1101, 1101},
{583: 3150, 600: 3148, 642: 3147, 692: 3143, 830: 7110, 861: 7109, 3144, 3145, 3146, 866: 7111},
{583: 1546, 600: 1546, 642: 1546, 692: 1546, 770: 4486, 884: 4484, 4485, 943: 7103, 945: 7104, 1119: 7106, 1155: 7108},
// 4005
{583: 1546, 600: 1546, 642: 1546, 692: 1546, 770: 4486, 884: 4484, 4485, 943: 7103, 945: 7104, 1119: 7106, 1155: 7107},
{583: 1546, 600: 1546, 642: 1546, 692: 1546, 770: 4486, 884: 4484, 4485, 943: 7103, 945: 7104, 1119: 7106, 1155: 7105},
{2: 1549, 1549, 1549, 1549, 1549, 1549, 1549, 10: 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 64: 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 585: 1549, 588: 1549, 1549, 1549, 595: 1549, 1549, 1549, 1549, 1549, 1549, 1549, 603: 1549, 1549, 606: 1549, 614: 1549, 627: 1549, 631: 1549, 637: 1549, 640: 1549, 642: 1549, 663: 1549, 1549, 667: 1549, 1549, 1549, 1549, 1549, 687: 1549, 1549, 692: 1549, 1549, 695: 1549, 1549, 1549, 1549, 700: 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 713: 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 765: 1549, 770: 1549, 884: 1549, 1549, 887: 1549, 889: 1549, 891: 1549, 895: 1549, 904: 1549, 1549, 1549},
{583: 1545, 600: 1545, 642: 1545, 692: 1545},
{583: 1109, 600: 1109, 642: 1109, 692: 1109},
// 4010
{583: 1108, 600: 1108, 642: 1108, 692: 1108},
{583: 1110, 600: 1110, 642: 1110, 692: 1110},
{583: 1111, 600: 1111, 642: 1111, 692: 1111},
{1123, 1123, 16: 1123, 63: 1123, 584: 1123, 586: 1123, 593: 1113, 1123, 607: 1113, 1113},
{1122, 1122, 16: 1122, 63: 1122, 584: 1122, 586: 1122, 593: 1112, 1122, 607: 1112, 1112, 610: 4168, 612: 4167, 619: 4166, 897: 7112, 7113},
// 4015
{593: 1114, 607: 1114, 1114},
{1121, 1121, 16: 1121, 63: 1121, 584: 1121, 586: 1121, 594: 1121, 610: 4168, 612: 4167, 898: 7114},
{1120, 1120, 16: 1120, 63: 1120, 584: 1120, 586: 1120, 594: 1120},
{1119, 1119, 16: 1119, 63: 1119, 584: 1119, 586: 1119, 594: 1119},
{9: 7123, 583: 1299, 600: 1299, 642: 1299, 692: 1299, 766: 1299, 858: 1299},
// 4020
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 7118, 3292, 3293, 3291, 1116: 7117, 1390: 7122},
{9: 1296, 583: 1296, 600: 1296, 642: 1296, 692: 1296, 766: 1296, 858: 1296},
{583: 6628, 591: 2813, 1263: 7119},
{591: 7120},
{583: 3150, 830: 7121},
// 4025
{9: 1295, 583: 1295, 600: 1295, 642: 1295, 692: 1295, 766: 1295, 858: 1295},
{9: 7123, 583: 1298, 600: 1298, 642: 1298, 692: 1298, 766: 1298, 858: 1298},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 7118, 3292, 3293, 3291, 1116: 7124},
{9: 1297, 583: 1297, 600: 1297, 642: 1297, 692: 1297, 766: 1297, 858: 1297},
{1607, 1607, 16: 1607, 63: 1607, 584: 1607, 586: 1607, 593: 1607, 1607, 607: 1607, 1607, 610: 1607, 612: 1607, 1607, 615: 1607, 1607, 619: 4166, 897: 4220, 971: 7126},
// 4030
{1167, 1167, 16: 1167, 63: 1167, 584: 1167, 586: 1167, 593: 1167, 1167, 607: 1167, 1167, 610: 4168, 612: 4167, 1167, 615: 1167, 1167, 898: 4225, 990: 7127},
{1138, 1138, 16: 1138, 63: 1138, 584: 1138, 586: 1138, 593: 1138, 1138, 607: 1138, 1138, 613: 4227, 615: 4228, 1138, 1071: 7128},
{1144, 1144, 16: 1144, 63: 1144, 584: 1144, 586: 1144, 593: 1144, 1144, 607: 1144, 1144, 616: 4256, 1072: 7129},
{1303, 1303, 16: 1303, 63: 1303, 584: 1303, 586: 1303, 593: 1303, 1303, 607: 1303, 1303},
{1167, 1167, 16: 1167, 63: 1167, 584: 1167, 586: 1167, 593: 1167, 1167, 607: 1167, 1167, 610: 4168, 612: 4167, 1167, 615: 1167, 1167, 898: 4225, 990: 7131},
// 4035
{1138, 1138, 16: 1138, 63: 1138, 584: 1138, 586: 1138, 593: 1138, 1138, 607: 1138, 1138, 613: 4227, 615: 4228, 1138, 1071: 7132},
{1144, 1144, 16: 1144, 63: 1144, 584: 1144, 586: 1144, 593: 1144, 1144, 607: 1144, 1144, 616: 4256, 1072: 7133},
{1304, 1304, 16: 1304, 63: 1304, 584: 1304, 586: 1304, 593: 1304, 1304, 607: 1304, 1304},
{776: 7141},
{1607, 1607, 16: 1607, 63: 1607, 584: 1607, 586: 1607, 593: 1607, 1607, 607: 1607, 1607, 610: 1607, 612: 1607, 1607, 615: 1607, 1607, 619: 4166, 897: 4220, 971: 7137},
// 4040
{1145, 1145, 16: 1145, 63: 1145, 584: 1145, 586: 1145, 593: 1145, 1145, 607: 1145, 1145, 610: 1145, 612: 1145, 1145, 615: 1145, 1145, 619: 1145, 626: 1145, 628: 1145},
{1167, 1167, 16: 1167, 63: 1167, 584: 1167, 586: 1167, 593: 1167, 1167, 607: 1167, 1167, 610: 4168, 612: 4167, 1167, 615: 1167, 1167, 898: 4225, 990: 7138},
{1138, 1138, 16: 1138, 63: 1138, 584: 1138, 586: 1138, 593: 1138, 1138, 607: 1138, 1138, 613: 4227, 615: 4228, 1138, 1071: 7139},
{1144, 1144, 16: 1144, 63: 1144, 584: 1144, 586: 1144, 593: 1144, 1144, 607: 1144, 1144, 616: 4256, 1072: 7140},
{1305, 1305, 16: 1305, 63: 1305, 584: 1305, 586: 1305, 593: 1305, 1305, 607: 1305, 1305},
// 4045
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4190, 1047: 4192, 1085: 7142},
{2299, 2299, 9: 4193, 16: 2299, 63: 2299, 584: 2299, 586: 7143, 593: 2299, 2299, 607: 2299, 2299, 610: 2299, 612: 2299, 2299, 615: 2299, 2299, 619: 2299, 626: 2299, 628: 2299, 1605: 7144},
{476: 7145},
{2297, 2297, 16: 2297, 63: 2297, 584: 2297, 586: 2297, 593: 2297, 2297, 607: 2297, 2297, 610: 2297, 612: 2297, 2297, 615: 2297, 2297, 619: 2297, 626: 2297, 628: 2297},
{2298, 2298, 16: 2298, 63: 2298, 584: 2298, 586: 2298, 593: 2298, 2298, 607: 2298, 2298, 610: 2298, 612: 2298, 2298, 615: 2298, 2298, 619: 2298, 626: 2298, 628: 2298},
// 4050
{481, 481, 16: 481, 63: 481, 584: 481, 586: 481, 593: 481, 481, 607: 481, 481, 5030, 481, 612: 481, 481, 615: 481, 481, 619: 481, 625: 481, 941: 5031, 7171},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 6573, 614: 4237, 698: 6567, 780: 6572, 826: 4236, 3292, 3293, 3291, 6571, 859: 6570, 950: 6569, 955: 6568, 6575, 1029: 6564, 1077: 7156, 1436: 7155, 1571: 7154},
{1146, 1146, 16: 1146, 63: 1146, 584: 1146, 586: 1146, 593: 1146, 1146, 607: 1146, 1146, 610: 1146, 612: 1146, 1146, 615: 1146, 1146, 619: 1146, 625: 7134, 1129: 7136, 1154: 7149},
{1607, 1607, 16: 1607, 63: 1607, 584: 1607, 586: 1607, 593: 1607, 1607, 607: 1607, 1607, 610: 1607, 612: 1607, 1607, 615: 1607, 1607, 619: 4166, 897: 4220, 971: 7150},
{1167, 1167, 16: 1167, 63: 1167, 584: 1167, 586: 1167, 593: 1167, 1167, 607: 1167, 1167, 610: 4168, 612: 4167, 1167, 615: 1167, 1167, 898: 4225, 990: 7151},
// 4055
{1138, 1138, 16: 1138, 63: 1138, 584: 1138, 586: 1138, 593: 1138, 1138, 607: 1138, 1138, 613: 4227, 615: 4228, 1138, 1071: 7152},
{1144, 1144, 16: 1144, 63: 1144, 584: 1144, 586: 1144, 593: 1144, 1144, 607: 1144, 1144, 616: 4256, 1072: 7153},
{1306, 1306, 16: 1306, 63: 1306, 584: 1306, 586: 1306, 593: 1306, 1306, 607: 1306, 1306},
{481, 481, 16: 481, 63: 481, 584: 481, 586: 481, 593: 481, 481, 607: 481, 481, 5030, 481, 612: 481, 481, 615: 481, 481, 619: 481, 625: 481, 481, 628: 481, 941: 5031, 7157},
{1294, 1294, 16: 1294, 63: 1294, 584: 1294, 586: 1294, 593: 1294, 1294, 607: 1294, 1294, 1294, 1294, 612: 1294, 1294, 615: 1294, 1294, 619: 1294, 625: 1294},
// 4060
{1234, 1234, 9: 6623, 16: 1234, 63: 1234, 584: 1234, 586: 1234, 593: 1234, 1234, 607: 1234, 1234, 1234, 1234, 612: 1234, 1234, 615: 1234, 1234, 619: 1234, 625: 1234, 1234, 628: 1234},
{1146, 1146, 16: 1146, 63: 1146, 584: 1146, 586: 1146, 593: 1146, 1146, 607: 1146, 1146, 610: 1146, 612: 1146, 1146, 615: 1146, 1146, 619: 1146, 625: 7134, 1146, 628: 1146, 1129: 7136, 1154: 7158},
{2296, 2296, 16: 2296, 63: 2296, 584: 2296, 586: 2296, 593: 2296, 2296, 607: 2296, 2296, 610: 2296, 612: 2296, 2296, 615: 2296, 2296, 619: 2296, 626: 7159, 628: 2296, 1261: 7160},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 7170},
{1293, 1293, 16: 1293, 63: 1293, 584: 1293, 586: 1293, 593: 1293, 1293, 607: 1293, 1293, 610: 1293, 612: 1293, 1293, 615: 1293, 1293, 619: 1293, 628: 7162, 1597: 7161},
// 4065
{1319, 1319, 16: 1319, 63: 1319, 584: 1319, 586: 1319, 593: 1319, 1319, 607: 1319, 1319, 610: 1319, 612: 1319, 1319, 615: 1319, 1319, 619: 1319},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4378, 3292, 3293, 3291, 1111: 7165, 1386: 7164, 1598: 7163},
{1292, 1292, 9: 7168, 16: 1292, 63: 1292, 584: 1292, 586: 1292, 593: 1292, 1292, 607: 1292, 1292, 610: 1292, 612: 1292, 1292, 615: 1292, 1292, 619: 1292},
{1291, 1291, 9: 1291, 16: 1291, 63: 1291, 584: 1291, 586: 1291, 593: 1291, 1291, 607: 1291, 1291, 610: 1291, 612: 1291, 1291, 615: 1291, 1291, 619: 1291},
{591: 7166},
// 4070
{583: 4379, 1388: 7167},
{1289, 1289, 9: 1289, 16: 1289, 63: 1289, 584: 1289, 586: 1289, 593: 1289, 1289, 607: 1289, 1289, 610: 1289, 612: 1289, 1289, 615: 1289, 1289, 619: 1289},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4378, 3292, 3293, 3291, 1111: 7165, 1386: 7169},
{1290, 1290, 9: 1290, 16: 1290, 63: 1290, 584: 1290, 586: 1290, 593: 1290, 1290, 607: 1290, 1290, 610: 1290, 612: 1290, 1290, 615: 1290, 1290, 619: 1290},
{2295, 2295, 16: 2295, 63: 2295, 584: 2295, 586: 2295, 593: 2295, 2295, 607: 2295, 2295, 2295, 2295, 612: 2295, 2295, 615: 2295, 2295, 2295, 619: 2295, 4054, 4052, 4053, 4051, 4049, 2295, 628: 2295, 856: 4050, 4048},
// 4075
{1320, 1320, 16: 1320, 63: 1320, 584: 1320, 586: 1320, 593: 1320, 1320, 607: 1320, 1320, 610: 1320, 612: 1320, 1320, 615: 1320, 1320, 619: 1320, 625: 1320},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 614: 6698, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 6699, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 6697, 1126: 6700, 1246: 7187, 1533: 7188},
{2: 1165, 1165, 1165, 1165, 1165, 1165, 1165, 10: 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 64: 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 585: 1165, 588: 1165, 1165, 1165, 595: 1165, 1165, 1165, 1165, 1165, 1165, 1165, 603: 1165, 1165, 606: 1165, 614: 1165, 627: 1165, 631: 1165, 637: 1165, 640: 1165, 663: 1165, 1165, 667: 1165, 1165, 1165, 1165, 1165, 687: 1165, 1165, 693: 1165, 695: 1165, 1165, 1165, 1165, 700: 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 713: 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 765: 1165, 770: 1165, 884: 1165, 1165, 887: 1165, 889: 1165, 891: 1165, 895: 1165, 904: 1165, 1165, 1165},
{2: 1164, 1164, 1164, 1164, 1164, 1164, 1164, 10: 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 64: 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 585: 1164, 588: 1164, 1164, 1164, 595: 1164, 1164, 1164, 1164, 1164, 1164, 1164, 603: 1164, 1164, 606: 1164, 614: 1164, 627: 1164, 631: 1164, 637: 1164, 640: 1164, 663: 1164, 1164, 667: 1164, 1164, 1164, 1164, 1164, 687: 1164, 1164, 693: 1164, 695: 1164, 1164, 1164, 1164, 700: 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 713: 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 765: 1164, 770: 1164, 884: 1164, 1164, 887: 1164, 889: 1164, 891: 1164, 895: 1164, 904: 1164, 1164, 1164},
{2: 1163, 1163, 1163, 1163, 1163, 1163, 1163, 10: 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 64: 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 585: 1163, 588: 1163, 1163, 1163, 595: 1163, 1163, 1163, 1163, 1163, 1163, 1163, 603: 1163, 1163, 606: 1163, 614: 1163, 627: 1163, 631: 1163, 637: 1163, 640: 1163, 663: 1163, 1163, 667: 1163, 1163, 1163, 1163, 1163, 687: 1163, 1163, 693: 1163, 695: 1163, 1163, 1163, 1163, 700: 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 713: 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 765: 1163, 770: 1163, 884: 1163, 1163, 887: 1163, 889: 1163, 891: 1163, 895: 1163, 904: 1163, 1163, 1163},
// 4080
{2: 1162, 1162, 1162, 1162, 1162, 1162, 1162, 10: 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 64: 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 585: 1162, 588: 1162, 1162, 1162, 595: 1162, 1162, 1162, 1162, 1162, 1162, 1162, 603: 1162, 1162, 606: 1162, 614: 1162, 627: 1162, 631: 1162, 637: 1162, 640: 1162, 663: 1162, 1162, 667: 1162, 1162, 1162, 1162, 1162, 687: 1162, 1162, 693: 1162, 695: 1162, 1162, 1162, 1162, 700: 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 713: 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 765: 1162, 770: 1162, 884: 1162, 1162, 887: 1162, 889: 1162, 891: 1162, 895: 1162, 904: 1162, 1162, 1162},
{2: 1161, 1161, 1161, 1161, 1161, 1161, 1161, 10: 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 64: 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 585: 1161, 588: 1161, 1161, 1161, 595: 1161, 1161, 1161, 1161, 1161, 1161, 1161, 603: 1161, 1161, 606: 1161, 614: 1161, 627: 1161, 631: 1161, 637: 1161, 640: 1161, 663: 1161, 1161, 667: 1161, 1161, 1161, 1161, 1161, 687: 1161, 1161, 693: 1161, 695: 1161, 1161, 1161, 1161, 700: 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 713: 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 765: 1161, 770: 1161, 884: 1161, 1161, 887: 1161, 889: 1161, 891: 1161, 895: 1161, 904: 1161, 1161, 1161},
{2: 1160, 1160, 1160, 1160, 1160, 1160, 1160, 10: 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 64: 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 585: 1160, 588: 1160, 1160, 1160, 595: 1160, 1160, 1160, 1160, 1160, 1160, 1160, 603: 1160, 1160, 606: 1160, 614: 1160, 627: 1160, 631: 1160, 637: 1160, 640: 1160, 663: 1160, 1160, 667: 1160, 1160, 1160, 1160, 1160, 687: 1160, 1160, 693: 1160, 695: 1160, 1160, 1160, 1160, 700: 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 713: 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 765: 1160, 770: 1160, 884: 1160, 1160, 887: 1160, 889: 1160, 891: 1160, 895: 1160, 904: 1160, 1160, 1160},
{2: 1159, 1159, 1159, 1159, 1159, 1159, 1159, 10: 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 64: 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 585: 1159, 588: 1159, 1159, 1159, 595: 1159, 1159, 1159, 1159, 1159, 1159, 1159, 603: 1159, 1159, 606: 1159, 614: 1159, 627: 1159, 631: 1159, 637: 1159, 640: 1159, 663: 1159, 1159, 667: 1159, 1159, 1159, 1159, 1159, 687: 1159, 1159, 693: 1159, 695: 1159, 1159, 1159, 1159, 700: 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 713: 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 765: 1159, 770: 1159, 884: 1159, 1159, 887: 1159, 889: 1159, 891: 1159, 895: 1159, 904: 1159, 1159, 1159},
{2: 1158, 1158, 1158, 1158, 1158, 1158, 1158, 10: 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 64: 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 585: 1158, 588: 1158, 1158, 1158, 595: 1158, 1158, 1158, 1158, 1158, 1158, 1158, 603: 1158, 1158, 606: 1158, 614: 1158, 627: 1158, 631: 1158, 637: 1158, 640: 1158, 663: 1158, 1158, 667: 1158, 1158, 1158, 1158, 1158, 687: 1158, 1158, 693: 1158, 695: 1158, 1158, 1158, 1158, 700: 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 713: 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 765: 1158, 770: 1158, 884: 1158, 1158, 887: 1158, 889: 1158, 891: 1158, 895: 1158, 904: 1158, 1158, 1158},
// 4085
{2: 1157, 1157, 1157, 1157, 1157, 1157, 1157, 10: 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 64: 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 585: 1157, 588: 1157, 1157, 1157, 595: 1157, 1157, 1157, 1157, 1157, 1157, 1157, 603: 1157, 1157, 606: 1157, 614: 1157, 627: 1157, 631: 1157, 637: 1157, 640: 1157, 663: 1157, 1157, 667: 1157, 1157, 1157, 1157, 1157, 687: 1157, 1157, 693: 1157, 695: 1157, 1157, 1157, 1157, 700: 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 713: 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 765: 1157, 770: 1157, 884: 1157, 1157, 887: 1157, 889: 1157, 891: 1157, 895: 1157, 904: 1157, 1157, 1157},
{2: 1155, 1155, 1155, 1155, 1155, 1155, 1155, 10: 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 64: 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 7178, 7184, 7185, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 585: 1155, 588: 1155, 1155, 1155, 595: 1155, 1155, 1155, 1155, 1155, 1155, 1155, 603: 1155, 1155, 606: 1155, 614: 1155, 627: 7181, 631: 1155, 637: 1155, 640: 1155, 663: 1155, 1155, 667: 1155, 1155, 1155, 1155, 1155, 687: 1155, 1155, 693: 1155, 695: 1155, 1155, 1155, 1155, 700: 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 713: 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 765: 1155, 770: 4486, 884: 4484, 4485, 887: 6558, 889: 6560, 891: 6559, 895: 6555, 904: 7177, 7180, 7176, 943: 7103, 945: 7174, 1007: 7175, 1014: 7173, 1344: 7186, 7179},
{2: 1153, 1153, 1153, 1153, 1153, 1153, 1153, 10: 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 64: 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 585: 1153, 588: 1153, 1153, 1153, 595: 1153, 1153, 1153, 1153, 1153, 1153, 1153, 603: 1153, 1153, 606: 1153, 614: 1153, 627: 1153, 631: 1153, 637: 1153, 640: 1153, 663: 1153, 1153, 667: 1153, 1153, 1153, 1153, 1153, 687: 1153, 1153, 693: 1153, 695: 1153, 1153, 1153, 1153, 700: 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 713: 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 765: 1153, 770: 1153, 884: 1153, 1153, 887: 1153, 889: 1153, 891: 1153, 895: 1153, 904: 1153, 1153, 1153},
{2: 1149, 1149, 1149, 1149, 1149, 1149, 1149, 10: 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 64: 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 585: 1149, 588: 1149, 1149, 1149, 595: 1149, 1149, 1149, 1149, 1149, 1149, 1149, 603: 1149, 1149, 606: 1149, 614: 1149, 627: 1149, 631: 1149, 637: 1149, 640: 1149, 663: 1149, 1149, 667: 1149, 1149, 1149, 1149, 1149, 687: 1149, 1149, 693: 1149, 695: 1149, 1149, 1149, 1149, 700: 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 713: 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 765: 1149, 770: 1149, 884: 1149, 1149, 887: 1149, 889: 1149, 891: 1149, 895: 1149, 904: 1149, 1149, 1149},
{2: 1148, 1148, 1148, 1148, 1148, 1148, 1148, 10: 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 64: 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 585: 1148, 588: 1148, 1148, 1148, 595: 1148, 1148, 1148, 1148, 1148, 1148, 1148, 603: 1148, 1148, 606: 1148, 614: 1148, 627: 1148, 631: 1148, 637: 1148, 640: 1148, 663: 1148, 1148, 667: 1148, 1148, 1148, 1148, 1148, 687: 1148, 1148, 693: 1148, 695: 1148, 1148, 1148, 1148, 700: 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 713: 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 765: 1148, 770: 1148, 884: 1148, 1148, 887: 1148, 889: 1148, 891: 1148, 895: 1148, 904: 1148, 1148, 1148},
// 4090
{2: 1154, 1154, 1154, 1154, 1154, 1154, 1154, 10: 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 64: 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 585: 1154, 588: 1154, 1154, 1154, 595: 1154, 1154, 1154, 1154, 1154, 1154, 1154, 603: 1154, 1154, 606: 1154, 614: 1154, 627: 1154, 631: 1154, 637: 1154, 640: 1154, 663: 1154, 1154, 667: 1154, 1154, 1154, 1154, 1154, 687: 1154, 1154, 693: 1154, 695: 1154, 1154, 1154, 1154, 700: 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 713: 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 765: 1154, 770: 1154, 884: 1154, 1154, 887: 1154, 889: 1154, 891: 1154, 895: 1154, 904: 1154, 1154, 1154},
{1147, 1147, 9: 6702, 16: 1147, 63: 1147, 584: 1147, 586: 1147, 593: 1147, 1147, 607: 1147, 1147, 1147, 1147, 612: 1147, 1147, 615: 1147, 1147, 1147, 619: 1147, 625: 1147, 1147},
{2296, 2296, 16: 2296, 63: 2296, 584: 2296, 586: 2296, 593: 2296, 2296, 607: 2296, 2296, 2296, 2296, 612: 2296, 2296, 615: 2296, 2296, 2296, 619: 2296, 625: 2296, 7159, 1261: 7189},
{1321, 1321, 16: 1321, 63: 1321, 584: 1321, 586: 1321, 593: 1321, 1321, 607: 1321, 1321, 1321, 1321, 612: 1321, 1321, 615: 1321, 1321, 1321, 619: 1321, 625: 1321},
{1322, 1322},
// 4095
{1334, 1334},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 7205, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 7206, 3292, 3293, 3291},
{115: 7198, 324: 7197},
{1326, 1326},
{953: 7196},
// 4100
{1325, 1325},
{1328, 1328, 115: 7203},
{324: 7199},
{1327, 1327, 115: 7201, 953: 7200},
{1330, 1330},
// 4105
{953: 7202},
{1329, 1329},
{953: 7204},
{1331, 1331},
{2048, 2048, 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 7207, 3292, 3293, 3291},
// 4110
{1333, 1333},
{1332, 1332},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 7209, 3292, 3293, 3291},
{1338, 1338},
{1342, 1342, 594: 7211},
// 4115
{668: 3872, 831: 7213, 1583: 7212},
{1341, 1341, 9: 7214},
{1340, 1340, 9: 1340},
{668: 3872, 831: 7215},
{1339, 1339, 9: 1339},
// 4120
{617: 7217},
{585: 7219, 668: 3872, 831: 7220, 1505: 7218},
{1345, 1345},
{1344, 1344},
{1343, 1343},
// 4125
{2: 1360, 1360, 1360, 1360, 1360, 1360, 1360, 10: 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 64: 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 614: 1360, 616: 1360, 887: 6558, 889: 6560, 891: 6559, 1007: 6561, 1069: 7222},
{2: 1665, 1665, 1665, 1665, 1665, 1665, 1665, 10: 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 64: 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 614: 1665, 616: 7223, 1269: 7224},
{2: 1664, 1664, 1664, 1664, 1664, 1664, 1664, 10: 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 64: 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 614: 1664},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 7225},
{234: 1223, 583: 1223, 586: 1223, 6636, 600: 1223, 611: 1223, 642: 1223, 692: 1223, 1005: 7226},
// 4130
{234: 7234, 583: 7227, 586: 3149, 600: 7235, 611: 7233, 642: 3147, 692: 3143, 830: 7232, 861: 7230, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 4155, 7231, 7229, 1172: 7228, 1268: 7236},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 2815, 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 3150, 586: 3149, 600: 3148, 642: 3147, 692: 3143, 826: 4336, 3292, 3293, 3291, 5044, 861: 4156, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 4155, 4158, 4157, 876: 4337, 959: 6163, 1198: 7246},
{583: 4202, 1010: 5850, 1170: 7245},
{1657, 1657, 16: 1657, 584: 1657, 594: 1657},
{1656, 1656, 16: 1656, 584: 1656, 593: 1113, 1656, 607: 1113, 1113},
// 4135
{1655, 1655, 16: 1655, 584: 1655, 594: 1655},
{1654, 1654, 16: 1654, 584: 1654, 593: 1112, 1654, 607: 1112, 1112, 610: 4168, 612: 4167, 619: 4166, 897: 4169, 4170},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4336, 3292, 3293, 3291, 876: 7238, 1422: 7237},
{583: 1652},
{583: 1651, 695: 4201, 1103: 4200, 1171: 4199},
// 4140
{1635, 1635, 594: 1635},
{1653, 1653, 9: 7241, 16: 1653, 584: 1653, 594: 1653},
{605: 6719, 772: 6720, 946: 7239},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 4208, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4204, 947: 7240},
{1641, 1641, 9: 1641, 16: 1641, 584: 1641, 594: 1641},
// 4145
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4336, 3292, 3293, 3291, 876: 7242},
{605: 6719, 772: 6720, 946: 7243},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 4208, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4204, 947: 7244},
{1640, 1640, 9: 1640, 16: 1640, 584: 1640, 594: 1640},
{1658, 1658, 9: 5851, 16: 1658, 584: 1658, 594: 1658},
// 4150
{63: 7247},
{234: 7234, 583: 3150, 586: 3149, 600: 7235, 642: 3147, 692: 3143, 830: 7252, 861: 7250, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 4155, 7251, 7249, 1172: 7248},
{583: 4202, 1010: 5850, 1170: 7253},
{1662, 1662, 16: 1662, 584: 1662, 594: 1662},
{1661, 1661, 16: 1661, 584: 1661, 593: 1113, 1661, 607: 1113, 1113},
// 4155
{1660, 1660, 16: 1660, 584: 1660, 594: 1660},
{1659, 1659, 16: 1659, 584: 1659, 593: 1112, 1659, 607: 1112, 1112, 610: 4168, 612: 4167, 619: 4166, 897: 4169, 4170},
{1663, 1663, 9: 5851, 16: 1663, 584: 1663, 594: 1663},
{2: 1360, 1360, 1360, 1360, 1360, 1360, 1360, 10: 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 64: 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 602: 1360, 614: 1360, 616: 1360, 887: 6558, 889: 6560, 891: 6559, 1007: 6561, 1069: 7255},
{2: 2287, 2287, 2287, 2287, 2287, 2287, 2287, 10: 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 64: 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 602: 5053, 614: 2287, 616: 2287, 1032: 7256},
// 4160
{2: 1665, 1665, 1665, 1665, 1665, 1665, 1665, 10: 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 64: 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 614: 1665, 616: 7223, 1269: 7257},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 7258},
{234: 1223, 583: 1223, 586: 1223, 6636, 600: 1223, 611: 1223, 642: 1223, 692: 1223, 1005: 7259},
{234: 7234, 583: 7227, 586: 3149, 600: 7235, 611: 7233, 642: 3147, 692: 3143, 830: 7232, 861: 7230, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 4155, 7231, 7229, 1172: 7228, 1268: 7260},
{1639, 1639, 16: 1639, 584: 7262, 594: 1639, 1483: 7261},
// 4165
{1637, 1637, 16: 6695, 594: 1637, 1102: 7267},
{342: 7263},
{699: 7264},
{766: 7265},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4336, 3292, 3293, 3291, 876: 6687, 1083: 6688, 1113: 7266},
// 4170
{1638, 1638, 9: 6690, 16: 1638, 594: 1638},
{1666, 1666, 594: 1666},
{1670, 1670, 583: 7276, 769: 2253},
{1671, 1671},
{769: 7271},
// 4175
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 7272, 3292, 3293, 3291},
{1669, 1669, 583: 7273},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 2356, 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4151, 909: 4657, 977: 7274},
{63: 7275},
{1667, 1667},
// 4180
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 2356, 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 4151, 909: 4657, 977: 7277},
{63: 7278},
{1668, 1668},
{2: 2526, 2526, 2526, 2526, 2526, 2526, 2526, 10: 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 64: 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 2526, 589: 2526, 592: 2526, 606: 2526, 611: 2526, 614: 2526, 631: 2526, 763: 2526},
{617: 7382},
// 4185
{617: 7290},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 7285, 826: 6553, 3292, 3293, 3291, 966: 7287, 1432: 7286},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 4238, 939: 7284},
{9: 4240, 617: 2447, 767: 2447},
{617: 2449, 767: 2449},
// 4190
{9: 7288, 617: 2448, 767: 2448},
{9: 2446, 617: 2446, 767: 2446},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 6553, 3292, 3293, 3291, 966: 7289},
{9: 2445, 617: 2445, 767: 2445},
{585: 7291},
// 4195
{2444, 2444, 19: 2444, 70: 2444, 73: 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 584: 2444, 768: 2444, 1022: 7292},
{2450, 2450, 19: 7328, 70: 7315, 73: 7295, 7324, 7317, 7300, 7296, 7297, 7314, 7294, 7304, 7312, 7327, 7303, 7313, 7311, 7305, 7316, 7330, 7334, 7308, 7325, 7309, 7318, 7299, 7326, 7331, 7298, 7301, 7332, 7302, 7310, 7333, 7306, 7307, 584: 7319, 768: 7329, 1018: 7321, 7320, 7323, 7293, 1023: 7322},
{2443, 2443, 19: 2443, 70: 2443, 73: 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 584: 2443, 768: 2443},
{604: 2442, 2442},
{604: 2441, 2441},
// 4200
{604: 2440, 2440},
{604: 2439, 2439},
{604: 2438, 2438, 667: 2438, 669: 2438},
{604: 2437, 2437, 667: 2437, 669: 2437},
{604: 2436, 2436, 667: 2436, 669: 2436},
// 4205
{604: 2435, 2435, 667: 2435, 669: 2435},
{604: 2434, 2434, 667: 2434, 669: 2434},
{604: 2433, 2433, 667: 2433, 669: 2433},
{604: 2432, 2432, 667: 2432, 669: 2432},
{604: 2431, 2431, 667: 2431, 669: 2431},
// 4210
{604: 2430, 2430, 667: 2430, 669: 2430},
{604: 2429, 2429, 667: 2429, 669: 2429},
{604: 2428, 2428, 667: 2428, 669: 2428},
{604: 2427, 2427, 667: 2427, 669: 2427},
{585: 2426, 605: 2426},
// 4215
{585: 2425, 605: 2425},
{585: 2424, 605: 2424},
{585: 2423, 605: 2423},
{585: 2422, 605: 2422},
{585: 2421, 605: 2421},
// 4220
{585: 2420, 605: 2420},
{2: 2419, 2419, 2419, 2419, 2419, 2419, 2419, 10: 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 64: 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419, 585: 2419, 602: 2419, 2419, 605: 2419},
{2: 2418, 2418, 2418, 2418, 2418, 2418, 2418, 10: 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 64: 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418, 585: 2418, 602: 2418, 2418, 605: 2418},
{342: 7381},
{604: 2504, 4917, 855: 7379},
// 4225
{604: 2504, 4917, 667: 2504, 669: 2504, 855: 7377},
{585: 2504, 605: 4917, 855: 7375},
{2: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 10: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 64: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 585: 2504, 602: 2504, 2504, 605: 4917, 855: 7370},
{585: 2504, 604: 2504, 4917, 855: 7365},
{585: 2504, 604: 2504, 4917, 855: 7362},
// 4230
{604: 2504, 4917, 855: 7357},
{157: 2504, 184: 2504, 604: 2504, 4917, 855: 7354},
{251: 2504, 277: 2504, 279: 2504, 604: 2504, 4917, 667: 2504, 669: 2504, 855: 7351},
{251: 2504, 277: 2504, 279: 2504, 604: 2504, 4917, 667: 2504, 669: 2504, 855: 7345},
{585: 2504, 605: 4917, 855: 7343},
// 4235
{585: 2504, 605: 4917, 855: 7341},
{585: 2504, 605: 4917, 855: 7339},
{585: 2504, 605: 4917, 855: 7337},
{585: 2504, 605: 4917, 855: 7335},
{585: 7336},
// 4240
{2396, 2396, 19: 2396, 70: 2396, 73: 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 2396, 584: 2396, 768: 2396},
{585: 7338},
{2397, 2397, 19: 2397, 70: 2397, 73: 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 2397, 584: 2397, 768: 2397},
{585: 7340},
{2398, 2398, 19: 2398, 70: 2398, 73: 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 2398, 584: 2398, 768: 2398},
// 4245
{585: 7342},
{2399, 2399, 19: 2399, 70: 2399, 73: 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 2399, 584: 2399, 768: 2399},
{585: 7344},
{2400, 2400, 19: 2400, 70: 2400, 73: 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 2400, 584: 2400, 768: 2400},
{251: 7348, 277: 7349, 279: 7350, 604: 3284, 667: 4971, 669: 4972, 854: 4970, 1044: 7346, 1300: 7347},
// 4250
{2402, 2402, 19: 2402, 70: 2402, 73: 2402, 2402, 2402, 2402, 2402, 2402, 2402, 2402, 2402, 2402, 2402, 2402, 2402, 2402, 2402, 2402, 2402, 2402, 2402, 2402, 2402, 2402, 2402, 2402, 2402, 2402, 2402, 2402, 2402, 2402, 2402, 2402, 2402, 584: 2402, 768: 2402},
{2401, 2401, 19: 2401, 70: 2401, 73: 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401, 584: 2401, 768: 2401},
{2389, 2389, 19: 2389, 70: 2389, 73: 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389, 584: 2389, 768: 2389},
{2388, 2388, 19: 2388, 70: 2388, 73: 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 2388, 584: 2388, 768: 2388},
{2387, 2387, 19: 2387, 70: 2387, 73: 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 2387, 584: 2387, 768: 2387},
// 4255
{251: 7348, 277: 7349, 279: 7350, 604: 3284, 667: 4971, 669: 4972, 854: 4970, 1044: 7352, 1300: 7353},
{2404, 2404, 19: 2404, 70: 2404, 73: 2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404, 2404, 584: 2404, 768: 2404},
{2403, 2403, 19: 2403, 70: 2403, 73: 2403, 2403, 2403, 2403, 2403, 2403, 2403, 2403, 2403, 2403, 2403, 2403, 2403, 2403, 2403, 2403, 2403, 2403, 2403, 2403, 2403, 2403, 2403, 2403, 2403, 2403, 2403, 2403, 2403, 2403, 2403, 2403, 2403, 584: 2403, 768: 2403},
{157: 4262, 184: 4261, 604: 3284, 854: 4175, 865: 7356, 998: 7355},
{2406, 2406, 19: 2406, 70: 2406, 73: 2406, 2406, 2406, 2406, 2406, 2406, 2406, 2406, 2406, 2406, 2406, 2406, 2406, 2406, 2406, 2406, 2406, 2406, 2406, 2406, 2406, 2406, 2406, 2406, 2406, 2406, 2406, 2406, 2406, 2406, 2406, 2406, 2406, 584: 2406, 768: 2406},
// 4260
{2405, 2405, 19: 2405, 70: 2405, 73: 2405, 2405, 2405, 2405, 2405, 2405, 2405, 2405, 2405, 2405, 2405, 2405, 2405, 2405, 2405, 2405, 2405, 2405, 2405, 2405, 2405, 2405, 2405, 2405, 2405, 2405, 2405, 2405, 2405, 2405, 2405, 2405, 2405, 584: 2405, 768: 2405},
{604: 3284, 854: 4175, 865: 7358},
{300: 7359},
{672: 7360},
{165: 7361},
// 4265
{2407, 2407, 19: 2407, 70: 2407, 73: 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 2407, 584: 2407, 768: 2407},
{585: 7363, 604: 3284, 854: 4175, 865: 7364},
{2409, 2409, 19: 2409, 70: 2409, 73: 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409, 2409, 584: 2409, 768: 2409},
{2408, 2408, 19: 2408, 70: 2408, 73: 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 2408, 584: 2408, 768: 2408},
{585: 7367, 604: 3284, 854: 4175, 865: 7366},
// 4270
{2410, 2410, 19: 2410, 70: 2410, 73: 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410, 133: 4076, 139: 4084, 163: 4072, 165: 4069, 4071, 4068, 4070, 4074, 4075, 4080, 4079, 4078, 4082, 4083, 4077, 4081, 4073, 584: 2410, 768: 2410, 944: 7368},
{2411, 2411, 19: 2411, 70: 2411, 73: 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411, 584: 2411, 768: 2411},
{410: 7369},
{2412, 2412, 19: 2412, 70: 2412, 73: 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 2412, 584: 2412, 768: 2412},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 602: 7373, 7374, 826: 4046, 3292, 3293, 3291, 860: 7372, 1563: 7371},
// 4275
{2413, 2413, 19: 2413, 70: 2413, 73: 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413, 584: 2413, 768: 2413},
{490, 490, 19: 490, 70: 490, 73: 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 584: 490, 768: 490},
{489, 489, 19: 489, 70: 489, 73: 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 584: 489, 768: 489},
{488, 488, 19: 488, 70: 488, 73: 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 584: 488, 768: 488},
{585: 7376},
// 4280
{2414, 2414, 19: 2414, 70: 2414, 73: 2414, 2414, 2414, 2414, 2414, 2414, 2414, 2414, 2414, 2414, 2414, 2414, 2414, 2414, 2414, 2414, 2414, 2414, 2414, 2414, 2414, 2414, 2414, 2414, 2414, 2414, 2414, 2414, 2414, 2414, 2414, 2414, 2414, 584: 2414, 768: 2414},
{604: 3284, 667: 4971, 669: 4972, 854: 4970, 1044: 7378},
{2415, 2415, 19: 2415, 70: 2415, 73: 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 2415, 584: 2415, 768: 2415},
{604: 3284, 854: 4175, 865: 7380},
{2416, 2416, 19: 2416, 70: 2416, 73: 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416, 584: 2416, 768: 2416},
// 4285
{2: 2417, 2417, 2417, 2417, 2417, 2417, 2417, 10: 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 64: 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 2417, 585: 2417, 602: 2417, 2417, 605: 2417},
{585: 7383},
{2444, 2444, 19: 2444, 70: 2444, 73: 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 584: 2444, 768: 2444, 1022: 7384},
{2451, 2451, 19: 7328, 70: 7315, 73: 7295, 7324, 7317, 7300, 7296, 7297, 7314, 7294, 7304, 7312, 7327, 7303, 7313, 7311, 7305, 7316, 7330, 7334, 7308, 7325, 7309, 7318, 7299, 7326, 7331, 7298, 7301, 7332, 7302, 7310, 7333, 7306, 7307, 584: 7319, 768: 7329, 1018: 7321, 7320, 7323, 7293, 1023: 7322},
{191: 7582, 363: 7583},
// 4290
{227: 7578},
{877, 877, 609: 7575, 633: 7574, 1543: 7573},
{20: 7558, 33: 7557, 62: 7559, 161: 7560, 7555, 642: 7554, 700: 7556, 1035: 7561},
{464: 7550},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 7537, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 7538},
// 4295
{962, 962, 613: 7532},
{181: 7531},
{449: 7529},
{181: 7528},
{157: 4262, 182: 7523, 184: 4261, 305: 7522, 998: 7524},
// 4300
{956, 956},
{944, 944, 274: 7504, 318: 7505, 329: 7506, 332: 7503, 358: 7508, 368: 7507, 386: 7510, 391: 7509, 610: 944, 612: 944, 944, 770: 7511, 1350: 7502, 1546: 7501, 7500},
{954, 954},
{953, 953},
{883, 883, 359: 7492, 609: 883, 613: 7491, 633: 883},
// 4305
{604: 3284, 854: 4867, 880: 7490},
{217: 7488, 227: 7487},
{617: 927, 661: 927},
{617: 926, 661: 926},
{617: 925, 661: 925},
// 4310
{922, 922, 609: 922, 633: 922},
{921, 921, 609: 921, 633: 921},
{920, 920, 609: 920, 633: 920},
{919, 919, 609: 919, 633: 919},
{182: 7485},
// 4315
{617: 7457, 661: 7458, 961: 7480},
{157: 863, 184: 863, 216: 7443, 1296: 7474},
{583: 7469},
{910, 910, 609: 910, 633: 910},
{908, 908, 609: 908, 633: 908},
// 4320
{181: 7467, 224: 7468, 287: 7466},
{904, 904, 609: 904, 633: 904},
{861, 861, 609: 861, 617: 7457, 633: 861, 661: 7458, 961: 7460, 1012: 7465},
{181: 7464},
{181: 7463},
// 4325
{181: 7462},
{861, 861, 609: 861, 617: 7457, 633: 861, 661: 7458, 961: 7460, 1012: 7459},
{898, 898, 609: 898, 633: 898},
{897, 897, 609: 897, 633: 897},
{896, 896, 609: 896, 633: 896},
// 4330
{895, 895, 609: 895, 633: 895},
{894, 894, 609: 894, 633: 894},
{893, 893, 609: 893, 633: 893},
{892, 892, 609: 892, 633: 892},
{891, 891, 609: 891, 633: 891},
// 4335
{890, 890, 609: 890, 633: 890},
{889, 889, 609: 889, 633: 889},
{888, 888, 609: 888, 633: 888},
{887, 887, 609: 887, 633: 887},
{181: 7456},
// 4340
{885, 885, 609: 885, 633: 885},
{884, 884, 609: 884, 633: 884},
{217: 7454, 227: 7453, 625: 7452, 648: 7451},
{879, 879, 609: 879, 633: 879},
{155: 7448},
// 4345
{181: 869, 224: 869, 287: 869},
{181: 868, 224: 868, 247: 868, 287: 868},
{157: 862, 182: 862, 184: 862, 305: 862},
{181: 858},
{181: 857},
// 4350
{217: 7447},
{148, 148},
{217: 7450, 227: 7449},
{604: 873},
{871, 871, 609: 871, 633: 871},
// 4355
{881, 881, 609: 881, 633: 881},
{585: 7455},
{604: 874},
{872, 872, 609: 872, 633: 872},
{880, 880, 609: 880, 633: 880},
// 4360
{886, 886, 609: 886, 633: 886},
{2: 924, 924, 924, 924, 924, 924, 924, 10: 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 64: 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 614: 924},
{2: 923, 923, 923, 923, 923, 923, 923, 10: 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 64: 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, 614: 923},
{899, 899, 609: 899, 633: 899},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 6553, 3292, 3293, 3291, 966: 7461},
// 4365
{860, 860, 609: 860, 633: 860},
{900, 900, 609: 900, 633: 900},
{901, 901, 609: 901, 633: 901},
{902, 902, 609: 902, 633: 902},
{903, 903, 609: 903, 633: 903},
// 4370
{907, 907, 609: 907, 633: 907},
{906, 906, 609: 906, 633: 906},
{905, 905, 609: 905, 633: 905},
{614: 7470},
{63: 7471},
// 4375
{352: 7473, 407: 7472},
{911, 911, 609: 911, 633: 911},
{909, 909, 609: 909, 633: 909},
{157: 4262, 184: 4261, 998: 7475},
{617: 7457, 661: 7458, 961: 7477, 1352: 7476},
// 4380
{861, 861, 609: 861, 617: 7457, 633: 861, 661: 7458, 961: 7460, 1012: 7479},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 7478},
{859, 859, 609: 859, 617: 859, 633: 859, 661: 859},
{912, 912, 609: 912, 633: 912},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 7481, 3292, 3293, 3291, 859: 7482},
// 4385
{1358, 1358, 609: 1358, 617: 7457, 633: 1358, 661: 7458, 769: 4244, 961: 7483},
{915, 915, 609: 915, 633: 915},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 7484, 3292, 3293, 3291},
{914, 914, 609: 914, 633: 914},
{861, 861, 609: 861, 617: 7457, 633: 861, 661: 7458, 961: 7460, 1012: 7486},
// 4390
{917, 917, 609: 917, 633: 917},
{604: 3284, 854: 4867, 880: 7489},
{878, 878, 609: 878, 633: 878},
{950, 950},
{951, 951},
// 4395
{642: 7495, 700: 7279, 997: 7494, 1544: 7493},
{882, 882, 609: 882, 633: 882},
{952, 952},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 6553, 3292, 3293, 3291, 966: 7499},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 7496},
// 4400
{946, 946, 587: 7497},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 7498, 3292, 3293, 3291},
{945, 945},
{947, 947},
{931, 931, 610: 931, 612: 931, 7518, 1545: 7517},
// 4405
{943, 943, 9: 7515, 610: 943, 612: 943, 943},
{942, 942, 9: 942, 610: 942, 612: 942, 942},
{940, 940, 9: 940, 610: 940, 612: 940, 940},
{939, 939, 9: 939, 610: 939, 612: 939, 939},
{445: 7514},
// 4410
{486: 7513},
{438: 7512},
{935, 935, 9: 935, 610: 935, 612: 935, 935},
{934, 934, 9: 934, 610: 934, 612: 934, 934},
{933, 933, 9: 933, 610: 933, 612: 933, 933},
// 4415
{932, 932, 9: 932, 610: 932, 612: 932, 932},
{936, 936, 9: 936, 610: 936, 612: 936, 936},
{937, 937, 9: 937, 610: 937, 612: 937, 937},
{938, 938, 9: 938, 610: 938, 612: 938, 938},
{274: 7504, 318: 7505, 329: 7506, 332: 7503, 358: 7508, 368: 7507, 386: 7510, 391: 7509, 770: 7511, 1350: 7516},
// 4420
{941, 941, 9: 941, 610: 941, 612: 941, 941},
{1167, 1167, 610: 4168, 612: 4167, 898: 4225, 990: 7521},
{196: 7519},
{604: 3284, 854: 4867, 880: 7520},
{930, 930, 610: 930, 612: 930},
// 4425
{955, 955},
{957, 957},
{861, 861, 609: 861, 617: 7457, 633: 861, 661: 7458, 961: 7460, 1012: 7527},
{617: 7457, 661: 7458, 961: 7477, 1352: 7525},
{861, 861, 609: 861, 617: 7457, 633: 861, 661: 7458, 961: 7460, 1012: 7526},
// 4430
{913, 913, 609: 913, 633: 913},
{918, 918, 609: 918, 633: 918},
{958, 958},
{181: 7530},
{959, 959},
// 4435
{960, 960},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 687: 6429, 826: 4046, 3292, 3293, 3291, 860: 6428, 910: 7533},
{929, 929, 594: 7535, 1584: 7534},
{961, 961},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 6962, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 6967, 826: 4046, 3292, 3293, 3291, 860: 6383, 954: 6969, 981: 6970, 6968, 1037: 7536},
// 4440
{928, 928, 9: 6971},
{861, 861, 132: 2142, 250: 2142, 292: 2142, 587: 2142, 609: 861, 617: 7457, 633: 861, 661: 7458, 764: 2142, 769: 2142, 961: 7460, 1012: 7549},
{132: 1223, 250: 7540, 292: 1223, 587: 6636, 764: 1223, 1005: 7539},
{132: 7541, 292: 7543, 764: 7542},
{964, 964},
// 4445
{481, 481, 609: 5030, 941: 5031, 7548},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 7545, 3292, 3293, 3291},
{481, 481, 609: 5030, 941: 5031, 7544},
{948, 948},
{132: 7546},
// 4450
{481, 481, 609: 5030, 941: 5031, 7547},
{963, 963},
{965, 965},
{916, 916, 609: 916, 633: 916},
{613: 7551},
// 4455
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 7552},
{481, 481, 609: 5030, 941: 5031, 7553},
{966, 966},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 7572},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 7571},
// 4460
{2: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 10: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 64: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 631: 5806, 915: 7569},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 7568},
{195: 7566},
{625: 7564},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 687: 6429, 826: 4046, 3292, 3293, 3291, 860: 6428, 910: 7563},
// 4465
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 7562},
{949, 949},
{967, 967},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 589: 3289, 826: 3288, 3292, 3293, 3291, 980: 7565},
{968, 968},
// 4470
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5738, 3292, 3293, 3291, 963: 7567},
{969, 969},
{970, 970},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 6553, 3292, 3293, 3291, 966: 7570},
{971, 971},
// 4475
{972, 972},
{973, 973},
{974, 974},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 3872, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 3963, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 7577, 3944, 4026, 3943, 3940},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 7576},
// 4480
{875, 875, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{876, 876, 592: 4039, 762: 4040},
{196: 7580, 604: 3284, 854: 4867, 880: 7579},
{2455, 2455},
{604: 3284, 854: 4867, 880: 7581},
// 4485
{2454, 2454},
{181: 7586, 363: 7587},
{617: 7584},
{585: 7585},
{2452, 2452},
// 4490
{2457, 2457},
{617: 7588},
{585: 7589},
{2456, 2456},
{191: 7591},
// 4495
{617: 7592},
{585: 7593},
{2444, 2444, 19: 2444, 70: 2444, 73: 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 584: 2444, 768: 2444, 1022: 7594},
{2458, 2458, 19: 7328, 70: 7315, 73: 7295, 7324, 7317, 7300, 7296, 7297, 7314, 7294, 7304, 7312, 7327, 7303, 7313, 7311, 7305, 7316, 7330, 7334, 7308, 7325, 7309, 7318, 7299, 7326, 7331, 7298, 7301, 7332, 7302, 7310, 7333, 7306, 7307, 584: 7319, 768: 7329, 1018: 7321, 7320, 7323, 7293, 1023: 7322},
{191: 7596},
// 4500
{2459, 2459},
{191: 7598},
{2444, 2444, 19: 2444, 70: 2444, 73: 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 584: 2444, 768: 2444, 1022: 7599},
{2460, 2460, 19: 7328, 70: 7315, 73: 7295, 7324, 7317, 7300, 7296, 7297, 7314, 7294, 7304, 7312, 7327, 7303, 7313, 7311, 7305, 7316, 7330, 7334, 7308, 7325, 7309, 7318, 7299, 7326, 7331, 7298, 7301, 7332, 7302, 7310, 7333, 7306, 7307, 584: 7319, 768: 7329, 1018: 7321, 7320, 7323, 7293, 1023: 7322},
{191: 7601},
// 4505
{2461, 2461},
{767: 7607},
{767: 7604},
{585: 7605},
{2444, 2444, 19: 2444, 70: 2444, 73: 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 584: 2444, 768: 2444, 1022: 7606},
// 4510
{2462, 2462, 19: 7328, 70: 7315, 73: 7295, 7324, 7317, 7300, 7296, 7297, 7314, 7294, 7304, 7312, 7327, 7303, 7313, 7311, 7305, 7316, 7330, 7334, 7308, 7325, 7309, 7318, 7299, 7326, 7331, 7298, 7301, 7332, 7302, 7310, 7333, 7306, 7307, 584: 7319, 768: 7329, 1018: 7321, 7320, 7323, 7293, 1023: 7322},
{585: 7608},
{2444, 2444, 19: 2444, 70: 2444, 73: 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 584: 2444, 768: 2444, 1022: 7609},
{2463, 2463, 19: 7328, 70: 7315, 73: 7295, 7324, 7317, 7300, 7296, 7297, 7314, 7294, 7304, 7312, 7327, 7303, 7313, 7311, 7305, 7316, 7330, 7334, 7308, 7325, 7309, 7318, 7299, 7326, 7331, 7298, 7301, 7332, 7302, 7310, 7333, 7306, 7307, 584: 7319, 768: 7329, 1018: 7321, 7320, 7323, 7293, 1023: 7322},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 7611, 3292, 3293, 3291},
// 4515
{2464, 2464},
{2465, 2465},
{2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 10: 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 64: 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 585: 7656, 600: 3148, 642: 3147, 692: 3143, 768: 7657, 2188, 861: 7655, 3144, 3145, 3146},
{2490, 2490, 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4336, 3292, 3293, 3291, 876: 7654},
{2488, 2488},
// 4520
{2487, 2487},
{32: 7652},
{2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 10: 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 64: 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 605: 7639, 769: 2180},
{155: 3269, 269: 7623, 583: 3150, 585: 7622, 3149, 600: 3148, 603: 3134, 640: 3133, 642: 3147, 692: 3143, 766: 3263, 777: 5013, 830: 5015, 858: 3114, 861: 5016, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 3117, 5022, 5021, 877: 3262, 3115, 5019, 881: 5020, 5018, 890: 3116, 894: 5017, 964: 5023, 967: 5024, 985: 7621},
{1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 10: 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 64: 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 616: 6302, 769: 1975},
// 4525
{2479, 2479},
{2478, 2478},
{605: 7624},
{185: 7628, 320: 7631, 340: 7630, 392: 7634, 404: 7627, 7633, 7632, 585: 7626, 695: 7629, 1244: 7625},
{155: 3269, 583: 3150, 585: 7638, 3149, 600: 3148, 603: 3134, 640: 3133, 642: 3147, 692: 3143, 766: 3263, 777: 5013, 830: 5015, 858: 3114, 861: 5016, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 3117, 5022, 5021, 877: 3262, 3115, 5019, 881: 5020, 5018, 890: 3116, 894: 5017, 964: 5023, 967: 5024, 985: 7637},
// 4530
{155: 3269, 583: 3150, 585: 7635, 3149, 600: 3148, 603: 3134, 640: 3133, 642: 3147, 692: 3143, 766: 3263, 777: 5013, 830: 5015, 858: 3114, 861: 5016, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 3117, 5022, 5021, 877: 3262, 3115, 5019, 881: 5020, 5018, 890: 3116, 894: 5017, 964: 5023, 967: 5024, 985: 7636},
{155: 2473, 583: 2473, 585: 2473, 2473, 600: 2473, 603: 2473, 613: 2473, 640: 2473, 642: 2473, 692: 2473, 766: 2473, 777: 2473, 858: 2473},
{155: 2472, 583: 2472, 585: 2472, 2472, 600: 2472, 603: 2472, 613: 2472, 640: 2472, 642: 2472, 692: 2472, 766: 2472, 777: 2472, 858: 2472},
{155: 2471, 583: 2471, 585: 2471, 2471, 600: 2471, 603: 2471, 613: 2471, 640: 2471, 642: 2471, 692: 2471, 766: 2471, 777: 2471, 858: 2471},
{155: 2470, 583: 2470, 585: 2470, 2470, 600: 2470, 603: 2470, 613: 2470, 640: 2470, 642: 2470, 692: 2470, 766: 2470, 777: 2470, 858: 2470},
// 4535
{155: 2469, 583: 2469, 585: 2469, 2469, 600: 2469, 603: 2469, 613: 2469, 640: 2469, 642: 2469, 692: 2469, 766: 2469, 777: 2469, 858: 2469},
{155: 2468, 583: 2468, 585: 2468, 2468, 600: 2468, 603: 2468, 613: 2468, 640: 2468, 642: 2468, 692: 2468, 766: 2468, 777: 2468, 858: 2468},
{155: 2467, 583: 2467, 585: 2467, 2467, 600: 2467, 603: 2467, 613: 2467, 640: 2467, 642: 2467, 692: 2467, 766: 2467, 777: 2467, 858: 2467},
{155: 2466, 583: 2466, 585: 2466, 2466, 600: 2466, 603: 2466, 613: 2466, 640: 2466, 642: 2466, 692: 2466, 766: 2466, 777: 2466, 858: 2466},
{2475, 2475},
// 4540
{2474, 2474},
{2477, 2477},
{2476, 2476},
{185: 7628, 320: 7631, 340: 7630, 392: 7634, 404: 7627, 7633, 7632, 585: 7640, 695: 7629, 1244: 7641},
{155: 3269, 583: 3150, 585: 7649, 3149, 600: 3148, 603: 3134, 613: 7647, 640: 3133, 642: 3147, 692: 3143, 766: 3263, 777: 5013, 830: 5015, 858: 3114, 861: 5016, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 3117, 5022, 5021, 877: 3262, 3115, 5019, 881: 5020, 5018, 890: 3116, 894: 5017, 964: 5023, 967: 5024, 985: 7648},
// 4545
{155: 3269, 583: 3150, 585: 7644, 3149, 600: 3148, 603: 3134, 613: 7642, 640: 3133, 642: 3147, 692: 3143, 766: 3263, 777: 5013, 830: 5015, 858: 3114, 861: 5016, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 3117, 5022, 5021, 877: 3262, 3115, 5019, 881: 5020, 5018, 890: 3116, 894: 5017, 964: 5023, 967: 5024, 985: 7643},
{32: 7645},
{2482, 2482},
{2481, 2481},
{604: 3284, 854: 7646},
// 4550
{2483, 2483},
{32: 7650},
{2484, 2484},
{2480, 2480},
{604: 3284, 854: 7651},
// 4555
{2485, 2485},
{604: 3284, 854: 7653},
{2486, 2486},
{2489, 2489},
{2494, 2494},
// 4560
{2493, 2493},
{585: 7659, 600: 3148, 642: 3147, 692: 3143, 861: 7658, 3144, 3145, 3146},
{2492, 2492},
{2491, 2491},
{2501, 2501},
// 4565
{605: 7686},
{113: 3107, 3110, 116: 3139, 3108, 242: 3123, 489: 7682, 583: 3150, 586: 3149, 600: 3148, 603: 3134, 611: 7665, 640: 3133, 642: 3147, 692: 3143, 766: 3263, 768: 3106, 830: 7663, 858: 3114, 861: 7664, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 3117, 7671, 7670, 877: 3262, 3115, 7668, 881: 7669, 7667, 890: 3116, 894: 7666, 900: 7679, 7674, 7677, 7678, 953: 3124, 969: 7680, 1017: 7673, 1034: 7672, 1036: 7676, 1038: 7675, 1108: 7681},
{721, 721, 593: 1112, 607: 1112, 1112, 610: 4168, 612: 4167, 619: 4166, 897: 4169, 4170},
{723, 723, 593: 1113, 607: 1113, 1113},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 6931, 6926, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 6932, 64: 3299, 3290, 3528, 3661, 3662, 6929, 3684, 6928, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 6934, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 6937, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 6927, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 6938, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 6935, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 6930, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 606: 4739, 668: 6944, 710: 6943, 763: 4737, 826: 6941, 3292, 3293, 3291, 908: 6945, 983: 6942, 1173: 6946, 1384: 6939},
// 4570
{728, 728},
{727, 727},
{726, 726},
{725, 725},
{724, 724},
// 4575
{722, 722},
{720, 720},
{719, 719},
{718, 718},
{717, 717},
// 4580
{716, 716},
{715, 715},
{714, 714},
{713, 713},
{26: 6343},
// 4585
{2499, 2499},
{605: 7683},
{585: 7684},
{113: 3107, 3110, 116: 3139, 3108, 242: 3123, 583: 3150, 586: 3149, 600: 3148, 603: 3134, 611: 7665, 640: 3133, 642: 3147, 692: 3143, 766: 3263, 768: 3106, 830: 7663, 858: 3114, 861: 7664, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 3117, 7671, 7670, 877: 3262, 3115, 7668, 881: 7669, 7667, 890: 3116, 894: 7666, 900: 7679, 7674, 7677, 7678, 953: 3124, 969: 7680, 1017: 7673, 1034: 7672, 1036: 7676, 1038: 7675, 1108: 7685},
{2498, 2498},
// 4590
{585: 7687},
{113: 3107, 3110, 116: 3139, 3108, 242: 3123, 583: 3150, 586: 3149, 600: 3148, 603: 3134, 611: 7665, 640: 3133, 642: 3147, 692: 3143, 766: 3263, 768: 3106, 830: 7663, 858: 3114, 861: 7664, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 3117, 7671, 7670, 877: 3262, 3115, 7668, 881: 7669, 7667, 890: 3116, 894: 7666, 900: 7679, 7674, 7677, 7678, 953: 3124, 969: 7680, 1017: 7673, 1034: 7672, 1036: 7676, 1038: 7675, 1108: 7688},
{2500, 2500},
{2: 1360, 1360, 1360, 1360, 1360, 1360, 1360, 10: 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 64: 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 602: 1360, 617: 1360, 887: 6558, 889: 6560, 891: 6559, 1007: 6561, 1069: 7690},
{2: 1347, 1347, 1347, 1347, 1347, 1347, 1347, 10: 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 64: 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 7012, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 602: 1347, 617: 1347, 1322: 7691},
// 4595
{2: 2287, 2287, 2287, 2287, 2287, 2287, 2287, 10: 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 64: 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 602: 5053, 617: 2287, 1032: 7692},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 617: 7693, 826: 7016, 3292, 3293, 3291, 1105: 7017, 1161: 7015},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 7695, 3292, 3293, 3291, 859: 7029, 1105: 7017, 1161: 7694},
{9: 7025, 594: 7698},
{1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1349, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 64: 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 587: 1358, 591: 1358, 594: 1349, 602: 1358, 609: 1358, 612: 1358, 618: 1358, 1358, 629: 1358, 769: 7696, 1099: 7018},
// 4600
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 7021, 826: 7697, 3292, 3293, 3291},
{1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1349, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 64: 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 587: 1357, 591: 1357, 594: 1349, 602: 1357, 609: 1357, 612: 1357, 618: 1357, 1357, 629: 1357, 769: 7023, 1099: 7022},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 6573, 614: 4237, 698: 6567, 780: 6572, 826: 4236, 3292, 3293, 3291, 6571, 859: 6570, 950: 6569, 955: 6568, 6575, 1029: 6564, 1077: 7699},
{481, 481, 9: 6623, 609: 5030, 941: 5031, 7700},
{2531, 2531},
// 4605
{2534, 2534, 9: 4302},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 7779, 3292, 3293, 3291},
{2: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 10: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 64: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 631: 5356, 914: 7777},
{2: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 10: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 64: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 631: 5356, 914: 7768},
{764: 7763},
// 4610
{182: 6251, 642: 6250, 1164: 7759},
{247: 869, 256: 6808},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 631: 7754, 826: 4236, 3292, 3293, 3291, 859: 4238, 939: 7753},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 631: 7750, 687: 6429, 826: 4046, 3292, 3293, 3291, 860: 6428, 910: 6430, 1039: 7749},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 6962, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 6967, 631: 7746, 826: 4046, 3292, 3293, 3291, 860: 6383, 954: 6969, 981: 6970, 6968, 1037: 7745},
// 4615
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 7741, 939: 7740},
{247: 7727},
{195: 7724},
{625: 7721},
{2: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 10: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 64: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 614: 2291, 631: 5356, 914: 7719},
// 4620
{2: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 10: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 64: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 614: 2291, 631: 5356, 914: 7717},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 7718},
{31, 31},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 4238, 939: 7720},
{175, 175, 9: 4240},
// 4625
{2: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 10: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 64: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 589: 2291, 631: 5356, 914: 7722},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 589: 3289, 826: 3288, 3292, 3293, 3291, 980: 7723},
{212, 212},
{2: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 10: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 64: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 631: 5356, 914: 7725},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5738, 3292, 3293, 3291, 963: 7726},
// 4630
{215, 215},
{613: 7728},
{583: 3150, 586: 3149, 600: 3148, 603: 3134, 640: 3133, 642: 3147, 692: 3143, 757: 7730, 766: 3263, 830: 6995, 858: 6993, 861: 6996, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 6994, 6998, 6997, 877: 3262, 7000, 7001, 881: 7002, 6999, 994: 7729},
{396, 396, 594: 7738},
{258: 7731},
// 4635
{585: 7734, 668: 3872, 831: 7735, 1160: 7732, 1366: 7733},
{400, 400, 9: 400},
{394, 394, 9: 7736},
{398, 398, 9: 398},
{397, 397, 9: 397},
// 4640
{585: 7734, 668: 3872, 831: 7735, 1160: 7737},
{399, 399, 9: 399},
{583: 3150, 586: 3149, 600: 3148, 603: 3134, 640: 3133, 642: 3147, 692: 3143, 766: 3263, 830: 6995, 858: 6993, 861: 6996, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 6994, 6998, 6997, 877: 3262, 7000, 7001, 881: 7002, 6999, 994: 7739},
{395, 395},
{2512, 2512, 9: 4240},
// 4645
{1355, 1355, 9: 1355, 71: 7743, 587: 7742},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5683, 3292, 3293, 3291, 916: 7744},
{2510, 2510},
{2511, 2511, 9: 5684},
{2514, 2514, 9: 6971},
// 4650
{701: 7747},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 6962, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 6967, 826: 4046, 3292, 3293, 3291, 860: 6383, 954: 6969, 981: 6970, 6968, 1037: 7748},
{2513, 2513, 9: 6971},
{2516, 2516, 9: 6432},
{701: 7751},
// 4655
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 687: 6429, 826: 4046, 3292, 3293, 3291, 860: 6428, 910: 6430, 1039: 7752},
{2515, 2515, 9: 6432},
{2509, 2509, 9: 4240, 646: 5774, 788: 5775, 1070: 7758},
{701: 7755},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 4238, 939: 7756},
// 4660
{2509, 2509, 9: 4240, 646: 5774, 788: 5775, 1070: 7757},
{2517, 2517},
{2518, 2518},
{2: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 10: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 64: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 614: 2291, 631: 5356, 914: 7760},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 4238, 939: 7761},
// 4665
{2509, 2509, 9: 4240, 646: 5774, 788: 5775, 1070: 7762},
{2522, 2522},
{2: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 10: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 64: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 631: 5356, 914: 7764},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 7765, 3292, 3293, 3291},
{584: 7766},
// 4670
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 7767},
{2523, 2523},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 7769, 3292, 3293, 3291},
{584: 7770},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 7771},
// 4675
{2676, 2676, 112: 5097, 615: 5098, 1041: 7773, 1062: 7772, 1266: 7774},
{2675, 2675, 112: 5097, 1041: 7776},
{2674, 2674, 615: 5098, 1062: 7775},
{2524, 2524},
{2672, 2672},
// 4680
{2673, 2673},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 6553, 3292, 3293, 3291, 966: 7778},
{2525, 2525},
{2684, 2684},
{2: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 10: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 64: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 631: 5806, 915: 8283},
// 4685
{764: 8271},
{764: 2670},
{764: 2669},
{764: 2668},
{764: 2667},
// 4690
{764: 2666},
{2: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 10: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 64: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 631: 5806, 915: 8248},
{20: 8153, 112: 8152, 162: 2551, 229: 2551, 249: 8154, 757: 2551, 1587: 8151},
{603: 8150},
{2: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 10: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 64: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 585: 2289, 631: 5806, 687: 2289, 915: 8095},
// 4695
{2: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 10: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 64: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 585: 2289, 631: 5806, 915: 8089},
{247: 8076},
{625: 8005},
{2: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 10: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 64: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 614: 2289, 631: 5806, 915: 7969},
{2: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 10: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 64: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 614: 2289, 631: 5806, 915: 7796},
// 4700
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 7797},
{583: 7798},
{2: 130, 130, 130, 130, 130, 130, 130, 10: 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 135, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 661: 7802, 1267: 7804, 1304: 7803, 1356: 7801, 7800, 1491: 7805, 1554: 7799},
{9: 7967, 63: 134},
{9: 132, 63: 132},
// 4705
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 7965, 3292, 3293, 3291},
{2: 129, 129, 129, 129, 129, 129, 129, 10: 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 64: 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129},
{2: 128, 128, 128, 128, 128, 128, 128, 10: 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 64: 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128},
{2: 127, 127, 127, 127, 127, 127, 127, 10: 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 64: 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127},
{63: 7806},
// 4710
{65: 7834, 113: 7826, 3110, 116: 3139, 118: 3261, 122: 7823, 7825, 583: 3150, 586: 3149, 600: 3148, 603: 3134, 610: 7824, 7665, 629: 3264, 631: 7827, 3121, 639: 3119, 3133, 642: 3147, 663: 7830, 7833, 692: 3143, 766: 3263, 768: 3106, 830: 7807, 858: 3114, 861: 7808, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 3117, 7809, 7818, 877: 3262, 3115, 7813, 881: 7814, 7811, 3120, 886: 7832, 890: 3116, 892: 7835, 7836, 7819, 900: 7820, 7815, 7816, 7810, 912: 7817, 3122, 917: 7821, 7812, 922: 7822, 7831, 7840, 7843, 7844, 7839, 7847, 7845, 7846, 7848, 7842, 7849, 7829, 7828, 7837, 7838, 7841},
{124, 124, 593: 1112, 607: 1112, 1112, 610: 4168, 612: 4167, 619: 4166, 897: 4169, 4170},
{126, 126, 593: 1113, 607: 1113, 1113},
{125, 125},
{123, 123},
// 4715
{122, 122},
{121, 121},
{120, 120},
{119, 119},
{118, 118},
// 4720
{117, 117},
{116, 116},
{115, 115},
{114, 114},
{113, 113},
// 4725
{112, 112},
{107, 107},
{65: 7964},
{65: 84, 276: 7955, 617: 7956, 1516: 7954},
{65: 7953},
// 4730
{65: 79, 113: 79, 79, 116: 79, 118: 79, 122: 79, 79, 126: 79, 267: 7906, 583: 79, 586: 79, 600: 79, 603: 79, 610: 79, 79, 629: 79, 631: 79, 79, 639: 79, 79, 642: 79, 663: 79, 79, 692: 79, 766: 79, 768: 79, 858: 79, 883: 79, 886: 79, 892: 79, 79, 1319: 7908, 1510: 7907, 7909},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 7895, 1321: 7896},
{65, 65},
{64, 64},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 643: 7875, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 7872, 1343: 7873, 1532: 7874},
// 4735
{53, 53},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 7867},
{65: 7834, 113: 7826, 3110, 116: 3139, 118: 3261, 122: 7823, 7825, 583: 3150, 586: 3149, 600: 3148, 603: 3134, 610: 7824, 7665, 629: 3264, 631: 7827, 3121, 639: 3119, 3133, 642: 3147, 663: 7830, 7833, 692: 3143, 766: 3263, 768: 3106, 830: 7807, 858: 3114, 861: 7808, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 3117, 7809, 7818, 877: 3262, 3115, 7813, 881: 7814, 7811, 3120, 886: 7832, 890: 3116, 892: 7835, 7836, 7819, 900: 7820, 7815, 7816, 7810, 912: 7817, 3122, 917: 7821, 7812, 922: 7822, 7831, 7840, 7843, 7844, 7839, 7847, 7845, 7846, 7848, 7842, 7858, 7829, 7828, 7837, 7838, 7841, 1008: 7859},
{1392: 7852},
{65: 7851},
// 4740
{65: 7850},
{44, 44},
{43, 43},
{42, 42},
{41, 41},
// 4745
{40, 40},
{39, 39},
{38, 38},
{37, 37},
{36, 36},
// 4750
{35, 35},
{34, 34},
{33, 33},
{32, 32},
{45, 45},
// 4755
{46, 46},
{113: 7826, 664: 7833, 886: 7832, 922: 7853, 7854},
{49, 49, 65: 7855, 1318: 7857},
{49, 49, 65: 7855, 1318: 7856},
{48, 48},
// 4760
{47, 47},
{50, 50},
{7866},
{65: 7834, 113: 7826, 3110, 116: 3139, 118: 3261, 122: 7823, 7825, 583: 3150, 586: 3149, 600: 3148, 603: 3134, 610: 7824, 7665, 629: 3264, 631: 7827, 3121, 639: 3119, 3133, 642: 3147, 663: 7830, 7833, 692: 3143, 766: 3263, 768: 3106, 830: 7807, 858: 3114, 861: 7808, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 3117, 7809, 7818, 877: 3262, 3115, 7813, 881: 7814, 7811, 3120, 886: 7832, 890: 3116, 892: 7835, 7836, 7819, 900: 7820, 7815, 7816, 7810, 912: 7817, 3122, 917: 7821, 7812, 922: 7822, 7831, 7840, 7843, 7844, 7839, 7847, 7845, 7846, 7848, 7842, 7860, 7829, 7828, 7837, 7838, 7841, 1168: 7861},
{7865},
// 4765
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 7862},
{126: 7863, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{664: 7864},
{51, 51, 65: 51},
{65: 72, 113: 72, 72, 116: 72, 118: 72, 122: 72, 72, 126: 72, 583: 72, 586: 72, 600: 72, 603: 72, 610: 72, 72, 629: 72, 631: 72, 72, 639: 72, 72, 642: 72, 72, 72, 663: 72, 72, 692: 72, 766: 72, 768: 72, 858: 72, 883: 72, 886: 72, 892: 72, 72, 1123: 72, 1168: 72},
// 4770
{65: 73, 113: 73, 73, 116: 73, 118: 73, 122: 73, 73, 126: 73, 583: 73, 586: 73, 600: 73, 603: 73, 610: 73, 73, 629: 73, 631: 73, 73, 639: 73, 73, 642: 73, 73, 73, 663: 73, 73, 692: 73, 766: 73, 768: 73, 858: 73, 883: 73, 886: 73, 892: 73, 73, 1123: 73, 1168: 73},
{293: 7868, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{65: 7834, 113: 7826, 3110, 116: 3139, 118: 3261, 122: 7823, 7825, 583: 3150, 586: 3149, 600: 3148, 603: 3134, 610: 7824, 7665, 629: 3264, 631: 7827, 3121, 639: 3119, 3133, 642: 3147, 663: 7830, 7833, 692: 3143, 766: 3263, 768: 3106, 830: 7807, 858: 3114, 861: 7808, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 3117, 7809, 7818, 877: 3262, 3115, 7813, 881: 7814, 7811, 3120, 886: 7832, 890: 3116, 892: 7835, 7836, 7819, 900: 7820, 7815, 7816, 7810, 912: 7817, 3122, 917: 7821, 7812, 922: 7822, 7831, 7840, 7843, 7844, 7839, 7847, 7845, 7846, 7848, 7842, 7858, 7829, 7828, 7837, 7838, 7841, 1008: 7869},
{65: 7834, 113: 7826, 3110, 116: 3139, 118: 3261, 122: 7823, 7825, 126: 7870, 583: 3150, 586: 3149, 600: 3148, 603: 3134, 610: 7824, 7665, 629: 3264, 631: 7827, 3121, 639: 3119, 3133, 642: 3147, 663: 7830, 7833, 692: 3143, 766: 3263, 768: 3106, 830: 7807, 858: 3114, 861: 7808, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 3117, 7809, 7818, 877: 3262, 3115, 7813, 881: 7814, 7811, 3120, 886: 7832, 890: 3116, 892: 7835, 7836, 7819, 900: 7820, 7815, 7816, 7810, 912: 7817, 3122, 917: 7821, 7812, 922: 7822, 7831, 7840, 7843, 7844, 7839, 7847, 7845, 7846, 7848, 7842, 7860, 7829, 7828, 7837, 7838, 7841},
{886: 7871},
// 4775
{52, 52, 65: 52},
{620: 4054, 4052, 4053, 4051, 4049, 643: 7887, 856: 4050, 4048, 1354: 7885, 1549: 7886},
{126: 61, 643: 61, 61},
{126: 57, 643: 7875, 7880, 1239: 7881, 1343: 7879},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 7876},
// 4780
{620: 4054, 4052, 4053, 4051, 4049, 662: 7877, 856: 4050, 4048},
{65: 7834, 113: 7826, 3110, 116: 3139, 118: 3261, 122: 7823, 7825, 583: 3150, 586: 3149, 600: 3148, 603: 3134, 610: 7824, 7665, 629: 3264, 631: 7827, 3121, 639: 3119, 3133, 642: 3147, 663: 7830, 7833, 692: 3143, 766: 3263, 768: 3106, 830: 7807, 858: 3114, 861: 7808, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 3117, 7809, 7818, 877: 3262, 3115, 7813, 881: 7814, 7811, 3120, 886: 7832, 890: 3116, 892: 7835, 7836, 7819, 900: 7820, 7815, 7816, 7810, 912: 7817, 3122, 917: 7821, 7812, 922: 7822, 7831, 7840, 7843, 7844, 7839, 7847, 7845, 7846, 7848, 7842, 7858, 7829, 7828, 7837, 7838, 7841, 1008: 7878},
{65: 7834, 113: 7826, 3110, 116: 3139, 118: 3261, 122: 7823, 7825, 126: 58, 583: 3150, 586: 3149, 600: 3148, 603: 3134, 610: 7824, 7665, 629: 3264, 631: 7827, 3121, 639: 3119, 3133, 642: 3147, 58, 58, 663: 7830, 7833, 692: 3143, 766: 3263, 768: 3106, 830: 7807, 858: 3114, 861: 7808, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 3117, 7809, 7818, 877: 3262, 3115, 7813, 881: 7814, 7811, 3120, 886: 7832, 890: 3116, 892: 7835, 7836, 7819, 900: 7820, 7815, 7816, 7810, 912: 7817, 3122, 917: 7821, 7812, 922: 7822, 7831, 7840, 7843, 7844, 7839, 7847, 7845, 7846, 7848, 7842, 7860, 7829, 7828, 7837, 7838, 7841},
{126: 60, 643: 60, 60},
{65: 7834, 113: 7826, 3110, 116: 3139, 118: 3261, 122: 7823, 7825, 583: 3150, 586: 3149, 600: 3148, 603: 3134, 610: 7824, 7665, 629: 3264, 631: 7827, 3121, 639: 3119, 3133, 642: 3147, 663: 7830, 7833, 692: 3143, 766: 3263, 768: 3106, 830: 7807, 858: 3114, 861: 7808, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 3117, 7809, 7818, 877: 3262, 3115, 7813, 881: 7814, 7811, 3120, 886: 7832, 890: 3116, 892: 7835, 7836, 7819, 900: 7820, 7815, 7816, 7810, 912: 7817, 3122, 917: 7821, 7812, 922: 7822, 7831, 7840, 7843, 7844, 7839, 7847, 7845, 7846, 7848, 7842, 7858, 7829, 7828, 7837, 7838, 7841, 1008: 7884},
// 4785
{126: 7882},
{663: 7883},
{54, 54},
{65: 7834, 113: 7826, 3110, 116: 3139, 118: 3261, 122: 7823, 7825, 126: 56, 583: 3150, 586: 3149, 600: 3148, 603: 3134, 610: 7824, 7665, 629: 3264, 631: 7827, 3121, 639: 3119, 3133, 642: 3147, 663: 7830, 7833, 692: 3143, 766: 3263, 768: 3106, 830: 7807, 858: 3114, 861: 7808, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 3117, 7809, 7818, 877: 3262, 3115, 7813, 881: 7814, 7811, 3120, 886: 7832, 890: 3116, 892: 7835, 7836, 7819, 900: 7820, 7815, 7816, 7810, 912: 7817, 3122, 917: 7821, 7812, 922: 7822, 7831, 7840, 7843, 7844, 7839, 7847, 7845, 7846, 7848, 7842, 7860, 7829, 7828, 7837, 7838, 7841},
{126: 63, 643: 63, 63},
// 4790
{126: 57, 643: 7887, 7880, 1239: 7892, 1354: 7891},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 7888},
{620: 4054, 4052, 4053, 4051, 4049, 662: 7889, 856: 4050, 4048},
{65: 7834, 113: 7826, 3110, 116: 3139, 118: 3261, 122: 7823, 7825, 583: 3150, 586: 3149, 600: 3148, 603: 3134, 610: 7824, 7665, 629: 3264, 631: 7827, 3121, 639: 3119, 3133, 642: 3147, 663: 7830, 7833, 692: 3143, 766: 3263, 768: 3106, 830: 7807, 858: 3114, 861: 7808, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 3117, 7809, 7818, 877: 3262, 3115, 7813, 881: 7814, 7811, 3120, 886: 7832, 890: 3116, 892: 7835, 7836, 7819, 900: 7820, 7815, 7816, 7810, 912: 7817, 3122, 917: 7821, 7812, 922: 7822, 7831, 7840, 7843, 7844, 7839, 7847, 7845, 7846, 7848, 7842, 7858, 7829, 7828, 7837, 7838, 7841, 1008: 7890},
{65: 7834, 113: 7826, 3110, 116: 3139, 118: 3261, 122: 7823, 7825, 126: 59, 583: 3150, 586: 3149, 600: 3148, 603: 3134, 610: 7824, 7665, 629: 3264, 631: 7827, 3121, 639: 3119, 3133, 642: 3147, 59, 59, 663: 7830, 7833, 692: 3143, 766: 3263, 768: 3106, 830: 7807, 858: 3114, 861: 7808, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 3117, 7809, 7818, 877: 3262, 3115, 7813, 881: 7814, 7811, 3120, 886: 7832, 890: 3116, 892: 7835, 7836, 7819, 900: 7820, 7815, 7816, 7810, 912: 7817, 3122, 917: 7821, 7812, 922: 7822, 7831, 7840, 7843, 7844, 7839, 7847, 7845, 7846, 7848, 7842, 7860, 7829, 7828, 7837, 7838, 7841},
// 4795
{126: 62, 643: 62, 62},
{126: 7893},
{663: 7894},
{55, 55},
{620: 4054, 4052, 4053, 4051, 4049, 662: 7899, 856: 4050, 4048},
// 4800
{126: 7897},
{631: 7898},
{70, 70},
{65: 7834, 113: 7826, 3110, 116: 3139, 118: 3261, 122: 7823, 7825, 583: 3150, 586: 3149, 600: 3148, 603: 3134, 610: 7824, 7665, 629: 3264, 631: 7827, 3121, 639: 3119, 3133, 642: 3147, 663: 7830, 7833, 692: 3143, 766: 3263, 768: 3106, 830: 7807, 858: 3114, 861: 7808, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 3117, 7809, 7818, 877: 3262, 3115, 7813, 881: 7814, 7811, 3120, 886: 7832, 890: 3116, 892: 7835, 7836, 7819, 900: 7820, 7815, 7816, 7810, 912: 7817, 3122, 917: 7821, 7812, 922: 7822, 7831, 7840, 7843, 7844, 7839, 7847, 7845, 7846, 7848, 7842, 7858, 7829, 7828, 7837, 7838, 7841, 1008: 7900},
{65: 7834, 113: 7826, 3110, 116: 3139, 118: 3261, 122: 7823, 7825, 126: 68, 583: 3150, 586: 3149, 600: 3148, 603: 3134, 610: 7824, 7665, 629: 3264, 631: 7827, 3121, 639: 3119, 3133, 642: 3147, 644: 7903, 663: 7830, 7833, 692: 3143, 766: 3263, 768: 3106, 830: 7807, 858: 3114, 861: 7808, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 3117, 7809, 7818, 877: 3262, 3115, 7813, 881: 7814, 7811, 3120, 886: 7832, 890: 3116, 892: 7835, 7836, 7819, 900: 7820, 7815, 7816, 7810, 912: 7817, 3122, 917: 7821, 7812, 922: 7822, 7831, 7840, 7843, 7844, 7839, 7847, 7845, 7846, 7848, 7842, 7860, 7829, 7828, 7837, 7838, 7841, 1123: 7902, 1506: 7901},
// 4805
{126: 69},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 7895, 1321: 7905},
{65: 7834, 113: 7826, 3110, 116: 3139, 118: 3261, 122: 7823, 7825, 583: 3150, 586: 3149, 600: 3148, 603: 3134, 610: 7824, 7665, 629: 3264, 631: 7827, 3121, 639: 3119, 3133, 642: 3147, 663: 7830, 7833, 692: 3143, 766: 3263, 768: 3106, 830: 7807, 858: 3114, 861: 7808, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 3117, 7809, 7818, 877: 3262, 3115, 7813, 881: 7814, 7811, 3120, 886: 7832, 890: 3116, 892: 7835, 7836, 7819, 900: 7820, 7815, 7816, 7810, 912: 7817, 3122, 917: 7821, 7812, 922: 7822, 7831, 7840, 7843, 7844, 7839, 7847, 7845, 7846, 7848, 7842, 7858, 7829, 7828, 7837, 7838, 7841, 1008: 7904},
{65: 7834, 113: 7826, 3110, 116: 3139, 118: 3261, 122: 7823, 7825, 126: 66, 583: 3150, 586: 3149, 600: 3148, 603: 3134, 610: 7824, 7665, 629: 3264, 631: 7827, 3121, 639: 3119, 3133, 642: 3147, 663: 7830, 7833, 692: 3143, 766: 3263, 768: 3106, 830: 7807, 858: 3114, 861: 7808, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 3117, 7809, 7818, 877: 3262, 3115, 7813, 881: 7814, 7811, 3120, 886: 7832, 890: 3116, 892: 7835, 7836, 7819, 900: 7820, 7815, 7816, 7810, 912: 7817, 3122, 917: 7821, 7812, 922: 7822, 7831, 7840, 7843, 7844, 7839, 7847, 7845, 7846, 7848, 7842, 7860, 7829, 7828, 7837, 7838, 7841},
{126: 67},
// 4810
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 7917, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 7918, 3292, 3293, 3291, 1426: 7921, 1440: 7922, 1509: 7919, 1513: 7920},
{65: 78, 113: 78, 78, 116: 78, 118: 78, 122: 78, 78, 126: 78, 267: 7906, 583: 78, 586: 78, 600: 78, 603: 78, 610: 78, 78, 629: 78, 631: 78, 78, 639: 78, 78, 642: 78, 663: 78, 78, 692: 78, 766: 78, 768: 78, 858: 78, 883: 78, 886: 78, 892: 78, 78, 1319: 7915},
{7914},
{65: 75, 113: 75, 75, 116: 75, 118: 75, 122: 75, 75, 126: 75, 583: 75, 586: 75, 600: 75, 603: 75, 610: 75, 75, 629: 75, 631: 75, 75, 639: 75, 75, 642: 75, 663: 75, 75, 692: 75, 766: 75, 768: 75, 858: 75, 883: 75, 886: 75, 892: 75, 75, 1517: 7910},
{65: 7834, 113: 7826, 3110, 116: 3139, 118: 3261, 122: 7823, 7825, 126: 7912, 583: 3150, 586: 3149, 600: 3148, 603: 3134, 610: 7824, 7665, 629: 3264, 631: 7827, 3121, 639: 3119, 3133, 642: 3147, 663: 7830, 7833, 692: 3143, 766: 3263, 768: 3106, 830: 7807, 858: 3114, 861: 7808, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 3117, 7809, 7818, 877: 3262, 3115, 7813, 881: 7814, 7811, 3120, 886: 7832, 890: 3116, 892: 7835, 7836, 7819, 900: 7820, 7815, 7816, 7810, 912: 7817, 3122, 917: 7821, 7812, 922: 7822, 7831, 7840, 7843, 7844, 7839, 7847, 7845, 7846, 7848, 7842, 7911, 7829, 7828, 7837, 7838, 7841},
// 4815
{7913},
{71, 71, 65: 71},
{65: 74, 113: 74, 74, 116: 74, 118: 74, 122: 74, 74, 126: 74, 583: 74, 586: 74, 600: 74, 603: 74, 610: 74, 74, 629: 74, 631: 74, 74, 639: 74, 74, 642: 74, 663: 74, 74, 692: 74, 766: 74, 768: 74, 858: 74, 883: 74, 886: 74, 892: 74, 74},
{65: 77, 113: 77, 77, 116: 77, 118: 77, 122: 77, 77, 126: 77, 267: 77, 583: 77, 586: 77, 600: 77, 603: 77, 610: 77, 77, 629: 77, 631: 77, 77, 639: 77, 77, 642: 77, 663: 77, 77, 692: 77, 766: 77, 768: 77, 858: 77, 883: 77, 886: 77, 892: 77, 77},
{7916},
// 4820
{65: 76, 113: 76, 76, 116: 76, 118: 76, 122: 76, 76, 126: 76, 267: 76, 583: 76, 586: 76, 600: 76, 603: 76, 610: 76, 76, 629: 76, 631: 76, 76, 639: 76, 76, 642: 76, 663: 76, 76, 692: 76, 766: 76, 768: 76, 858: 76, 883: 76, 886: 76, 892: 76, 76},
{9: 2253, 133: 2253, 139: 2253, 185: 2253, 189: 2253, 2253, 192: 2253, 2253, 2253, 198: 2253, 2253, 210: 2253, 212: 2253, 2253, 215: 2253, 218: 2253, 2253, 2253, 606: 2253, 611: 2253, 637: 2253, 763: 2253, 782: 2253, 2253, 2253, 2253, 2253, 2253, 790: 2253, 2253, 793: 2253, 795: 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 1430: 7946},
{9: 106, 133: 106, 139: 106, 185: 106, 189: 106, 106, 192: 106, 106, 106, 198: 106, 106, 210: 106, 212: 106, 106, 215: 106, 218: 106, 106, 106, 606: 106, 611: 106, 637: 106, 763: 106, 782: 106, 106, 106, 106, 106, 106, 790: 106, 106, 793: 106, 795: 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106},
{9: 7940, 133: 5414, 139: 5415, 185: 5404, 189: 5425, 5424, 192: 5427, 5406, 5387, 198: 5426, 5384, 210: 5421, 212: 5393, 5383, 215: 5402, 218: 5410, 5409, 5413, 606: 5408, 611: 5403, 637: 5398, 763: 5407, 782: 5390, 5388, 5385, 5389, 5412, 5411, 790: 5381, 5375, 793: 5399, 795: 5382, 5417, 5391, 5392, 5376, 5377, 5378, 5379, 5380, 5405, 5419, 5423, 5418, 5373, 5422, 5374, 5386, 5372, 5416, 5371, 5420, 975: 5394, 1040: 5396, 1042: 5370, 5400, 1045: 5367, 1050: 5365, 1055: 5368, 5369, 1060: 5366, 1063: 5395, 5363, 5397, 1074: 5364, 1078: 5401, 7941, 1081: 5428},
{298: 7923},
// 4825
{298: 99},
{298: 98},
{613: 7924},
{590: 7929, 604: 3284, 854: 7931, 1317: 7927, 1320: 7926, 1358: 7930, 7932, 7928, 1514: 7925},
{9: 7938, 65: 7834, 113: 7826, 3110, 116: 3139, 118: 3261, 122: 7823, 7825, 583: 3150, 586: 3149, 600: 3148, 603: 3134, 610: 7824, 7665, 629: 3264, 631: 7827, 3121, 639: 3119, 3133, 642: 3147, 663: 7830, 7833, 692: 3143, 766: 3263, 768: 3106, 830: 7807, 858: 3114, 861: 7808, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 3117, 7809, 7818, 877: 3262, 3115, 7813, 881: 7814, 7811, 3120, 886: 7832, 890: 3116, 892: 7835, 7836, 7819, 900: 7820, 7815, 7816, 7810, 912: 7817, 3122, 917: 7821, 7812, 922: 7822, 7831, 7840, 7843, 7844, 7839, 7847, 7845, 7846, 7848, 7842, 7937, 7829, 7828, 7837, 7838, 7841},
// 4830
{9: 97, 65: 97, 113: 97, 97, 116: 97, 118: 97, 122: 97, 97, 583: 97, 586: 97, 600: 97, 603: 97, 610: 97, 97, 629: 97, 631: 97, 97, 639: 97, 97, 642: 97, 663: 97, 97, 692: 97, 766: 97, 768: 97, 858: 97, 883: 97, 886: 97, 892: 97, 97},
{9: 95, 65: 95, 113: 95, 95, 116: 95, 118: 95, 122: 95, 95, 583: 95, 586: 95, 600: 95, 603: 95, 610: 95, 95, 629: 95, 631: 95, 95, 639: 95, 95, 642: 95, 663: 95, 95, 692: 95, 766: 95, 768: 95, 858: 95, 883: 95, 886: 95, 892: 95, 95},
{9: 94, 65: 94, 113: 94, 94, 116: 94, 118: 94, 122: 94, 94, 583: 94, 586: 94, 600: 94, 603: 94, 610: 94, 94, 629: 94, 631: 94, 94, 639: 94, 94, 642: 94, 663: 94, 94, 692: 94, 766: 94, 768: 94, 858: 94, 883: 94, 886: 94, 892: 94, 94},
{439: 7936},
{9: 92, 65: 92, 113: 92, 92, 116: 92, 118: 92, 122: 92, 92, 583: 92, 586: 92, 600: 92, 603: 92, 610: 92, 92, 629: 92, 631: 92, 92, 639: 92, 92, 642: 92, 663: 92, 92, 692: 92, 766: 92, 768: 92, 858: 92, 883: 92, 886: 92, 892: 92, 92},
// 4835
{9: 91, 65: 91, 113: 91, 91, 116: 91, 118: 91, 122: 91, 91, 583: 91, 586: 91, 600: 91, 603: 91, 610: 91, 91, 629: 91, 631: 91, 91, 639: 91, 91, 642: 91, 663: 91, 91, 692: 91, 766: 91, 768: 91, 858: 91, 883: 91, 886: 91, 892: 91, 91},
{234: 7934, 585: 89, 1493: 7933},
{585: 7935},
{585: 88},
{9: 90, 65: 90, 113: 90, 90, 116: 90, 118: 90, 122: 90, 90, 583: 90, 586: 90, 600: 90, 603: 90, 610: 90, 90, 629: 90, 631: 90, 90, 639: 90, 90, 642: 90, 663: 90, 90, 692: 90, 766: 90, 768: 90, 858: 90, 883: 90, 886: 90, 892: 90, 90},
// 4840
{9: 93, 65: 93, 113: 93, 93, 116: 93, 118: 93, 122: 93, 93, 583: 93, 586: 93, 600: 93, 603: 93, 610: 93, 93, 629: 93, 631: 93, 93, 639: 93, 93, 642: 93, 663: 93, 93, 692: 93, 766: 93, 768: 93, 858: 93, 883: 93, 886: 93, 892: 93, 93},
{100},
{590: 7929, 604: 3284, 854: 7931, 1317: 7927, 1320: 7939, 1358: 7930, 7932, 7928},
{9: 96, 65: 96, 113: 96, 96, 116: 96, 118: 96, 122: 96, 96, 583: 96, 586: 96, 600: 96, 603: 96, 610: 96, 96, 629: 96, 631: 96, 96, 639: 96, 96, 642: 96, 663: 96, 96, 692: 96, 766: 96, 768: 96, 858: 96, 883: 96, 886: 96, 892: 96, 96},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 7945, 3292, 3293, 3291},
// 4845
{104, 589: 7942, 1515: 7943},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 7944},
{102},
{103, 620: 4054, 4052, 4053, 4051, 4049, 856: 4050, 4048},
{9: 105, 133: 105, 139: 105, 185: 105, 189: 105, 105, 192: 105, 105, 105, 198: 105, 105, 210: 105, 212: 105, 105, 215: 105, 218: 105, 105, 105, 606: 105, 611: 105, 637: 105, 763: 105, 782: 105, 105, 105, 105, 105, 105, 790: 105, 105, 793: 105, 795: 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105},
// 4850
{613: 7947},
{583: 3150, 586: 3149, 600: 3148, 642: 3147, 692: 3143, 830: 7948, 861: 7949, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 4155, 7950, 7951, 1508: 7952},
{109, 593: 1112, 607: 1112, 1112, 610: 4168, 612: 4167, 619: 4166, 897: 4169, 4170},
{111, 593: 1113, 607: 1113, 1113},
{110},
// 4855
{108},
{101},
{85, 85},
{65: 7958},
{617: 7957},
// 4860
{65: 82},
{65: 83},
{616: 7959},
{65: 7961, 1512: 7960},
{86, 86, 9: 7962},
// 4865
{81, 81, 9: 81},
{65: 7963},
{80, 80, 9: 80},
{87, 87},
{133: 5414, 139: 5415, 185: 5404, 189: 5425, 5424, 192: 5427, 5406, 5387, 198: 5426, 5384, 210: 5421, 212: 5393, 5383, 215: 5402, 218: 5410, 5409, 5413, 606: 5408, 611: 5403, 637: 5398, 763: 5407, 782: 5390, 5388, 5385, 5389, 5412, 5411, 790: 5381, 5375, 793: 5399, 795: 5382, 5417, 5391, 5392, 5376, 5377, 5378, 5379, 5380, 5405, 5419, 5423, 5418, 5373, 5422, 5374, 5386, 5372, 5416, 5371, 5420, 975: 5394, 1040: 5396, 1042: 5370, 5400, 1045: 5367, 1050: 5365, 1055: 5368, 5369, 1060: 5366, 1063: 5395, 5363, 5397, 1074: 5364, 1078: 5401, 7966, 1081: 5428},
// 4870
{9: 131, 63: 131},
{2: 130, 130, 130, 130, 130, 130, 130, 10: 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 64: 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 661: 7802, 1267: 7804, 1304: 7803, 1356: 7801, 7968},
{9: 133, 63: 133},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 7970},
{198, 198, 6: 198, 198, 198, 10: 198, 17: 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 115: 7978, 117: 7975, 120: 7981, 7982, 124: 7983, 7976, 127: 7974, 7984, 7980, 7977, 589: 198, 592: 198, 198, 606: 198, 618: 198, 763: 198, 198, 775: 7979, 1104: 7973, 1427: 7971, 1536: 7972},
// 4875
{637, 637, 6: 5103, 5107, 5105, 10: 641, 17: 5124, 2643, 5122, 5059, 5126, 5138, 5113, 5142, 5104, 5109, 5106, 5108, 5111, 5112, 5114, 5121, 5152, 641, 5147, 5132, 5133, 5143, 5146, 5119, 5120, 5125, 5127, 5153, 5139, 5148, 5149, 5150, 5155, 5140, 5137, 5130, 5135, 5136, 5129, 5131, 5134, 5123, 5151, 5144, 5145, 589: 5102, 592: 2643, 5141, 606: 2643, 618: 6037, 763: 2643, 5110, 921: 5115, 948: 5117, 972: 5116, 999: 5118, 1009: 5128, 1015: 5154, 1106: 6830, 1215: 8004},
{197, 197, 6: 197, 197, 197, 10: 197, 17: 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 115: 7978, 117: 7975, 120: 7981, 7982, 124: 7983, 7976, 127: 7974, 7984, 7980, 7977, 589: 197, 592: 197, 197, 606: 197, 618: 197, 763: 197, 197, 775: 7979, 1104: 8003},
{196, 196, 6: 196, 196, 196, 10: 196, 17: 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 115: 196, 117: 196, 120: 196, 196, 124: 196, 196, 127: 196, 196, 196, 196, 589: 196, 592: 196, 196, 606: 196, 618: 196, 763: 196, 196, 775: 196},
{597: 2504, 2504, 604: 2504, 4917, 776: 8000, 855: 7999},
{586: 7996, 597: 2504, 2504, 604: 2504, 4917, 855: 7995},
// 4880
{597: 2504, 2504, 604: 2504, 4917, 855: 7993},
{189, 189, 6: 189, 189, 189, 10: 189, 17: 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, 115: 189, 117: 189, 120: 189, 189, 124: 189, 189, 127: 189, 189, 189, 189, 189, 589: 189, 592: 189, 189, 606: 189, 618: 189, 763: 189, 189, 775: 189},
{120: 7991, 124: 7992, 7989, 775: 7990},
{597: 2504, 2504, 604: 2504, 4917, 855: 7987},
{186, 186, 6: 186, 186, 186, 10: 186, 17: 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 115: 186, 117: 186, 120: 186, 186, 124: 186, 186, 127: 186, 186, 186, 186, 186, 589: 186, 592: 186, 186, 606: 186, 618: 186, 763: 186, 186, 775: 186},
// 4885
{597: 2504, 2504, 604: 2504, 4917, 855: 7985},
{183, 183, 6: 183, 183, 183, 10: 183, 17: 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 115: 183, 117: 183, 120: 183, 183, 124: 183, 183, 127: 183, 183, 183, 183, 183, 589: 183, 592: 183, 183, 606: 183, 618: 183, 763: 183, 183, 775: 183},
{181, 181, 6: 181, 181, 181, 10: 181, 17: 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 115: 181, 117: 181, 120: 181, 181, 124: 181, 181, 127: 181, 181, 181, 181, 181, 589: 181, 592: 181, 181, 606: 181, 618: 181, 763: 181, 181, 775: 181},
{180, 180, 6: 180, 180, 180, 10: 180, 17: 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 115: 180, 117: 180, 120: 180, 180, 124: 180, 180, 127: 180, 180, 180, 180, 180, 589: 180, 592: 180, 180, 606: 180, 618: 180, 763: 180, 180, 775: 180},
{597: 4870, 4871, 604: 3284, 854: 4867, 880: 4869, 973: 7986},
// 4890
{184, 184, 6: 184, 184, 184, 10: 184, 17: 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 115: 184, 117: 184, 120: 184, 184, 124: 184, 184, 127: 184, 184, 184, 184, 184, 589: 184, 592: 184, 184, 606: 184, 618: 184, 763: 184, 184, 775: 184},
{597: 4870, 4871, 604: 3284, 854: 4867, 880: 4869, 973: 7988},
{187, 187, 6: 187, 187, 187, 10: 187, 17: 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 115: 187, 117: 187, 120: 187, 187, 124: 187, 187, 127: 187, 187, 187, 187, 187, 589: 187, 592: 187, 187, 606: 187, 618: 187, 763: 187, 187, 775: 187},
{188, 188, 6: 188, 188, 188, 10: 188, 17: 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 115: 188, 117: 188, 120: 188, 188, 124: 188, 188, 127: 188, 188, 188, 188, 188, 589: 188, 592: 188, 188, 606: 188, 618: 188, 763: 188, 188, 775: 188},
{185, 185, 6: 185, 185, 185, 10: 185, 17: 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 115: 185, 117: 185, 120: 185, 185, 124: 185, 185, 127: 185, 185, 185, 185, 185, 589: 185, 592: 185, 185, 606: 185, 618: 185, 763: 185, 185, 775: 185},
// 4895
{182, 182, 6: 182, 182, 182, 10: 182, 17: 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 115: 182, 117: 182, 120: 182, 182, 124: 182, 182, 127: 182, 182, 182, 182, 182, 589: 182, 592: 182, 182, 606: 182, 618: 182, 763: 182, 182, 775: 182},
{179, 179, 6: 179, 179, 179, 10: 179, 17: 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 115: 179, 117: 179, 120: 179, 179, 124: 179, 179, 127: 179, 179, 179, 179, 179, 589: 179, 592: 179, 179, 606: 179, 618: 179, 763: 179, 179, 775: 179},
{597: 4870, 4871, 604: 3284, 854: 4867, 880: 4869, 973: 7994},
{190, 190, 6: 190, 190, 190, 10: 190, 17: 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 115: 190, 117: 190, 120: 190, 190, 124: 190, 190, 127: 190, 190, 190, 190, 190, 589: 190, 592: 190, 190, 606: 190, 618: 190, 763: 190, 190, 775: 190},
{597: 4870, 4871, 604: 3284, 854: 4867, 880: 4869, 973: 7998},
// 4900
{597: 4870, 4871, 604: 3284, 854: 4867, 880: 4869, 973: 7997},
{191, 191, 6: 191, 191, 191, 10: 191, 17: 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 115: 191, 117: 191, 120: 191, 191, 124: 191, 191, 127: 191, 191, 191, 191, 191, 589: 191, 592: 191, 191, 606: 191, 618: 191, 763: 191, 191, 775: 191},
{192, 192, 6: 192, 192, 192, 10: 192, 17: 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 115: 192, 117: 192, 120: 192, 192, 124: 192, 192, 127: 192, 192, 192, 192, 192, 589: 192, 592: 192, 192, 606: 192, 618: 192, 763: 192, 192, 775: 192},
{597: 4870, 4871, 604: 3284, 854: 4867, 880: 4869, 973: 8002},
{597: 4870, 4871, 604: 3284, 854: 4867, 880: 4869, 973: 8001},
// 4905
{193, 193, 6: 193, 193, 193, 10: 193, 17: 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 115: 193, 117: 193, 120: 193, 193, 124: 193, 193, 127: 193, 193, 193, 193, 193, 589: 193, 592: 193, 193, 606: 193, 618: 193, 763: 193, 193, 775: 193},
{194, 194, 6: 194, 194, 194, 10: 194, 17: 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 115: 194, 117: 194, 120: 194, 194, 124: 194, 194, 127: 194, 194, 194, 194, 194, 589: 194, 592: 194, 194, 606: 194, 618: 194, 763: 194, 194, 775: 194},
{195, 195, 6: 195, 195, 195, 10: 195, 17: 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 115: 195, 117: 195, 120: 195, 195, 124: 195, 195, 127: 195, 195, 195, 195, 589: 195, 592: 195, 195, 606: 195, 618: 195, 763: 195, 195, 775: 195},
{199, 199},
{2: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 10: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 64: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 589: 2289, 631: 5806, 915: 8006},
// 4910
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 589: 3289, 826: 3288, 3292, 3293, 3291, 980: 8007},
{134: 8014, 8012, 8011, 8013, 8010, 1052: 8008, 1334: 8009},
{3080, 3080, 9: 3080, 134: 3080, 3080, 3080, 3080, 3080},
{214, 214, 9: 8074, 134: 8014, 8012, 8011, 8013, 8010, 1052: 8073},
{257: 2504, 604: 2504, 4917, 855: 8070},
// 4915
{349: 2504, 361: 2504, 2504, 605: 4917, 855: 8065},
{3053, 3053, 9: 3053, 134: 3053, 3053, 3053, 3053, 3053, 251: 2504, 257: 2504, 364: 2504, 605: 4917, 855: 8061},
{583: 2504, 601: 2504, 605: 4917, 855: 8031},
{583: 2504, 601: 2504, 605: 4917, 855: 8015},
{583: 8016, 601: 8017},
// 4920
{63: 8019, 222: 8021, 8022, 1120: 8020, 1527: 8018},
{3044, 3044, 9: 3044, 134: 3044, 3044, 3044, 3044, 3044},
{9: 8029, 63: 8027, 222: 8021, 8022, 1120: 8028},
{3045, 3045, 9: 3045, 134: 3045, 3045, 3045, 3045, 3045},
{9: 3043, 63: 3043, 222: 3043, 3043},
// 4925
{585: 2504, 605: 4917, 855: 8025},
{604: 2504, 4917, 855: 8023},
{604: 3284, 854: 4175, 865: 8024},
{9: 3039, 63: 3039, 222: 3039, 3039},
{585: 8026},
// 4930
{9: 3040, 63: 3040, 222: 3040, 3040},
{3046, 3046, 9: 3046, 134: 3046, 3046, 3046, 3046, 3046},
{9: 3042, 63: 3042, 222: 3042, 3042},
{222: 8021, 8022, 1120: 8030},
{9: 3041, 63: 3041, 222: 3041, 3041},
// 4935
{583: 8032, 601: 8033},
{63: 8041, 119: 8039, 156: 8040, 158: 8036, 8037, 8038, 1121: 8034, 1529: 8035},
{3047, 3047, 9: 3047, 134: 3047, 3047, 3047, 3047, 3047},
{9: 3074, 63: 3074, 119: 3074, 156: 3074, 158: 3074, 3074, 3074},
{9: 8058, 63: 8059, 119: 8039, 156: 8040, 158: 8036, 8037, 8038, 1121: 8057},
// 4940
{585: 2504, 605: 4917, 855: 8055},
{604: 2504, 4917, 855: 8053},
{604: 2504, 4917, 855: 8051},
{265: 2504, 268: 2504, 284: 2504, 605: 4917, 855: 8049, 1004: 2504},
{140: 2504, 296: 2504, 309: 2504, 605: 4917, 855: 8042},
// 4945
{3048, 3048, 9: 3048, 134: 3048, 3048, 3048, 3048, 3048},
{140: 4912, 296: 4910, 309: 4911, 1336: 8043},
{9: 3059, 63: 3059, 119: 3059, 143: 8045, 156: 3059, 158: 3059, 3059, 3059, 1595: 8044},
{9: 3060, 63: 3060, 119: 3060, 156: 3060, 158: 3060, 3060, 3060},
{257: 2504, 585: 2504, 605: 4917, 855: 8046},
// 4950
{257: 8048, 585: 8047},
{9: 3058, 63: 3058, 119: 3058, 156: 3058, 158: 3058, 3058, 3058},
{9: 3057, 63: 3057, 119: 3057, 156: 3057, 158: 3057, 3057, 3057},
{265: 4920, 268: 4919, 284: 4922, 1004: 4921, 1335: 8050},
{9: 3061, 63: 3061, 119: 3061, 156: 3061, 158: 3061, 3061, 3061},
// 4955
{604: 8052},
{9: 3062, 63: 3062, 119: 3062, 156: 3062, 158: 3062, 3062, 3062},
{604: 8054},
{9: 3063, 63: 3063, 119: 3063, 156: 3063, 158: 3063, 3063, 3063},
{585: 8056},
// 4960
{9: 3064, 63: 3064, 119: 3064, 156: 3064, 158: 3064, 3064, 3064},
{9: 3073, 63: 3073, 119: 3073, 156: 3073, 158: 3073, 3073, 3073},
{119: 8039, 156: 8040, 158: 8036, 8037, 8038, 1121: 8060},
{3049, 3049, 9: 3049, 134: 3049, 3049, 3049, 3049, 3049},
{9: 3072, 63: 3072, 119: 3072, 156: 3072, 158: 3072, 3072, 3072},
// 4965
{251: 8064, 257: 8063, 364: 8062},
{3052, 3052, 9: 3052, 134: 3052, 3052, 3052, 3052, 3052},
{3051, 3051, 9: 3051, 134: 3051, 3051, 3051, 3051, 3051},
{3050, 3050, 9: 3050, 134: 3050, 3050, 3050, 3050, 3050},
{349: 8068, 361: 8066, 8067, 1528: 8069},
// 4970
{3077, 3077, 9: 3077, 134: 3077, 3077, 3077, 3077, 3077},
{3076, 3076, 9: 3076, 134: 3076, 3076, 3076, 3076, 3076},
{3075, 3075, 9: 3075, 134: 3075, 3075, 3075, 3075, 3075},
{3054, 3054, 9: 3054, 134: 3054, 3054, 3054, 3054, 3054},
{257: 8072, 604: 3284, 854: 4175, 865: 8071},
// 4975
{3056, 3056, 9: 3056, 134: 3056, 3056, 3056, 3056, 3056},
{3055, 3055, 9: 3055, 134: 3055, 3055, 3055, 3055, 3055},
{3079, 3079, 9: 3079, 134: 3079, 3079, 3079, 3079, 3079},
{134: 8014, 8012, 8011, 8013, 8010, 1052: 8075},
{3078, 3078, 9: 3078, 134: 3078, 3078, 3078, 3078, 3078},
// 4980
{594: 8078, 613: 8077, 617: 8079},
{583: 3150, 586: 3149, 600: 3148, 603: 3134, 640: 3133, 642: 3147, 692: 3143, 766: 3263, 830: 6995, 858: 6993, 861: 6996, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 6994, 6998, 6997, 877: 3262, 7000, 7001, 881: 7002, 6999, 994: 8086},
{583: 3150, 586: 3149, 600: 3148, 603: 3134, 640: 3133, 642: 3147, 692: 3143, 766: 3263, 830: 6995, 858: 6993, 861: 6996, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 6994, 6998, 6997, 877: 3262, 7000, 7001, 881: 7002, 6999, 994: 8085},
{299: 8080},
{594: 8081},
// 4985
{140: 8082},
{258: 8083},
{585: 7734, 668: 3872, 831: 7735, 1160: 7732, 1366: 8084},
{401, 401, 9: 7736},
{402, 402},
// 4990
{594: 8087},
{583: 3150, 586: 3149, 600: 3148, 603: 3134, 640: 3133, 642: 3147, 692: 3143, 766: 3263, 830: 6995, 858: 6993, 861: 6996, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 6994, 6998, 6997, 877: 3262, 7000, 7001, 881: 7002, 6999, 994: 8088},
{403, 403},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 6962, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 6967, 826: 4046, 3292, 3293, 3291, 860: 6383, 954: 6969, 981: 8091, 6968, 1342: 8092, 1530: 8090},
{478, 478, 9: 8093},
// 4995
{414, 414, 9: 414},
{413, 413, 9: 413},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 6962, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 6967, 826: 4046, 3292, 3293, 3291, 860: 6383, 954: 6969, 981: 8091, 6968, 1342: 8094},
{412, 412, 9: 412},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 687: 6429, 826: 4046, 3292, 3293, 3291, 860: 6428, 910: 6446, 1080: 6447, 1110: 8096},
// 5000
{460, 460, 6: 460, 9: 6449, 17: 460, 62: 460, 64: 460, 66: 460, 460, 460, 586: 460, 779: 6494, 1149: 6493, 8097},
{468, 468, 6: 468, 17: 468, 62: 468, 64: 468, 66: 468, 468, 468, 586: 8099, 1204: 8098},
{441, 441, 6: 441, 17: 8115, 62: 441, 64: 441, 66: 8114, 8116, 8117, 1142: 8113, 1311: 8112, 8111},
{203: 8104, 8102, 8103, 8105, 1203: 8101, 1424: 8100},
{467, 467, 6: 467, 17: 467, 62: 467, 64: 467, 66: 467, 467, 467, 203: 8104, 8102, 8103, 8105, 1203: 8110},
// 5005
{466, 466, 6: 466, 17: 466, 62: 466, 64: 466, 66: 466, 466, 466, 203: 466, 466, 466, 466},
{604: 3284, 854: 4867, 880: 8109},
{604: 3284, 854: 4867, 880: 8108},
{604: 3284, 854: 4867, 880: 8107},
{604: 3284, 854: 4867, 880: 8106},
// 5010
{461, 461, 6: 461, 17: 461, 62: 461, 64: 461, 66: 461, 461, 461, 203: 461, 461, 461, 461},
{462, 462, 6: 462, 17: 462, 62: 462, 64: 462, 66: 462, 462, 462, 203: 462, 462, 462, 462},
{463, 463, 6: 463, 17: 463, 62: 463, 64: 463, 66: 463, 463, 463, 203: 463, 463, 463, 463},
{464, 464, 6: 464, 17: 464, 62: 464, 64: 464, 66: 464, 464, 464, 203: 464, 464, 464, 464},
{465, 465, 6: 465, 17: 465, 62: 465, 64: 465, 66: 465, 465, 465, 203: 465, 465, 465, 465},
// 5015
{446, 446, 6: 8142, 62: 446, 64: 8143, 1201: 8141},
{440, 440, 6: 440, 17: 8115, 62: 440, 64: 440, 66: 8114, 8116, 8117, 1142: 8140},
{439, 439, 6: 439, 17: 439, 62: 439, 64: 439, 66: 439, 439, 439},
{615: 8139, 1167: 8138},
{299: 8121, 435: 8123, 475: 8122, 779: 8124},
// 5020
{604: 3284, 854: 4867, 880: 8120},
{246: 8119, 604: 3284, 854: 4867, 880: 8118},
{426, 426, 6: 426, 17: 426, 62: 426, 64: 426, 66: 426, 426, 426},
{425, 425, 6: 425, 17: 425, 62: 425, 64: 425, 66: 425, 425, 425},
{427, 427, 6: 427, 17: 427, 62: 427, 64: 427, 66: 427, 427, 427},
// 5025
{589: 8136, 604: 3284, 854: 8137},
{696: 8132},
{431, 431, 6: 431, 17: 431, 62: 431, 64: 431, 66: 431, 431, 431, 452: 8128, 589: 8129, 696: 8127},
{228: 8125},
{589: 8126},
// 5030
{424, 424, 6: 424, 17: 424, 62: 424, 64: 424, 66: 424, 424, 424},
{604: 3284, 854: 4867, 880: 8130},
{429, 429, 6: 429, 17: 429, 62: 429, 64: 429, 66: 429, 429, 429},
{428, 428, 6: 428, 17: 428, 62: 428, 64: 428, 66: 428, 428, 428},
{163: 8131},
// 5035
{430, 430, 6: 430, 17: 430, 62: 430, 64: 430, 66: 430, 430, 430},
{589: 8133, 604: 3284, 854: 8134},
{433, 433, 6: 433, 17: 433, 62: 433, 64: 433, 66: 433, 433, 433},
{163: 8135},
{432, 432, 6: 432, 17: 432, 62: 432, 64: 432, 66: 432, 432, 432},
// 5040
{435, 435, 6: 435, 17: 435, 62: 435, 64: 435, 66: 435, 435, 435},
{434, 434, 6: 434, 17: 434, 62: 434, 64: 434, 66: 434, 434, 434},
{437, 437, 6: 437, 17: 437, 62: 437, 64: 437, 66: 437, 437, 437},
{436, 436, 6: 436, 17: 436, 62: 436, 64: 436, 66: 436, 436, 436},
{438, 438, 6: 438, 17: 438, 62: 438, 64: 438, 66: 438, 438, 438},
// 5045
{443, 443, 62: 8147, 1333: 8146},
{585: 8145},
{585: 8144},
{444, 444, 62: 444},
{445, 445, 62: 445},
// 5050
{479, 479},
{625: 8148},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 589: 3289, 826: 3288, 3292, 3293, 3291, 980: 8149},
{442, 442},
{20: 2552, 112: 2552, 162: 2552, 229: 2552, 249: 2552, 757: 2552},
// 5055
{162: 2547, 229: 8216, 757: 2547, 1589: 8215},
{605: 8211},
{195: 8167},
{195: 8155},
{2: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 10: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 64: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 631: 5806, 915: 8156},
// 5060
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5738, 3292, 3293, 3291, 963: 8157},
{584: 8158},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 8159},
{583: 8160},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 8161, 3292, 3293, 3291},
// 5065
{63: 8162},
{591: 8163},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3893, 3888, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3885, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3897, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3898, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3901, 3471, 3890, 3756, 3910, 3892, 3908, 3909, 3907, 3903, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3899, 3886, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3889, 3592, 3895, 3674, 3360, 3638, 3493, 3497, 3896, 3316, 3522, 3914, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3891, 3764, 3768, 3447, 3373, 3532, 3710, 3883, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3906, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3884, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3902, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3916, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3894, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3913, 3296, 3426, 3743, 3744, 3887, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3915, 3763, 3569, 3843, 3844, 3921, 3920, 3922, 3911, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3904, 3905, 3776, 3912, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3917, 3787, 3788, 3479, 3918, 3919, 3812, 3416, 3795, 3796, 3797, 3832, 3900, 3951, 585: 3933, 588: 3949, 3959, 4032, 595: 3964, 3968, 3948, 3947, 3987, 3960, 3924, 603: 3967, 3928, 606: 3985, 631: 3962, 637: 3955, 640: 3986, 663: 3957, 3966, 667: 3923, 4030, 3925, 3927, 3926, 687: 3969, 3931, 693: 3932, 695: 3952, 4037, 3942, 3954, 700: 3961, 3953, 3930, 3958, 3983, 3965, 3970, 3975, 3976, 3977, 4028, 4006, 713: 3945, 3946, 4001, 4002, 4003, 4004, 4005, 3956, 3988, 3998, 3999, 3992, 4007, 4008, 4009, 3993, 4011, 4012, 3994, 4010, 3989, 3997, 3995, 3981, 4013, 4014, 4018, 3971, 3974, 4017, 4023, 4022, 4024, 4021, 4025, 4020, 4019, 4016, 4015, 3973, 3972, 3978, 3979, 765: 4033, 826: 3934, 3292, 3293, 3291, 3950, 4027, 3941, 3929, 3935, 4000, 3938, 3936, 3937, 3980, 3991, 3990, 3984, 3982, 3996, 4038, 3944, 4026, 3943, 3940, 4036, 4035, 4034, 8164},
{207, 207, 225: 207, 207, 620: 4054, 4052, 4053, 4051, 4049, 646: 5931, 856: 4050, 4048, 1284: 8165},
{210, 210, 225: 5939, 5938, 1286: 8166},
// 5070
{201, 201},
{2: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 10: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 64: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 631: 5806, 915: 8168},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5738, 3292, 3293, 3291, 963: 8169},
{132: 8173, 144: 8178, 8180, 8174, 8179, 8182, 8176, 8172, 8177, 8183, 8181, 8175, 1051: 8170, 1313: 8171},
{3038, 3038, 9: 3038, 132: 3038, 144: 3038, 3038, 3038, 3038, 3038, 3038, 3038, 3038, 3038, 3038, 3038},
// 5075
{211, 211, 9: 8209, 132: 8173, 144: 8178, 8180, 8174, 8179, 8182, 8176, 8172, 8177, 8183, 8181, 8175, 1051: 8208},
{585: 2504, 605: 4917, 855: 8206},
{585: 2504, 605: 4917, 855: 8204},
{604: 2504, 4917, 855: 8202},
{604: 2504, 4917, 855: 8200},
// 5080
{604: 2504, 4917, 855: 8198},
{585: 2504, 605: 4917, 855: 8196},
{585: 2504, 605: 4917, 855: 8194},
{585: 2504, 605: 4917, 855: 8192},
{585: 2504, 605: 4917, 855: 8190},
// 5085
{585: 2504, 605: 4917, 855: 8188},
{585: 2504, 605: 4917, 855: 8186},
{585: 2504, 605: 4917, 855: 8184},
{585: 8185},
{3024, 3024, 9: 3024, 132: 3024, 144: 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024, 3024},
// 5090
{585: 8187},
{3025, 3025, 9: 3025, 132: 3025, 144: 3025, 3025, 3025, 3025, 3025, 3025, 3025, 3025, 3025, 3025, 3025},
{585: 8189},
{3026, 3026, 9: 3026, 132: 3026, 144: 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026, 3026},
{585: 8191},
// 5095
{3027, 3027, 9: 3027, 132: 3027, 144: 3027, 3027, 3027, 3027, 3027, 3027, 3027, 3027, 3027, 3027, 3027},
{585: 8193},
{3028, 3028, 9: 3028, 132: 3028, 144: 3028, 3028, 3028, 3028, 3028, 3028, 3028, 3028, 3028, 3028, 3028},
{585: 8195},
{3029, 3029, 9: 3029, 132: 3029, 144: 3029, 3029, 3029, 3029, 3029, 3029, 3029, 3029, 3029, 3029, 3029},
// 5100
{585: 8197},
{3030, 3030, 9: 3030, 132: 3030, 144: 3030, 3030, 3030, 3030, 3030, 3030, 3030, 3030, 3030, 3030, 3030},
{604: 3284, 854: 4175, 865: 8199},
{3031, 3031, 9: 3031, 132: 3031, 144: 3031, 3031, 3031, 3031, 3031, 3031, 3031, 3031, 3031, 3031, 3031},
{604: 3284, 854: 4175, 865: 8201},
// 5105
{3032, 3032, 9: 3032, 132: 3032, 144: 3032, 3032, 3032, 3032, 3032, 3032, 3032, 3032, 3032, 3032, 3032},
{604: 3284, 854: 4175, 865: 8203},
{3033, 3033, 9: 3033, 132: 3033, 144: 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033, 3033},
{585: 8205},
{3034, 3034, 9: 3034, 132: 3034, 144: 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034},
// 5110
{585: 8207},
{3035, 3035, 9: 3035, 132: 3035, 144: 3035, 3035, 3035, 3035, 3035, 3035, 3035, 3035, 3035, 3035, 3035},
{3037, 3037, 9: 3037, 132: 3037, 144: 3037, 3037, 3037, 3037, 3037, 3037, 3037, 3037, 3037, 3037, 3037},
{132: 8173, 144: 8178, 8180, 8174, 8179, 8182, 8176, 8172, 8177, 8183, 8181, 8175, 1051: 8210},
{3036, 3036, 9: 3036, 132: 3036, 144: 3036, 3036, 3036, 3036, 3036, 3036, 3036, 3036, 3036, 3036, 3036},
// 5115
{4: 8213, 490: 8214, 499: 8212},
{162: 2550, 229: 2550, 757: 2550},
{162: 2549, 229: 2549, 757: 2549},
{162: 2548, 229: 2548, 757: 2548},
{162: 2545, 757: 8220, 1592: 8219},
// 5120
{605: 8217},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 687: 6429, 826: 4046, 3292, 3293, 3291, 860: 6428, 910: 8218},
{162: 2546, 757: 2546},
{162: 8224},
{478: 8221},
// 5125
{229: 8222, 444: 8223},
{162: 2544},
{162: 2543},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 8226, 1591: 8225},
{583: 8228, 591: 2541, 1590: 8227},
// 5130
{583: 2542, 591: 2542},
{591: 8234},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 8230, 3292, 3293, 3291, 1419: 8229},
{9: 8232, 63: 8231},
{9: 2539, 63: 2539},
// 5135
{591: 2540},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 8233, 3292, 3293, 3291},
{9: 2538, 63: 2538},
{583: 3150, 586: 3149, 600: 3148, 642: 3147, 692: 3143, 830: 8238, 861: 8236, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 4155, 8237, 8235, 1429: 8239},
{2560, 2560, 586: 2560},
// 5140
{2559, 2559, 586: 2559, 593: 1113, 607: 1113, 1113},
{2558, 2558, 586: 2558},
{2557, 2557, 586: 2557, 593: 1112, 607: 1112, 1112, 610: 4168, 612: 4167, 619: 4166, 897: 4169, 4170},
{2537, 2537, 586: 8241, 1588: 8240},
{2554, 2554},
// 5145
{69: 8243, 417: 8242},
{756: 8246},
{756: 8244},
{1067: 8245},
{2535, 2535},
// 5150
{1067: 8247},
{2536, 2536},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 6553, 3292, 3293, 3291, 966: 8249},
{2652, 2652, 18: 2643, 20: 2643, 24: 2643, 589: 5102, 592: 2643, 606: 2643, 611: 8253, 763: 2643, 921: 8252, 948: 8251, 1028: 8255, 1118: 8254, 1431: 8250},
{2663, 2663},
// 5155
{18: 4738, 20: 5059, 24: 8263, 592: 8262, 606: 4739, 763: 4737, 908: 8261, 921: 8264},
{2654, 2654, 18: 2654, 20: 2654, 24: 2654, 589: 2654, 592: 2654, 606: 2654, 611: 2654, 763: 2654},
{245: 8257},
{2651, 2651, 18: 2643, 20: 2643, 24: 2643, 589: 5102, 592: 2643, 606: 2643, 611: 8253, 763: 2643, 921: 8252, 948: 8251, 1028: 8256},
{2650, 2650, 18: 2650, 20: 2650, 24: 2650, 589: 2650, 592: 2650, 606: 2650, 611: 2650, 763: 2650},
// 5160
{2649, 2649, 18: 2649, 20: 2649, 24: 2649, 589: 2649, 592: 2649, 606: 2649, 611: 2649, 763: 2649},
{254: 8258},
{604: 3284, 854: 4175, 865: 8259},
{3006, 3006, 18: 3006, 20: 3006, 24: 3006, 259: 6030, 589: 3006, 592: 3006, 606: 3006, 611: 3006, 763: 3006, 1134: 8260},
{2653, 2653, 18: 2653, 20: 2653, 24: 2653, 589: 2653, 592: 2653, 606: 2653, 611: 2653, 763: 2653},
// 5165
{2: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 10: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 64: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 585: 2504, 605: 4917, 637: 2504, 855: 8269},
{2: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 10: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 64: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 585: 2504, 605: 4917, 637: 2504, 855: 8267},
{585: 2504, 605: 4917, 855: 8265},
{2655, 2655, 18: 2655, 20: 2655, 24: 2655, 589: 2655, 592: 2655, 606: 2655, 611: 2655, 763: 2655},
{585: 5200, 1241: 8266},
// 5170
{2656, 2656, 18: 2656, 20: 2656, 24: 2656, 589: 2656, 592: 2656, 606: 2656, 611: 2656, 763: 2656},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 637: 4044, 826: 4046, 3292, 3293, 3291, 860: 4043, 1048: 8268},
{2657, 2657, 18: 2657, 20: 2657, 24: 2657, 589: 2657, 592: 2657, 606: 2657, 611: 2657, 763: 2657},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 637: 4666, 826: 4046, 3292, 3293, 3291, 860: 4665, 965: 8270},
{2658, 2658, 18: 2658, 20: 2658, 24: 2658, 589: 2658, 592: 2658, 606: 2658, 611: 2658, 763: 2658},
// 5175
{2: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 10: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 64: 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 2289, 631: 5806, 915: 8272},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 8273, 3292, 3293, 3291},
{106: 5829, 584: 2265, 594: 5828, 987: 8275, 1461: 8274},
{584: 8276},
{584: 2264},
// 5180
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 8277},
{583: 8278},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 5526, 826: 4336, 3292, 3293, 3291, 876: 5525, 968: 5524, 978: 8279},
{9: 5535, 63: 8280},
{2283, 2283, 6: 2283, 2283, 21: 2283, 2283, 69: 2283, 71: 2283, 106: 2283, 2283, 2283, 2283, 2283, 2283, 2283, 586: 2283, 594: 2283, 609: 2283, 615: 2283, 1003: 8281},
// 5185
{2676, 2676, 6: 5820, 5826, 21: 5816, 5825, 69: 5824, 71: 5823, 106: 5829, 5656, 5334, 5657, 5333, 5817, 5097, 586: 5819, 594: 5828, 609: 5827, 615: 5098, 986: 5821, 5818, 992: 5822, 1002: 5815, 1041: 7773, 1062: 7772, 1266: 8282},
{2683, 2683},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 8284, 3292, 3293, 3291},
{583: 8285},
{323: 5947, 331: 5949, 334: 5948, 1365: 8286},
// 5190
{63: 8287},
{584: 8288},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 8289},
{583: 8290},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 4336, 3292, 3293, 3291, 876: 4337, 959: 8291},
// 5195
{9: 4339, 63: 8292},
{2685, 2685},
{2800, 2800},
{2823, 2823},
{2829, 2829, 586: 8297, 792: 8296},
// 5200
{241: 8304, 823: 8303},
{418: 8299, 427: 8298},
{74: 8302},
{426: 8300},
{241: 8301},
// 5205
{2826, 2826},
{2827, 2827},
{2828, 2828},
{2825, 2825, 794: 5008, 1082: 8305},
{2824, 2824},
// 5210
{2831, 2831},
{2830, 2830},
{353: 8310, 642: 8309},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 8322, 939: 8321},
{642: 8311},
// 5215
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 8312},
{587: 8314, 764: 8313},
{1207, 1207, 3731, 3552, 3516, 3387, 3431, 3348, 3554, 1207, 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 586: 1207, 712: 6083, 826: 6082, 3292, 3293, 3291, 1033: 8319},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5683, 3292, 3293, 3291, 916: 8315},
{9: 5684, 764: 8316},
// 5220
{1207, 1207, 3731, 3552, 3516, 3387, 3431, 3348, 3554, 1207, 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 586: 1207, 712: 6083, 826: 6082, 3292, 3293, 3291, 1033: 8317},
{2847, 2847, 9: 6085, 586: 6064, 958: 8318},
{2855, 2855},
{2847, 2847, 9: 6085, 586: 6064, 958: 8320},
{2858, 2858},
// 5225
{2850, 2850, 9: 4240, 253: 8342, 586: 2850, 770: 8341, 1177: 8352},
{1355, 1355, 9: 1355, 157: 8327, 253: 1355, 586: 1355, 8324, 764: 8323, 766: 8325, 770: 1355, 789: 8326},
{1207, 1207, 3731, 3552, 3516, 3387, 3431, 3348, 3554, 1207, 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 586: 1207, 712: 6083, 826: 6082, 3292, 3293, 3291, 1033: 8350},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5683, 3292, 3293, 3291, 916: 8337},
{350: 8333},
// 5230
{350: 8330},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 6631, 3292, 3293, 3291, 1057: 8328},
{2847, 2847, 9: 6633, 586: 6064, 958: 8329},
{2852, 2852},
{584: 8331},
// 5235
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 6631, 3292, 3293, 3291, 1057: 8332},
{2853, 2853, 9: 6633},
{584: 8334},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 6631, 3292, 3293, 3291, 1057: 8335},
{2847, 2847, 9: 6633, 586: 6064, 958: 8336},
// 5240
{2854, 2854},
{2850, 2850, 9: 5684, 157: 8340, 253: 8342, 586: 2850, 764: 8339, 770: 8341, 1177: 8338},
{2847, 2847, 586: 6064, 958: 8349},
{1207, 1207, 3731, 3552, 3516, 3387, 3431, 3348, 3554, 1207, 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 586: 1207, 712: 6083, 826: 6082, 3292, 3293, 3291, 1033: 8347},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 6631, 3292, 3293, 3291, 1057: 8345},
// 5245
{157: 8344},
{157: 8343},
{2848, 2848, 586: 2848},
{2849, 2849, 586: 2849},
{2847, 2847, 9: 6633, 586: 6064, 958: 8346},
// 5250
{2851, 2851},
{2847, 2847, 9: 6085, 586: 6064, 958: 8348},
{2856, 2856},
{2857, 2857},
{2847, 2847, 9: 6085, 586: 6064, 958: 8351},
// 5255
{2859, 2859},
{2847, 2847, 586: 6064, 958: 8353},
{2860, 2860},
{642: 8359},
{613: 8357},
// 5260
{642: 2862},
{587: 8358, 642: 2863},
{642: 2861},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 8360},
{587: 6636, 673: 1223, 764: 1223, 776: 1223, 1005: 8361},
// 5265
{673: 5844, 764: 8363, 776: 5846, 1013: 5845, 1157: 8362},
{2869, 2869},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 8364, 3292, 3293, 3291},
{673: 5844, 776: 5846, 1013: 5845, 1157: 8365},
{2868, 2868},
// 5270
{227: 8375},
{227: 8373},
{227: 8371},
{217: 8370},
{147, 147},
// 5275
{604: 3284, 854: 4867, 880: 8372},
{2386, 2386},
{604: 3284, 854: 4867, 880: 8374},
{2453, 2453},
{604: 3284, 854: 4867, 880: 8376},
// 5280
{2870, 2870},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 8378},
{377: 1223, 587: 6636, 1005: 8379},
{377: 8380},
{585: 2504, 605: 4917, 855: 8381},
// 5285
{585: 8382},
{25: 8383},
{585: 2504, 605: 4917, 855: 8384},
{585: 8385},
{2872, 2872, 491: 8386},
// 5290
{585: 2504, 605: 4917, 855: 8387},
{585: 8388},
{2871, 2871},
{819: 8407, 8408},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 8401, 939: 8400},
// 5295
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 6553, 3292, 3293, 3291, 966: 8392},
{2875, 2875, 767: 8395, 819: 8393, 8394, 1250: 8396},
{585: 8399},
{604: 3284, 854: 4175, 865: 8398},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 8397, 3292, 3293, 3291},
// 5300
{2873, 2873},
{2874, 2874},
{2877, 2877},
{2880, 2880},
{9: 4240, 819: 8403, 8404},
// 5305
{2875, 2875, 9: 1355, 767: 8395, 819: 1355, 1355, 1250: 8402},
{2876, 2876},
{585: 8406},
{604: 3284, 854: 4175, 865: 8405},
{2878, 2878},
// 5310
{2881, 2881},
{585: 8410},
{604: 3284, 854: 4175, 865: 8409},
{2879, 2879},
{2882, 2882},
// 5315
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 776: 8412, 826: 4236, 3292, 3293, 3291, 859: 8413},
{227: 8415},
{2884, 2884, 604: 3284, 854: 4867, 880: 8414},
{2883, 2883},
{604: 3284, 854: 4867, 880: 8416},
// 5320
{2885, 2885},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 8428, 1374: 8427, 1575: 8426},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 687: 6429, 826: 4046, 3292, 3293, 3291, 860: 6428, 910: 8421, 1383: 8420, 1582: 8419},
{2889, 2889, 9: 8424},
{2888, 2888, 9: 2888},
// 5325
{767: 8422},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 687: 6429, 826: 4046, 3292, 3293, 3291, 860: 6428, 910: 8423},
{2886, 2886, 9: 2886},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 687: 6429, 826: 4046, 3292, 3293, 3291, 860: 6428, 910: 8421, 1383: 8425},
{2887, 2887, 9: 2887},
// 5330
{2893, 2893, 9: 8431},
{2892, 2892, 9: 2892},
{767: 8429},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 8430},
{2890, 2890, 9: 2890},
// 5335
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 8428, 1374: 8432},
{2891, 2891, 9: 2891},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 2643, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 589: 5102, 592: 2643, 606: 2643, 611: 8253, 763: 2643, 826: 6553, 3292, 3293, 3291, 921: 8252, 948: 8251, 966: 8482, 1028: 8255, 1118: 8483},
{2: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 10: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 64: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 585: 2291, 631: 5356, 687: 2291, 914: 8468},
{374: 8462, 1463: 8461},
// 5340
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 8459, 3292, 3293, 3291},
{625: 8455},
{195: 8451},
{2: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 10: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 64: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 614: 2291, 631: 5356, 914: 8440},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 614: 4237, 826: 4236, 3292, 3293, 3291, 859: 8441},
// 5345
{115: 7978, 117: 7975, 120: 7981, 7982, 124: 7983, 7976, 127: 7974, 7984, 7980, 7977, 8445, 775: 7979, 1104: 8444, 1185: 8443, 1397: 8442},
{174, 174, 115: 7978, 117: 7975, 120: 7981, 7982, 124: 7983, 7976, 127: 7974, 7984, 7980, 7977, 8445, 775: 7979, 1104: 8444, 1185: 8450},
{173, 173, 115: 173, 117: 173, 120: 173, 173, 124: 173, 173, 127: 173, 173, 173, 173, 173, 775: 173},
{171, 171, 115: 171, 117: 171, 120: 171, 171, 124: 171, 171, 127: 171, 171, 171, 171, 171, 775: 171},
{170, 170, 115: 170, 117: 170, 120: 170, 170, 124: 170, 170, 127: 170, 170, 170, 170, 170, 586: 8447, 597: 2504, 2504, 604: 2504, 4917, 775: 170, 855: 8446},
// 5350
{597: 4870, 4871, 604: 3284, 854: 4867, 880: 4869, 973: 8449},
{597: 4870, 4871, 604: 3284, 854: 4867, 880: 4869, 973: 8448},
{168, 168, 115: 168, 117: 168, 120: 168, 168, 124: 168, 168, 127: 168, 168, 168, 168, 168, 775: 168},
{169, 169, 115: 169, 117: 169, 120: 169, 169, 124: 169, 169, 127: 169, 169, 169, 169, 169, 775: 169},
{172, 172, 115: 172, 117: 172, 120: 172, 172, 124: 172, 172, 127: 172, 172, 172, 172, 172, 775: 172},
// 5355
{2: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 10: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 64: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 631: 5356, 914: 8452},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 826: 5738, 3292, 3293, 3291, 963: 8453},
{132: 8173, 144: 8178, 8180, 8174, 8179, 8182, 8176, 8172, 8177, 8183, 8181, 8175, 1051: 8170, 1313: 8454},
{200, 200, 9: 8209, 132: 8173, 144: 8178, 8180, 8174, 8179, 8182, 8176, 8172, 8177, 8183, 8181, 8175, 1051: 8208},
{2: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 10: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 64: 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291, 589: 2291, 631: 5356, 914: 8456},
// 5360
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 3428, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 589: 3289, 826: 3288, 3292, 3293, 3291, 980: 8457},
{134: 8014, 8012, 8011, 8013, 8010, 1052: 8008, 1334: 8458},
{213, 213, 9: 8074, 134: 8014, 8012, 8011, 8013, 8010, 1052: 8073},
{20: 5059, 921: 8460},
{474, 474},
// 5365
{475, 475},
{492: 8463},
{473, 473, 115: 8464},
{116: 8465},
{584: 8466},
// 5370
{295: 8467},
{472, 472},
{2: 3731, 3552, 3516, 3387, 3431, 3348, 3554, 10: 3307, 3359, 3309, 3454, 3573, 3566, 3646, 3379, 3324, 3434, 3777, 3436, 3381, 3407, 3342, 3345, 3334, 3347, 3370, 3438, 3439, 3548, 3433, 3604, 3574, 3308, 3718, 3725, 3658, 3687, 3306, 3432, 3435, 3446, 3692, 3377, 3688, 3689, 3690, 3442, 3558, 3397, 3482, 3304, 3305, 3481, 3556, 3303, 3571, 3691, 3659, 3660, 3389, 64: 3299, 3290, 3528, 3661, 3662, 3372, 3684, 3366, 3396, 3645, 3399, 3627, 3624, 3681, 3682, 3683, 3616, 3628, 3631, 3632, 3629, 3633, 3634, 3630, 3685, 3857, 3852, 3679, 3623, 3680, 3635, 3618, 3619, 3856, 3622, 3625, 3854, 3626, 3636, 3855, 3678, 3677, 3586, 3654, 3584, 3655, 3585, 3295, 3513, 3313, 3328, 3468, 3392, 3400, 3415, 3294, 3601, 3600, 3402, 3322, 3602, 3597, 3343, 3596, 3603, 3598, 3599, 3390, 3736, 3422, 3867, 3850, 3846, 3866, 3845, 3583, 3778, 3405, 3476, 3759, 3834, 3839, 3826, 3838, 3840, 3829, 3835, 3836, 3837, 3841, 3833, 3568, 3864, 3325, 3858, 3859, 3860, 8469, 3471, 3337, 3756, 3496, 3369, 3489, 3490, 3485, 3443, 3575, 3576, 3577, 3578, 3579, 3580, 3582, 3424, 3297, 3318, 3401, 3406, 3572, 3357, 3448, 3782, 3784, 3653, 3336, 3335, 3592, 3410, 3674, 3360, 3638, 3493, 3497, 3412, 3316, 3522, 3750, 3524, 3501, 3502, 3503, 3504, 3492, 3327, 3523, 3408, 3657, 3314, 3315, 3761, 3349, 3364, 3708, 3440, 3441, 3375, 3789, 3868, 3871, 3473, 3462, 3464, 3709, 3333, 3514, 3367, 3429, 3450, 3391, 3420, 3614, 3344, 3362, 3371, 3727, 3587, 3453, 3495, 3651, 3409, 3729, 3417, 3472, 3564, 3505, 3813, 3647, 3376, 3781, 3589, 3717, 3510, 3869, 3663, 3590, 3779, 3380, 3418, 3639, 3317, 3862, 3702, 3665, 3861, 3363, 3764, 3768, 3447, 3373, 3532, 3710, 3609, 3648, 3467, 3649, 3563, 3714, 3395, 3500, 3863, 3811, 3561, 3457, 3300, 3697, 3319, 3329, 3707, 3339, 3341, 3350, 3817, 3361, 3666, 3546, 3617, 3423, 3477, 3644, 3491, 3460, 3521, 3567, 3449, 3865, 3716, 3404, 3728, 3562, 3693, 3694, 3312, 3469, 3533, 3851, 3748, 3695, 3668, 3698, 3323, 3640, 3699, 3484, 3330, 3535, 3751, 3701, 3530, 3338, 3703, 3544, 3570, 3555, 3705, 3706, 3757, 3740, 3340, 3565, 3354, 3595, 3820, 3365, 3368, 3847, 3545, 3593, 3351, 3529, 3459, 3765, 3588, 3766, 3539, 3591, 3652, 3849, 3848, 3853, 3870, 3474, 3610, 3478, 3537, 3650, 3384, 3385, 3386, 3388, 3509, 3620, 3511, 3394, 3741, 3783, 3713, 3559, 3560, 3498, 3398, 3508, 3541, 3719, 3720, 3302, 3794, 3540, 3842, 3801, 3802, 3803, 3804, 3806, 3805, 3807, 3808, 3809, 3730, 3413, 3542, 3831, 3830, 3421, 3669, 3594, 3613, 3310, 3298, 3615, 3641, 3301, 3696, 3520, 3320, 3321, 3507, 3430, 3675, 3700, 3451, 3326, 3331, 3332, 3704, 3463, 3758, 3465, 3346, 3475, 3353, 3527, 3814, 3356, 3538, 3667, 3470, 3444, 3726, 3767, 3515, 3534, 3581, 3456, 3547, 3769, 3437, 3686, 3526, 3672, 3671, 3673, 3732, 3815, 3378, 3550, 3553, 3643, 3733, 3403, 3734, 3656, 3487, 3488, 3494, 3739, 3773, 3737, 3774, 3775, 3621, 3664, 3393, 3557, 3519, 3455, 3715, 3551, 3721, 3722, 3723, 3724, 3536, 3642, 3549, 3798, 3517, 3411, 3824, 3810, 3670, 3676, 3414, 3445, 3452, 3518, 3419, 3735, 3525, 3742, 3296, 3426, 3743, 3744, 3311, 3745, 3746, 3747, 3816, 3749, 3753, 3752, 3754, 3755, 3352, 3512, 3480, 3355, 3760, 3358, 3825, 3762, 3763, 3569, 3843, 3844, 3822, 3821, 3823, 3611, 3827, 3828, 3771, 3606, 3605, 3531, 3770, 3374, 3711, 3712, 3772, 3608, 3607, 3780, 3486, 3382, 3383, 3637, 3506, 3738, 3466, 3483, 3776, 3612, 3499, 3427, 3543, 3458, 3461, 3818, 3790, 3791, 3792, 3793, 3785, 3819, 3786, 3787, 3788, 3479, 3799, 3800, 3812, 3416, 3795, 3796, 3797, 3832, 3425, 585: 4045, 687: 6429, 826: 4046, 3292, 3293, 3291, 860: 6428, 910: 6446, 1080: 6447, 1110: 8470},
{2115, 2115, 6: 2115, 9: 2115, 17: 2115, 62: 2115, 64: 2115, 66: 2115, 2115, 2115, 231: 2115, 583: 8476, 586: 2115, 668: 2115, 779: 2115, 781: 2115},
{460, 460, 6: 460, 9: 6449, 17: 460, 62: 460, 64: 460, 66: 460, 460, 460, 586: 460, 779: 6494, 1149: 6493, 8471},
// 5375
{468, 468, 6: 468, 17: 468, 62: 468, 64: 468, 66: 468, 468, 468, 586: 8099, 1204: 8472},
{441, 441, 6: 441, 17: 8115, 62: 441, 64: 441, 66: 8114, 8116, 8117, 1142: 8113, 1311: 8112, 8473},
{446, 446, 6: 8142, 62: 446, 64: 8143, 1201: 8474},
{443, 443, 62: 8147, 1333: 8475},
{477, 477},
// 5380
{63: 8477},
{231: 8478},
{776: 8479},
{585: 6462, 1084: 8480},
{476, 476},
// 5385
{18: 1766, 20: 1766, 24: 1766, 195: 6047, 589: 1766, 592: 1766, 606: 1766, 611: 1766, 763: 1766},
{18: 2643, 20: 2643, 24: 2643, 589: 5102, 592: 2643, 606: 2643, 611: 8253, 763: 2643, 921: 8252, 948: 8251, 1028: 8255, 1118: 8484},
{2664, 2664, 18: 2643, 20: 2643, 24: 2643, 589: 5102, 592: 2643, 606: 2643, 611: 8253, 763: 2643, 921: 8252, 948: 8251, 1028: 8256},
{2665, 2665, 18: 2643, 20: 2643, 24: 2643, 589: 5102, 592: 2643, 606: 2643, 611: 8253, 763: 2643, 921: 8252, 948: 8251, 1028: 8256},
{2502, 2502, 3105, 73: 3128, 113: 3107, 3110, 116: 3139, 3108, 3261, 131: 3141, 140: 3277, 155: 3269, 196: 3280, 235: 3125, 242: 3123, 261: 3135, 285: 3278, 289: 3104, 293: 3113, 297: 3159, 303: 3127, 306: 3101, 314: 3158, 3272, 317: 3109, 322: 3279, 333: 3138, 338: 3103, 344: 3136, 346: 3102, 348: 3142, 369: 3129, 371: 3265, 373: 3276, 375: 3131, 384: 3140, 390: 3126, 403: 3118, 583: 3150, 586: 3149, 600: 3148, 603: 3134, 611: 3157, 615: 3271, 629: 3264, 632: 3121, 639: 3119, 3133, 642: 3147, 692: 3143, 766: 3263, 768: 3106, 777: 3099, 789: 3112, 816: 3111, 821: 3273, 3100, 830: 3154, 858: 3114, 861: 3156, 3144, 3145, 3146, 866: 3155, 3153, 3152, 3151, 3117, 3239, 3238, 877: 3262, 3115, 3220, 881: 3231, 3248, 3120, 890: 3116, 894: 3176, 900: 3170, 3174, 3228, 3240, 912: 3178, 3122, 917: 3247, 3249, 953: 3124, 964: 3163, 967: 3219, 969: 3268, 1004: 3275, 1011: 3130, 1017: 3171, 1031: 3266, 1034: 3222, 1036: 3233, 1038: 3237, 1117: 3183, 1167: 3270, 1175: 3192, 3161, 1178: 3162, 3165, 1182: 3168, 3166, 3169, 1186: 3167, 1188: 3164, 3172, 3173, 1192: 3179, 3132, 3218, 3180, 3258, 1205: 3187, 3181, 3182, 3189, 3188, 3190, 3191, 3186, 3193, 3194, 1216: 3185, 3184, 1219: 3175, 3137, 1222: 3195, 3196, 3210, 3197, 3198, 3201, 3200, 3206, 3205, 3207, 3202, 3208, 3209, 3199, 3204, 3203, 1240: 3160, 1243: 3177, 1248: 3214, 3212, 1251: 3213, 3211, 1256: 3216, 3217, 3215, 1262: 3255, 1271: 3274, 3221, 1281: 3223, 3224, 3251, 1288: 3256, 1297: 3257, 1314: 3226, 3227, 1325: 3254, 3232, 1328: 3236, 1330: 3229, 3230, 1337: 3253, 3267, 3235, 3234, 1346: 3241, 1348: 3243, 3242, 1351: 3245, 1353: 3252, 1355: 3244, 1361: 8486, 1376: 3246, 1379: 3259, 3225, 3250},
// 5390
{701, 701},
}
)
var yyDebug = 0
type yyLexer interface {
Lex(lval *yySymType) int
Errorf(format string, a ...interface{}) error
AppendError(err error)
AppendWarn(err error)
Errors() (warns []error, errs []error)
}
type yyLexerEx interface {
yyLexer
Reduced(rule, state int, lval *yySymType) bool
}
func yySymName(c int) (s string) {
x, ok := yyXLAT[c]
if ok {
return yySymNames[x]
}
return __yyfmt__.Sprintf("%d", c)
}
func yylex1(yylex yyLexer, lval *yySymType) (n int) {
n = yylex.Lex(lval)
if n <= 0 {
n = yyEOFCode
}
if yyDebug >= 3 {
__yyfmt__.Printf("\nlex %s(%#x %d), lval: %+v\n", yySymName(n), n, n, lval)
}
return n
}
func yyParse(yylex yyLexer, parser *Parser) int {
const yyError = 1612
yyEx, _ := yylex.(yyLexerEx)
var yyn int
parser.yylval = yySymType{}
yyS := parser.cache
Nerrs := 0 /* number of errors */
Errflag := 0 /* error recovery flag */
yyerrok := func() {
if yyDebug >= 2 {
__yyfmt__.Printf("yyerrok()\n")
}
Errflag = 0
}
_ = yyerrok
yystate := 0
yychar := -1
var yyxchar int
var yyshift int
yyp := -1
goto yystack
ret0:
return 0
ret1:
return 1
yystack:
/* put a state and value onto the stack */
yyp++
if yyp+1 >= len(yyS) {
nyys := make([]yySymType, len(yyS)*2)
copy(nyys, yyS)
yyS = nyys
parser.cache = yyS
}
parser.yyVAL = &yyS[yyp+1]
yyS[yyp].yys = yystate
yynewstate:
if yychar < 0 {
yychar = yylex1(yylex, &parser.yylval)
var ok bool
if yyxchar, ok = yyXLAT[yychar]; !ok {
yyxchar = len(yySymNames) // > tab width
}
}
if yyDebug >= 4 {
var a []int
for _, v := range yyS[:yyp+1] {
a = append(a, v.yys)
}
__yyfmt__.Printf("state stack %v\n", a)
}
row := yyParseTab[yystate]
yyn = 0
if yyxchar < len(row) {
if yyn = int(row[yyxchar]); yyn != 0 {
yyn += yyTabOfs
}
}
switch {
case yyn > 0: // shift
yychar = -1
*parser.yyVAL = parser.yylval
yystate = yyn
yyshift = yyn
if yyDebug >= 2 {
__yyfmt__.Printf("shift, and goto state %d\n", yystate)
}
if Errflag > 0 {
Errflag--
}
goto yystack
case yyn < 0: // reduce
case yystate == 1: // accept
if yyDebug >= 2 {
__yyfmt__.Println("accept")
}
goto ret0
}
if yyn == 0 {
/* error ... attempt to resume parsing */
switch Errflag {
case 0: /* brand new error */
if yyDebug >= 1 {
__yyfmt__.Printf("no action for %s in state %d\n", yySymName(yychar), yystate)
}
msg, ok := yyXErrors[yyXError{yystate, yyxchar}]
if !ok {
msg, ok = yyXErrors[yyXError{yystate, -1}]
}
if !ok && yyshift != 0 {
msg, ok = yyXErrors[yyXError{yyshift, yyxchar}]
}
if !ok {
msg, ok = yyXErrors[yyXError{yyshift, -1}]
}
if !ok || msg == "" {
msg = "syntax error"
}
// ignore goyacc error message
yylex.AppendError(yylex.Errorf(""))
Nerrs++
fallthrough
case 1, 2: /* incompletely recovered error ... try again */
Errflag = 3
/* find a state where "error" is a legal shift action */
for yyp >= 0 {
row := yyParseTab[yyS[yyp].yys]
if yyError < len(row) {
yyn = int(row[yyError]) + yyTabOfs
if yyn > 0 { // hit
if yyDebug >= 2 {
__yyfmt__.Printf("error recovery found error shift in state %d\n", yyS[yyp].yys)
}
yystate = yyn /* simulate a shift of "error" */
goto yystack
}
}
/* the current p has no shift on "error", pop stack */
if yyDebug >= 2 {
__yyfmt__.Printf("error recovery pops state %d\n", yyS[yyp].yys)
}
yyp--
}
/* there is no state on the stack with an error shift ... abort */
if yyDebug >= 2 {
__yyfmt__.Printf("error recovery failed\n")
}
goto ret1
case 3: /* no shift yet; clobber input char */
if yyDebug >= 2 {
__yyfmt__.Printf("error recovery discards %s\n", yySymName(yychar))
}
if yychar == yyEOFCode {
goto ret1
}
yychar = -1
goto yynewstate /* try again in the same state */
}
}
r := -yyn
x0 := yyReductions[r]
x, n := x0.xsym, x0.components
yypt := yyp
_ = yypt // guard against "declared and not used"
yyp -= n
if yyp+1 >= len(yyS) {
nyys := make([]yySymType, len(yyS)*2)
copy(nyys, yyS)
yyS = nyys
parser.cache = yyS
}
parser.yyVAL = &yyS[yyp+1]
/* consult goto table to find next state */
exState := yystate
yystate = int(yyParseTab[yyS[yyp].yys][x]) + yyTabOfs
/* reduction by production r */
if yyDebug >= 2 {
__yyfmt__.Printf("reduce using rule %v (%s), and goto state %d\n", r, yySymNames[x], yystate)
}
switch r {
case 2:
{
specs := yyS[yypt-1].item.([]*ast.AlterTableSpec)
if yyS[yypt-0].item != nil {
specs = append(specs, yyS[yypt-0].item.(*ast.AlterTableSpec))
}
parser.yyVAL.statement = &ast.AlterTableStmt{
Table: yyS[yypt-2].item.(*ast.TableName),
Specs: specs,
}
}
case 3:
{
parser.yyVAL.statement = &ast.AnalyzeTableStmt{TableNames: []*ast.TableName{yyS[yypt-4].item.(*ast.TableName)}, PartitionNames: yyS[yypt-1].item.([]ast.CIStr), AnalyzeOpts: yyS[yypt-0].item.([]ast.AnalyzeOpt)}
}
case 4:
{
parser.yyVAL.statement = &ast.AnalyzeTableStmt{
TableNames: []*ast.TableName{yyS[yypt-6].item.(*ast.TableName)},
PartitionNames: yyS[yypt-3].item.([]ast.CIStr),
IndexNames: yyS[yypt-1].item.([]ast.CIStr),
IndexFlag: true,
AnalyzeOpts: yyS[yypt-0].item.([]ast.AnalyzeOpt),
}
}
case 5:
{
parser.yyVAL.statement = &ast.CompactTableStmt{
Table: yyS[yypt-1].item.(*ast.TableName),
ReplicaKind: ast.CompactReplicaKindAll,
}
}
case 6:
{
parser.yyVAL.statement = &ast.CompactTableStmt{
Table: yyS[yypt-3].item.(*ast.TableName),
ReplicaKind: ast.CompactReplicaKindTiFlash,
}
}
case 7:
{
parser.yyVAL.statement = &ast.CompactTableStmt{
Table: yyS[yypt-3].item.(*ast.TableName),
PartitionNames: yyS[yypt-0].item.([]ast.CIStr),
ReplicaKind: ast.CompactReplicaKindAll,
}
}
case 8:
{
parser.yyVAL.statement = &ast.CompactTableStmt{
Table: yyS[yypt-5].item.(*ast.TableName),
PartitionNames: yyS[yypt-2].item.([]ast.CIStr),
ReplicaKind: ast.CompactReplicaKindTiFlash,
}
}
case 9:
{
parser.yyVAL.item = nil
}
case 10:
{
parser.yyVAL.item = yyS[yypt-0].item.([]*ast.SplitIndexOption)
}
case 11:
{
parser.yyVAL.item = []*ast.SplitIndexOption{yyS[yypt-0].item.(*ast.SplitIndexOption)}
}
case 12:
{
parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.SplitIndexOption), yyS[yypt-0].item.(*ast.SplitIndexOption))
}
case 13:
{
parser.yyVAL.item = &ast.SplitIndexOption{
PrimaryKey: true,
IndexName: ast.NewCIStr(mysql.PrimaryKeyName),
SplitOpt: yyS[yypt-0].item.(*ast.SplitOption),
}
}
case 14:
{
parser.yyVAL.item = &ast.SplitIndexOption{
IndexName: ast.NewCIStr(yyS[yypt-1].ident),
SplitOpt: yyS[yypt-0].item.(*ast.SplitOption),
}
}
case 15:
{
parser.yyVAL.item = &ast.SplitIndexOption{
TableLevel: true,
SplitOpt: yyS[yypt-0].item.(*ast.SplitOption),
}
}
case 16:
{
parser.yyVAL.item = []*ast.ResourceGroupOption{yyS[yypt-0].item.(*ast.ResourceGroupOption)}
}
case 17:
{
if !ast.CheckAppend(yyS[yypt-1].item.([]*ast.ResourceGroupOption), yyS[yypt-0].item.(*ast.ResourceGroupOption)) {
yylex.AppendError(yylex.Errorf("Dupliated options specified"))
return 1
}
parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.ResourceGroupOption), yyS[yypt-0].item.(*ast.ResourceGroupOption))
}
case 18:
{
if !ast.CheckAppend(yyS[yypt-2].item.([]*ast.ResourceGroupOption), yyS[yypt-0].item.(*ast.ResourceGroupOption)) {
yylex.AppendError(yylex.Errorf("Dupliated options specified"))
return 1
}
parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.ResourceGroupOption), yyS[yypt-0].item.(*ast.ResourceGroupOption))
}
case 19:
{
parser.yyVAL.item = uint64(1)
}
case 20:
{
parser.yyVAL.item = uint64(8)
}
case 21:
{
parser.yyVAL.item = uint64(16)
}
case 22:
{
parser.yyVAL.item = []*ast.ResourceGroupRunawayOption{yyS[yypt-0].item.(*ast.ResourceGroupRunawayOption)}
}
case 23:
{
if !ast.CheckRunawayAppend(yyS[yypt-1].item.([]*ast.ResourceGroupRunawayOption), yyS[yypt-0].item.(*ast.ResourceGroupRunawayOption)) {
yylex.AppendError(yylex.Errorf("Dupliated runaway options specified"))
return 1
}
parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.ResourceGroupRunawayOption), yyS[yypt-0].item.(*ast.ResourceGroupRunawayOption))
}
case 24:
{
if !ast.CheckRunawayAppend(yyS[yypt-2].item.([]*ast.ResourceGroupRunawayOption), yyS[yypt-0].item.(*ast.ResourceGroupRunawayOption)) {
yylex.AppendError(yylex.Errorf("Dupliated runaway options specified"))
return 1
}
parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.ResourceGroupRunawayOption), yyS[yypt-0].item.(*ast.ResourceGroupRunawayOption))
}
case 25:
{
parser.yyVAL.item = ast.WatchExact
}
case 26:
{
parser.yyVAL.item = ast.WatchSimilar
}
case 27:
{
parser.yyVAL.item = ast.WatchPlan
}
case 28:
{
parser.yyVAL.item = &ast.ResourceGroupRunawayActionOption{Type: ast.RunawayActionDryRun}
}
case 29:
{
parser.yyVAL.item = &ast.ResourceGroupRunawayActionOption{Type: ast.RunawayActionCooldown}
}
case 30:
{
parser.yyVAL.item = &ast.ResourceGroupRunawayActionOption{Type: ast.RunawayActionKill}
}
case 31:
{
parser.yyVAL.item = &ast.ResourceGroupRunawayActionOption{
Type: ast.RunawayActionSwitchGroup,
SwitchGroupName: ast.NewCIStr(yyS[yypt-1].ident),
}
}
case 32:
{
_, err := time.ParseDuration(yyS[yypt-0].ident)
if err != nil {
yylex.AppendError(yylex.Errorf("The EXEC_ELAPSED option is not a valid duration: %s", err.Error()))
return 1
}
parser.yyVAL.item = &ast.ResourceGroupRunawayOption{
Tp: ast.RunawayRule,
RuleOption: &ast.ResourceGroupRunawayRuleOption{Tp: ast.RunawayRuleExecElapsed, ExecElapsed: yyS[yypt-0].ident},
}
}
case 33:
{
parser.yyVAL.item = &ast.ResourceGroupRunawayOption{
Tp: ast.RunawayRule,
RuleOption: &ast.ResourceGroupRunawayRuleOption{Tp: ast.RunawayRuleProcessedKeys, ProcessedKeys: yyS[yypt-0].item.(int64)},
}
}
case 34:
{
parser.yyVAL.item = &ast.ResourceGroupRunawayOption{
Tp: ast.RunawayRule,
RuleOption: &ast.ResourceGroupRunawayRuleOption{Tp: ast.RunawayRuleRequestUnit, RequestUnit: yyS[yypt-0].item.(int64)},
}
}
case 35:
{
parser.yyVAL.item = &ast.ResourceGroupRunawayOption{
Tp: ast.RunawayAction,
ActionOption: yyS[yypt-0].item.(*ast.ResourceGroupRunawayActionOption),
}
}
case 36:
{
dur := strings.ToLower(yyS[yypt-0].item.(string))
if dur == "unlimited" {
dur = ""
}
if len(dur) > 0 {
_, err := time.ParseDuration(dur)
if err != nil {
yylex.AppendError(yylex.Errorf("The WATCH DURATION option is not a valid duration: %s", err.Error()))
return 1
}
}
parser.yyVAL.item = &ast.ResourceGroupRunawayOption{
Tp: ast.RunawayWatch,
WatchOption: &ast.ResourceGroupRunawayWatchOption{
Type: yyS[yypt-1].item.(ast.RunawayWatchType),
Duration: dur,
},
}
}
case 37:
{
parser.yyVAL.item = ""
}
case 38:
{
parser.yyVAL.item = yyS[yypt-0].ident
}
case 39:
{
parser.yyVAL.item = ""
}
case 40:
{
parser.yyVAL.item = &ast.ResourceGroupOption{Tp: ast.ResourceRURate, UintValue: yyS[yypt-0].item.(uint64)}
}
case 41:
{
parser.yyVAL.item = &ast.ResourceGroupOption{Tp: ast.ResourceRURate, Burstable: ast.BurstableUnlimited}
}
case 42:
{
parser.yyVAL.item = &ast.ResourceGroupOption{Tp: ast.ResourcePriority, UintValue: yyS[yypt-0].item.(uint64)}
}
case 43:
{
parser.yyVAL.item = &ast.ResourceGroupOption{Tp: ast.ResourceBurstable, Burstable: ast.BurstableModerated}
}
case 44:
{
parser.yyVAL.item = &ast.ResourceGroupOption{Tp: ast.ResourceBurstable, Burstable: ast.BurstableModerated}
}
case 45:
{
parser.yyVAL.item = &ast.ResourceGroupOption{Tp: ast.ResourceBurstable, Burstable: ast.BurstableUnlimited}
}
case 46:
{
parser.yyVAL.item = &ast.ResourceGroupOption{Tp: ast.ResourceBurstable, Burstable: ast.BurstableDisable}
}
case 47:
{
parser.yyVAL.item = &ast.ResourceGroupOption{Tp: ast.ResourceGroupRunaway, RunawayOptionList: yyS[yypt-1].item.([]*ast.ResourceGroupRunawayOption)}
}
case 48:
{
parser.yyVAL.item = &ast.ResourceGroupOption{Tp: ast.ResourceGroupRunaway, RunawayOptionList: nil}
}
case 49:
{
parser.yyVAL.item = &ast.ResourceGroupOption{Tp: ast.ResourceGroupRunaway, RunawayOptionList: nil}
}
case 50:
{
parser.yyVAL.item = &ast.ResourceGroupOption{Tp: ast.ResourceGroupBackground, BackgroundOptions: yyS[yypt-1].item.([]*ast.ResourceGroupBackgroundOption)}
}
case 51:
{
parser.yyVAL.item = &ast.ResourceGroupOption{Tp: ast.ResourceGroupBackground, BackgroundOptions: nil}
}
case 52:
{
parser.yyVAL.item = &ast.ResourceGroupOption{Tp: ast.ResourceGroupBackground, BackgroundOptions: nil}
}
case 53:
{
parser.yyVAL.item = []*ast.ResourceGroupBackgroundOption{yyS[yypt-0].item.(*ast.ResourceGroupBackgroundOption)}
}
case 54:
{
if !ast.CheckBackgroundAppend(yyS[yypt-1].item.([]*ast.ResourceGroupBackgroundOption), yyS[yypt-0].item.(*ast.ResourceGroupBackgroundOption)) {
yylex.AppendError(yylex.Errorf("Dupliated background options specified"))
return 1
}
parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.ResourceGroupBackgroundOption), yyS[yypt-0].item.(*ast.ResourceGroupBackgroundOption))
}
case 55:
{
if !ast.CheckBackgroundAppend(yyS[yypt-2].item.([]*ast.ResourceGroupBackgroundOption), yyS[yypt-0].item.(*ast.ResourceGroupBackgroundOption)) {
yylex.AppendError(yylex.Errorf("Dupliated background options specified"))
return 1
}
parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.ResourceGroupBackgroundOption), yyS[yypt-0].item.(*ast.ResourceGroupBackgroundOption))
}
case 56:
{
parser.yyVAL.item = &ast.ResourceGroupBackgroundOption{Type: ast.BackgroundOptionTaskNames, StrValue: yyS[yypt-0].ident}
}
case 57:
{
parser.yyVAL.item = &ast.ResourceGroupBackgroundOption{Type: ast.BackgroundUtilizationLimit, UintValue: yyS[yypt-0].item.(uint64)}
}
case 58:
{
parser.yyVAL.item = []*ast.PlacementOption{yyS[yypt-0].item.(*ast.PlacementOption)}
}
case 59:
{
parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.PlacementOption), yyS[yypt-0].item.(*ast.PlacementOption))
}
case 60:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.PlacementOption), yyS[yypt-0].item.(*ast.PlacementOption))
}
case 61:
{
parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionPrimaryRegion, StrValue: yyS[yypt-0].ident}
}
case 62:
{
parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionRegions, StrValue: yyS[yypt-0].ident}
}
case 63:
{
cnt := yyS[yypt-0].item.(uint64)
if cnt == 0 {
yylex.AppendError(yylex.Errorf("FOLLOWERS must be positive"))
return 1
}
parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionFollowerCount, UintValue: cnt}
}
case 64:
{
parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionVoterCount, UintValue: yyS[yypt-0].item.(uint64)}
}
case 65:
{
parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionLearnerCount, UintValue: yyS[yypt-0].item.(uint64)}
}
case 66:
{
parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionSchedule, StrValue: yyS[yypt-0].ident}
}
case 67:
{
parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionConstraints, StrValue: yyS[yypt-0].ident}
}
case 68:
{
parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionLeaderConstraints, StrValue: yyS[yypt-0].ident}
}
case 69:
{
parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionFollowerConstraints, StrValue: yyS[yypt-0].ident}
}
case 70:
{
parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionVoterConstraints, StrValue: yyS[yypt-0].ident}
}
case 71:
{
parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionLearnerConstraints, StrValue: yyS[yypt-0].ident}
}
case 72:
{
parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionSurvivalPreferences, StrValue: yyS[yypt-0].ident}
}
case 73:
{
parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionPolicy, StrValue: yyS[yypt-0].ident}
}
case 74:
{
parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionPolicy, StrValue: yyS[yypt-0].ident}
}
case 75:
{
parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionPolicy, StrValue: yyS[yypt-0].ident}
}
case 76:
{
parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionPolicy, StrValue: yyS[yypt-0].ident}
}
case 77:
{
parser.yyVAL.item = &ast.AttributesSpec{Default: true}
}
case 78:
{
parser.yyVAL.item = &ast.AttributesSpec{Default: false, Attributes: yyS[yypt-0].ident}
}
case 79:
{
parser.yyVAL.item = &ast.StatsOptionsSpec{Default: true}
}
case 80:
{
parser.yyVAL.item = &ast.StatsOptionsSpec{Default: false, StatsOptions: yyS[yypt-0].ident}
}
case 81:
{
if yyS[yypt-0].item != nil {
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTablePartition,
Partition: yyS[yypt-0].item.(*ast.PartitionOptions),
}
} else {
parser.yyVAL.item = nil
}
}
case 82:
{
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableRemovePartitioning,
}
}
case 83:
{
ret := yyS[yypt-0].item.(*ast.AlterTableSpec)
ret.NoWriteToBinlog = yyS[yypt-1].item.(bool)
parser.yyVAL.item = ret
}
case 84:
{
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableSplitIndex,
SplitIndex: yyS[yypt-0].item.(*ast.SplitIndexOption),
}
}
case 85:
{
partitionMethod := ast.PartitionMethod{Expr: yyS[yypt-1].expr}
startOffset := parser.yyVAL.offset
endOffset := parser.yylval.offset
parser.setNodeText(&partitionMethod, parser.src[startOffset:endOffset])
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableReorganizeLastPartition,
Partition: &ast.PartitionOptions{PartitionMethod: partitionMethod},
}
}
case 86:
{
partitionMethod := ast.PartitionMethod{Expr: yyS[yypt-1].expr}
startOffset := parser.yyVAL.offset
endOffset := parser.yylval.offset
parser.setNodeText(&partitionMethod, parser.src[startOffset:endOffset])
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableReorganizeFirstPartition,
Partition: &ast.PartitionOptions{PartitionMethod: partitionMethod},
}
}
case 87:
{
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTablePartitionAttributes,
PartitionNames: []ast.CIStr{ast.NewCIStr(yyS[yypt-1].ident)},
AttributesSpec: yyS[yypt-0].item.(*ast.AttributesSpec),
}
}
case 88:
{
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTablePartitionOptions,
PartitionNames: []ast.CIStr{ast.NewCIStr(yyS[yypt-1].ident)},
Options: yyS[yypt-0].item.([]*ast.TableOption),
}
}
case 89:
{
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableRemoveTTL,
}
}
case 90:
{
parser.yyVAL.item = []string{}
}
case 91:
{
parser.yyVAL.item = yyS[yypt-0].item
}
case 92:
{
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableOption,
Options: yyS[yypt-0].item.([]*ast.TableOption),
}
}
case 93:
{
tiflashReplicaSpec := &ast.TiFlashReplicaSpec{
Count: yyS[yypt-1].item.(uint64),
Labels: yyS[yypt-0].item.([]string),
}
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableSetTiFlashReplica,
TiFlashReplica: tiflashReplicaSpec,
}
}
case 94:
{
tiflashReplicaSpec := &ast.TiFlashReplicaSpec{
Count: yyS[yypt-1].item.(uint64),
Labels: yyS[yypt-0].item.([]string),
Hypo: true,
}
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableSetTiFlashReplica,
TiFlashReplica: tiflashReplicaSpec,
}
}
case 95:
{
op := &ast.AlterTableSpec{
Tp: ast.AlterTableOption,
Options: []*ast.TableOption{{Tp: ast.TableOptionCharset, StrValue: yyS[yypt-1].ident,
UintValue: ast.TableOptionCharsetWithConvertTo}},
}
if yyS[yypt-0].ident != "" {
op.Options = append(op.Options, &ast.TableOption{Tp: ast.TableOptionCollate, StrValue: yyS[yypt-0].ident})
}
parser.yyVAL.item = op
}
case 96:
{
op := &ast.AlterTableSpec{
Tp: ast.AlterTableOption,
Options: []*ast.TableOption{{Tp: ast.TableOptionCharset, Default: true,
UintValue: ast.TableOptionCharsetWithConvertTo}},
}
if yyS[yypt-0].ident != "" {
op.Options = append(op.Options, &ast.TableOption{Tp: ast.TableOptionCollate, StrValue: yyS[yypt-0].ident})
}
parser.yyVAL.item = op
}
case 97:
{
parser.yyVAL.item = &ast.AlterTableSpec{
IfNotExists: yyS[yypt-2].item.(bool),
Tp: ast.AlterTableAddColumns,
NewColumns: []*ast.ColumnDef{yyS[yypt-1].item.(*ast.ColumnDef)},
Position: yyS[yypt-0].item.(*ast.ColumnPosition),
}
}
case 98:
{
tes := yyS[yypt-1].item.([]interface{})
var columnDefs []*ast.ColumnDef
var constraints []*ast.Constraint
for _, te := range tes {
switch te := te.(type) {
case *ast.ColumnDef:
columnDefs = append(columnDefs, te)
case *ast.Constraint:
constraints = append(constraints, te)
}
}
parser.yyVAL.item = &ast.AlterTableSpec{
IfNotExists: yyS[yypt-3].item.(bool),
Tp: ast.AlterTableAddColumns,
NewColumns: columnDefs,
NewConstraints: constraints,
}
}
case 99:
{
constraint := yyS[yypt-0].item.(*ast.Constraint)
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableAddConstraint,
Constraint: constraint,
}
}
case 100:
{
var defs []*ast.PartitionDefinition
if yyS[yypt-0].item != nil {
defs = yyS[yypt-0].item.([]*ast.PartitionDefinition)
}
noWriteToBinlog := yyS[yypt-1].item.(bool)
if noWriteToBinlog {
yylex.AppendError(yylex.Errorf("The NO_WRITE_TO_BINLOG option is parsed but ignored for now."))
parser.lastErrorAsWarn()
}
parser.yyVAL.item = &ast.AlterTableSpec{
IfNotExists: yyS[yypt-2].item.(bool),
NoWriteToBinlog: noWriteToBinlog,
Tp: ast.AlterTableAddPartitions,
PartDefinitions: defs,
}
}
case 101:
{
noWriteToBinlog := yyS[yypt-2].item.(bool)
if noWriteToBinlog {
yylex.AppendError(yylex.Errorf("The NO_WRITE_TO_BINLOG option is parsed but ignored for now."))
parser.lastErrorAsWarn()
}
parser.yyVAL.item = &ast.AlterTableSpec{
IfNotExists: yyS[yypt-3].item.(bool),
NoWriteToBinlog: noWriteToBinlog,
Tp: ast.AlterTableAddPartitions,
Num: getUint64FromNUM(yyS[yypt-0].item),
}
}
case 102:
{
noWriteToBinlog := yyS[yypt-0].item.(bool)
if noWriteToBinlog {
yylex.AppendError(yylex.Errorf("The NO_WRITE_TO_BINLOG option is parsed but ignored for now."))
parser.lastErrorAsWarn()
}
partitionMethod := ast.PartitionMethod{Expr: yyS[yypt-2].expr}
startOffset := parser.yyVAL.offset
endOffset := parser.yylval.offset
parser.setNodeText(&partitionMethod, parser.src[startOffset:endOffset])
parser.yyVAL.item = &ast.AlterTableSpec{
NoWriteToBinlog: noWriteToBinlog,
Tp: ast.AlterTableAddLastPartition,
Partition: &ast.PartitionOptions{PartitionMethod: partitionMethod},
}
}
case 103:
{
statsSpec := &ast.StatisticsSpec{
StatsName: yyS[yypt-4].ident,
StatsType: yyS[yypt-3].item.(uint8),
Columns: yyS[yypt-1].item.([]*ast.ColumnName),
}
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableAddStatistics,
IfNotExists: yyS[yypt-5].item.(bool),
Statistics: statsSpec,
}
}
case 104:
{
colDef := &ast.ColumnDef{
Name: &ast.ColumnName{Name: ast.NewCIStr("masking")},
Tp: yyS[yypt-2].item.(*types.FieldType),
Options: yyS[yypt-1].item.(ast.ColumnOptionList).Options,
}
if err := colDef.Validate(); err != nil {
yylex.AppendError(err)
return 1
}
parser.yyVAL.item = &ast.AlterTableSpec{
IfNotExists: false,
Tp: ast.AlterTableAddColumns,
NewColumns: []*ast.ColumnDef{colDef},
Position: yyS[yypt-0].item.(*ast.ColumnPosition),
}
}
case 105:
{
// Keep behavior consistent with `ColumnDef: ColumnName "SERIAL" ...`.
tp := types.NewFieldType(mysql.TypeLonglong)
options := []*ast.ColumnOption{{Tp: ast.ColumnOptionNotNull}, {Tp: ast.ColumnOptionAutoIncrement}, {Tp: ast.ColumnOptionUniqKey}}
options = append(options, yyS[yypt-1].item.(ast.ColumnOptionList).Options...)
tp.AddFlag(mysql.UnsignedFlag)
colDef := &ast.ColumnDef{
Name: &ast.ColumnName{Name: ast.NewCIStr("masking")},
Tp: tp,
Options: options,
}
if err := colDef.Validate(); err != nil {
yylex.AppendError(err)
return 1
}
parser.yyVAL.item = &ast.AlterTableSpec{
IfNotExists: false,
Tp: ast.AlterTableAddColumns,
NewColumns: []*ast.ColumnDef{colDef},
Position: yyS[yypt-0].item.(*ast.ColumnPosition),
}
}
case 106:
{
state := yyS[yypt-0].item.(*ast.MaskingPolicyState)
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableAddMaskingPolicy,
MaskingPolicyName: ast.NewCIStr(yyS[yypt-8].ident),
MaskingPolicyColumn: &ast.ColumnName{Name: ast.NewCIStr(yyS[yypt-5].ident)},
MaskingPolicyExpr: yyS[yypt-2].expr,
MaskingPolicyRestrictOps: yyS[yypt-1].item.(ast.MaskingPolicyRestrictOps),
MaskingPolicyState: *state,
}
}
case 107:
{
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableEnableMaskingPolicy,
MaskingPolicyName: ast.NewCIStr(yyS[yypt-0].ident),
}
}
case 108:
{
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableDisableMaskingPolicy,
MaskingPolicyName: ast.NewCIStr(yyS[yypt-0].ident),
}
}
case 109:
{
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableDropMaskingPolicy,
MaskingPolicyName: ast.NewCIStr(yyS[yypt-0].ident),
}
}
case 110:
{
parser.yyVAL.item = &ast.AlterTableSpec{
IfExists: false,
Tp: ast.AlterTableDropColumn,
OldColumnName: &ast.ColumnName{Name: ast.NewCIStr("masking")},
}
}
case 111:
{
if !strings.EqualFold(yyS[yypt-2].ident, "expression") {
yylex.AppendError(yylex.Errorf("unsupported masking policy modify option: %s", yyS[yypt-2].ident))
return 1
}
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableModifyMaskingPolicyExpression,
MaskingPolicyName: ast.NewCIStr(yyS[yypt-4].ident),
MaskingPolicyExpr: yyS[yypt-0].expr,
}
}
case 112:
{
colDef := &ast.ColumnDef{
Name: &ast.ColumnName{Name: ast.NewCIStr("masking")},
Tp: yyS[yypt-2].item.(*types.FieldType),
Options: yyS[yypt-1].item.(ast.ColumnOptionList).Options,
}
if err := colDef.Validate(); err != nil {
yylex.AppendError(err)
return 1
}
parser.yyVAL.item = &ast.AlterTableSpec{
IfExists: false,
Tp: ast.AlterTableModifyColumn,
NewColumns: []*ast.ColumnDef{colDef},
Position: yyS[yypt-0].item.(*ast.ColumnPosition),
}
}
case 113:
{
// Keep behavior consistent with `ColumnDef: ColumnName "SERIAL" ...`.
tp := types.NewFieldType(mysql.TypeLonglong)
options := []*ast.ColumnOption{{Tp: ast.ColumnOptionNotNull}, {Tp: ast.ColumnOptionAutoIncrement}, {Tp: ast.ColumnOptionUniqKey}}
options = append(options, yyS[yypt-1].item.(ast.ColumnOptionList).Options...)
tp.AddFlag(mysql.UnsignedFlag)
colDef := &ast.ColumnDef{
Name: &ast.ColumnName{Name: ast.NewCIStr("masking")},
Tp: tp,
Options: options,
}
if err := colDef.Validate(); err != nil {
yylex.AppendError(err)
return 1
}
parser.yyVAL.item = &ast.AlterTableSpec{
IfExists: false,
Tp: ast.AlterTableModifyColumn,
NewColumns: []*ast.ColumnDef{colDef},
Position: yyS[yypt-0].item.(*ast.ColumnPosition),
}
}
case 114:
{
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableModifyMaskingPolicyRestrictOn,
MaskingPolicyName: ast.NewCIStr(yyS[yypt-6].ident),
MaskingPolicyRestrictOps: yyS[yypt-1].item.(ast.MaskingPolicyRestrictOps),
}
}
case 115:
{
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableModifyMaskingPolicyRestrictOn,
MaskingPolicyName: ast.NewCIStr(yyS[yypt-4].ident),
MaskingPolicyRestrictOps: ast.MaskingPolicyRestrictOpNone,
}
}
case 116:
{
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableAttributes,
AttributesSpec: yyS[yypt-0].item.(*ast.AttributesSpec),
}
}
case 117:
{
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableStatsOptions,
StatsOptionsSpec: yyS[yypt-0].item.(*ast.StatsOptionsSpec),
}
}
case 118:
{
yylex.AppendError(yylex.Errorf("The CHECK PARTITIONING clause is parsed but not implement yet."))
parser.lastErrorAsWarn()
ret := &ast.AlterTableSpec{
Tp: ast.AlterTableCheckPartitions,
}
if yyS[yypt-0].item == nil {
ret.OnAllPartitions = true
} else {
ret.PartitionNames = yyS[yypt-0].item.([]ast.CIStr)
}
parser.yyVAL.item = ret
}
case 119:
{
noWriteToBinlog := yyS[yypt-1].item.(bool)
if noWriteToBinlog {
yylex.AppendError(yylex.Errorf("The NO_WRITE_TO_BINLOG option is parsed but ignored for now."))
parser.lastErrorAsWarn()
}
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableCoalescePartitions,
NoWriteToBinlog: noWriteToBinlog,
Num: getUint64FromNUM(yyS[yypt-0].item),
}
}
case 120:
{
parser.yyVAL.item = &ast.AlterTableSpec{
IfExists: yyS[yypt-2].item.(bool),
Tp: ast.AlterTableDropColumn,
OldColumnName: yyS[yypt-1].item.(*ast.ColumnName),
}
}
case 121:
{
parser.yyVAL.item = &ast.AlterTableSpec{Tp: ast.AlterTableDropPrimaryKey}
}
case 122:
{
parser.yyVAL.item = &ast.AlterTableSpec{
IfExists: yyS[yypt-1].item.(bool),
Tp: ast.AlterTableDropPartition,
PartitionNames: yyS[yypt-0].item.([]ast.CIStr),
}
}
case 123:
{
partitionMethod := ast.PartitionMethod{Expr: yyS[yypt-2].expr}
startOffset := parser.yyVAL.offset
endOffset := parser.yylval.offset
parser.setNodeText(&partitionMethod, parser.src[startOffset:endOffset])
parser.yyVAL.item = &ast.AlterTableSpec{
IfExists: yyS[yypt-0].item.(bool),
Tp: ast.AlterTableDropFirstPartition,
Partition: &ast.PartitionOptions{PartitionMethod: partitionMethod},
}
}
case 124:
{
statsSpec := &ast.StatisticsSpec{
StatsName: yyS[yypt-0].ident,
}
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableDropStatistics,
IfExists: yyS[yypt-1].item.(bool),
Statistics: statsSpec,
}
}
case 125:
{
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableExchangePartition,
PartitionNames: []ast.CIStr{ast.NewCIStr(yyS[yypt-4].ident)},
NewTable: yyS[yypt-1].item.(*ast.TableName),
WithValidation: yyS[yypt-0].item.(bool),
}
}
case 126:
{
ret := &ast.AlterTableSpec{
Tp: ast.AlterTableTruncatePartition,
}
if yyS[yypt-0].item == nil {
ret.OnAllPartitions = true
} else {
ret.PartitionNames = yyS[yypt-0].item.([]ast.CIStr)
}
parser.yyVAL.item = ret
}
case 127:
{
ret := &ast.AlterTableSpec{
NoWriteToBinlog: yyS[yypt-1].item.(bool),
Tp: ast.AlterTableOptimizePartition,
}
if yyS[yypt-0].item == nil {
ret.OnAllPartitions = true
} else {
ret.PartitionNames = yyS[yypt-0].item.([]ast.CIStr)
}
parser.yyVAL.item = ret
}
case 128:
{
ret := &ast.AlterTableSpec{
NoWriteToBinlog: yyS[yypt-1].item.(bool),
Tp: ast.AlterTableRepairPartition,
}
if yyS[yypt-0].item == nil {
ret.OnAllPartitions = true
} else {
ret.PartitionNames = yyS[yypt-0].item.([]ast.CIStr)
}
parser.yyVAL.item = ret
}
case 129:
{
ret := &ast.AlterTableSpec{
Tp: ast.AlterTableImportPartitionTablespace,
}
if yyS[yypt-1].item == nil {
ret.OnAllPartitions = true
} else {
ret.PartitionNames = yyS[yypt-1].item.([]ast.CIStr)
}
parser.yyVAL.item = ret
yylex.AppendError(yylex.Errorf("The IMPORT PARTITION TABLESPACE clause is parsed but ignored by all storage engines."))
parser.lastErrorAsWarn()
}
case 130:
{
ret := &ast.AlterTableSpec{
Tp: ast.AlterTableDiscardPartitionTablespace,
}
if yyS[yypt-1].item == nil {
ret.OnAllPartitions = true
} else {
ret.PartitionNames = yyS[yypt-1].item.([]ast.CIStr)
}
parser.yyVAL.item = ret
yylex.AppendError(yylex.Errorf("The DISCARD PARTITION TABLESPACE clause is parsed but ignored by all storage engines."))
parser.lastErrorAsWarn()
}
case 131:
{
ret := &ast.AlterTableSpec{
Tp: ast.AlterTableImportTablespace,
}
parser.yyVAL.item = ret
yylex.AppendError(yylex.Errorf("The IMPORT TABLESPACE clause is parsed but ignored by all storage engines."))
parser.lastErrorAsWarn()
}
case 132:
{
ret := &ast.AlterTableSpec{
Tp: ast.AlterTableDiscardTablespace,
}
parser.yyVAL.item = ret
yylex.AppendError(yylex.Errorf("The DISCARD TABLESPACE clause is parsed but ignored by all storage engines."))
parser.lastErrorAsWarn()
}
case 133:
{
ret := &ast.AlterTableSpec{
Tp: ast.AlterTableRebuildPartition,
NoWriteToBinlog: yyS[yypt-1].item.(bool),
}
if yyS[yypt-0].item == nil {
ret.OnAllPartitions = true
} else {
ret.PartitionNames = yyS[yypt-0].item.([]ast.CIStr)
}
parser.yyVAL.item = ret
}
case 134:
{
parser.yyVAL.item = &ast.AlterTableSpec{
IfExists: yyS[yypt-1].item.(bool),
Tp: ast.AlterTableDropIndex,
Name: yyS[yypt-0].ident,
}
}
case 135:
{
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableDropForeignKey,
Name: yyS[yypt-0].ident,
}
}
case 136:
{
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableOrderByColumns,
OrderByList: yyS[yypt-0].item.([]*ast.AlterOrderItem),
}
}
case 137:
{
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableDisableKeys,
}
}
case 138:
{
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableEnableKeys,
}
}
case 139:
{
parser.yyVAL.item = &ast.AlterTableSpec{
IfExists: yyS[yypt-2].item.(bool),
Tp: ast.AlterTableModifyColumn,
NewColumns: []*ast.ColumnDef{yyS[yypt-1].item.(*ast.ColumnDef)},
Position: yyS[yypt-0].item.(*ast.ColumnPosition),
}
}
case 140:
{
parser.yyVAL.item = &ast.AlterTableSpec{
IfExists: yyS[yypt-3].item.(bool),
Tp: ast.AlterTableChangeColumn,
OldColumnName: yyS[yypt-2].item.(*ast.ColumnName),
NewColumns: []*ast.ColumnDef{yyS[yypt-1].item.(*ast.ColumnDef)},
Position: yyS[yypt-0].item.(*ast.ColumnPosition),
}
}
case 141:
{
option := &ast.ColumnOption{Expr: yyS[yypt-0].expr}
colDef := &ast.ColumnDef{
Name: yyS[yypt-3].item.(*ast.ColumnName),
Options: []*ast.ColumnOption{option},
}
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableAlterColumn,
NewColumns: []*ast.ColumnDef{colDef},
}
}
case 142:
{
option := &ast.ColumnOption{Expr: yyS[yypt-1].expr}
colDef := &ast.ColumnDef{
Name: yyS[yypt-5].item.(*ast.ColumnName),
Options: []*ast.ColumnOption{option},
}
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableAlterColumn,
NewColumns: []*ast.ColumnDef{colDef},
}
}
case 143:
{
colDef := &ast.ColumnDef{
Name: yyS[yypt-2].item.(*ast.ColumnName),
}
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableAlterColumn,
NewColumns: []*ast.ColumnDef{colDef},
}
}
case 144:
{
oldColName := &ast.ColumnName{Name: ast.NewCIStr(yyS[yypt-2].ident)}
newColName := &ast.ColumnName{Name: ast.NewCIStr(yyS[yypt-0].ident)}
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableRenameColumn,
OldColumnName: oldColName,
NewColumnName: newColName,
}
}
case 145:
{
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableRenameTable,
NewTable: yyS[yypt-0].item.(*ast.TableName),
}
}
case 146:
{
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableRenameTable,
NewTable: yyS[yypt-0].item.(*ast.TableName),
}
}
case 147:
{
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableRenameTable,
NewTable: yyS[yypt-0].item.(*ast.TableName),
}
}
case 148:
{
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableRenameIndex,
FromKey: ast.NewCIStr(yyS[yypt-2].ident),
ToKey: ast.NewCIStr(yyS[yypt-0].ident),
}
}
case 149:
{
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableLock,
LockType: yyS[yypt-0].item.(ast.LockType),
}
}
case 150:
{
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableWriteable,
Writeable: yyS[yypt-0].item.(bool),
}
}
case 151:
{
// Parse it and ignore it. Just for compatibility.
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableAlgorithm,
Algorithm: yyS[yypt-0].item.(ast.AlgorithmType),
}
}
case 152:
{
// Parse it and ignore it. Just for compatibility.
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableForce,
}
}
case 153:
{
// Parse it and ignore it. Just for compatibility.
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableWithValidation,
}
}
case 154:
{
// Parse it and ignore it. Just for compatibility.
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableWithoutValidation,
}
}
case 155:
{
// Parse it and ignore it. Just for compatibility.
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableSecondaryLoad,
}
yylex.AppendError(yylex.Errorf("The SECONDARY_LOAD clause is parsed but not implement yet."))
parser.lastErrorAsWarn()
}
case 156:
{
// Parse it and ignore it. Just for compatibility.
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableSecondaryUnload,
}
yylex.AppendError(yylex.Errorf("The SECONDARY_UNLOAD VALIDATION clause is parsed but not implement yet."))
parser.lastErrorAsWarn()
}
case 157:
{
c := &ast.Constraint{
Name: yyS[yypt-1].ident,
Enforced: yyS[yypt-0].item.(bool),
}
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableAlterCheck,
Constraint: c,
}
}
case 158:
{
// Parse it and ignore it. Just for compatibility.
c := &ast.Constraint{
Name: yyS[yypt-0].ident,
}
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableDropCheck,
Constraint: c,
}
}
case 159:
{
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableIndexInvisible,
IndexName: ast.NewCIStr(yyS[yypt-1].ident),
Visibility: yyS[yypt-0].item.(ast.IndexVisibility),
}
}
case 160:
{
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableCache,
}
}
case 161:
{
parser.yyVAL.item = &ast.AlterTableSpec{
Tp: ast.AlterTableNoCache,
}
}
case 162:
{
ret := &ast.AlterTableSpec{
Tp: ast.AlterTableReorganizePartition,
OnAllPartitions: true,
}
parser.yyVAL.item = ret
}
case 163:
{
ret := &ast.AlterTableSpec{
Tp: ast.AlterTableReorganizePartition,
PartitionNames: yyS[yypt-4].item.([]ast.CIStr),
PartDefinitions: yyS[yypt-1].item.([]*ast.PartitionDefinition),
}
parser.yyVAL.item = ret
}
case 164:
{
parser.yyVAL.item = nil
}
case 166:
{
parser.yyVAL.item = true
}
case 168:
{
parser.yyVAL.item = true
}
case 169:
{
parser.yyVAL.item = false
}
case 170:
{
parser.yyVAL.item = ast.PrimaryKeyTypeClustered
}
case 171:
{
parser.yyVAL.item = ast.PrimaryKeyTypeNonClustered
}
case 172:
{
parser.yyVAL.ident = ""
}
case 173:
{
parser.yyVAL.ident = ""
}
case 174:
{
parser.yyVAL.ident = "Global"
}
case 175:
{
parser.yyVAL.item = ast.AlgorithmTypeDefault
}
case 176:
{
parser.yyVAL.item = ast.AlgorithmTypeCopy
}
case 177:
{
parser.yyVAL.item = ast.AlgorithmTypeInplace
}
case 178:
{
parser.yyVAL.item = ast.AlgorithmTypeInstant
}
case 179:
{
yylex.AppendError(ErrUnknownAlterAlgorithm.GenWithStackByArgs(yyS[yypt-2].ident))
return 1
}
case 180:
{
parser.yyVAL.item = ast.LockTypeDefault
}
case 181:
{
id := strings.ToUpper(yyS[yypt-0].ident)
if id == "NONE" {
parser.yyVAL.item = ast.LockTypeNone
} else if id == "SHARED" {
parser.yyVAL.item = ast.LockTypeShared
} else if id == "EXCLUSIVE" {
parser.yyVAL.item = ast.LockTypeExclusive
} else {
yylex.AppendError(ErrUnknownAlterLock.GenWithStackByArgs(yyS[yypt-0].ident))
return 1
}
}
case 182:
{
parser.yyVAL.item = true
}
case 183:
{
parser.yyVAL.item = false
}
case 190:
{
parser.yyVAL.item = &ast.ColumnPosition{Tp: ast.ColumnPositionNone}
}
case 191:
{
parser.yyVAL.item = &ast.ColumnPosition{Tp: ast.ColumnPositionFirst}
}
case 192:
{
parser.yyVAL.item = &ast.ColumnPosition{
Tp: ast.ColumnPositionAfter,
RelativeColumn: yyS[yypt-0].item.(*ast.ColumnName),
}
}
case 193:
{
parser.yyVAL.item = make([]*ast.AlterTableSpec, 0, 1)
}
case 195:
{
parser.yyVAL.item = []*ast.AlterTableSpec{yyS[yypt-0].item.(*ast.AlterTableSpec)}
}
case 196:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.AlterTableSpec), yyS[yypt-0].item.(*ast.AlterTableSpec))
}
case 197:
{
parser.yyVAL.item = []ast.CIStr{ast.NewCIStr(yyS[yypt-0].ident)}
}
case 198:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.CIStr), ast.NewCIStr(yyS[yypt-0].ident))
}
case 199:
{
parser.yyVAL.item = nil
}
case 200:
{
parser.yyVAL.item = nil
}
case 201:
{
parser.yyVAL.item = yyS[yypt-0].ident
}
case 203:
{
parser.yyVAL.statement = &ast.RenameTableStmt{
TableToTables: yyS[yypt-0].item.([]*ast.TableToTable),
}
}
case 204:
{
parser.yyVAL.item = []*ast.TableToTable{yyS[yypt-0].item.(*ast.TableToTable)}
}
case 205:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.TableToTable), yyS[yypt-0].item.(*ast.TableToTable))
}
case 206:
{
parser.yyVAL.item = &ast.TableToTable{
OldTable: yyS[yypt-2].item.(*ast.TableName),
NewTable: yyS[yypt-0].item.(*ast.TableName),
}
}
case 207:
{
parser.yyVAL.statement = &ast.RenameUserStmt{
UserToUsers: yyS[yypt-0].item.([]*ast.UserToUser),
}
}
case 208:
{
parser.yyVAL.item = []*ast.UserToUser{yyS[yypt-0].item.(*ast.UserToUser)}
}
case 209:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.UserToUser), yyS[yypt-0].item.(*ast.UserToUser))
}
case 210:
{
parser.yyVAL.item = &ast.UserToUser{
OldUser: yyS[yypt-2].item.(*auth.UserIdentity),
NewUser: yyS[yypt-0].item.(*auth.UserIdentity),
}
}
case 211:
{
parser.yyVAL.statement = &ast.RecoverTableStmt{
JobID: yyS[yypt-0].item.(int64),
}
}
case 212:
{
parser.yyVAL.statement = &ast.RecoverTableStmt{
Table: yyS[yypt-0].item.(*ast.TableName),
}
}
case 213:
{
parser.yyVAL.statement = &ast.RecoverTableStmt{
Table: yyS[yypt-1].item.(*ast.TableName),
JobNum: yyS[yypt-0].item.(int64),
}
}
case 214:
{
parser.yyVAL.statement = &ast.FlashBackToTimestampStmt{
FlashbackTS: ast.NewValueExpr(yyS[yypt-0].ident, "", ""),
FlashbackTSO: 0,
}
}
case 215:
{
parser.yyVAL.statement = &ast.FlashBackToTimestampStmt{
Tables: yyS[yypt-2].item.([]*ast.TableName),
FlashbackTS: ast.NewValueExpr(yyS[yypt-0].ident, "", ""),
FlashbackTSO: 0,
}
}
case 216:
{
parser.yyVAL.statement = &ast.FlashBackToTimestampStmt{
DBName: ast.NewCIStr(yyS[yypt-2].ident),
FlashbackTS: ast.NewValueExpr(yyS[yypt-0].ident, "", ""),
FlashbackTSO: 0,
}
}
case 217:
{
if tsoValue, ok := yyS[yypt-0].item.(uint64); ok && tsoValue > 0 {
parser.yyVAL.statement = &ast.FlashBackToTimestampStmt{
FlashbackTSO: tsoValue,
}
} else {
yylex.AppendError(yylex.Errorf("Invalid TSO value provided: %d", yyS[yypt-0].item))
return 1
}
}
case 218:
{
if tsoValue, ok := yyS[yypt-0].item.(uint64); ok && tsoValue > 0 {
parser.yyVAL.statement = &ast.FlashBackToTimestampStmt{
Tables: yyS[yypt-2].item.([]*ast.TableName),
FlashbackTSO: tsoValue,
}
} else {
yylex.AppendError(yylex.Errorf("Invalid TSO value provided: %d", yyS[yypt-0].item))
return 1
}
}
case 219:
{
if tsoValue, ok := yyS[yypt-0].item.(uint64); ok && tsoValue > 0 {
parser.yyVAL.statement = &ast.FlashBackToTimestampStmt{
DBName: ast.NewCIStr(yyS[yypt-2].ident),
FlashbackTSO: tsoValue,
}
} else {
yylex.AppendError(yylex.Errorf("Invalid TSO value provided: %d", yyS[yypt-0].item))
return 1
}
}
case 220:
{
parser.yyVAL.statement = &ast.FlashBackTableStmt{
Table: yyS[yypt-1].item.(*ast.TableName),
NewName: yyS[yypt-0].ident,
}
}
case 221:
{
parser.yyVAL.ident = ""
}
case 222:
{
parser.yyVAL.ident = yyS[yypt-0].ident
}
case 223:
{
parser.yyVAL.statement = &ast.FlashBackDatabaseStmt{
DBName: ast.NewCIStr(yyS[yypt-1].ident),
NewName: yyS[yypt-0].ident,
}
}
case 224:
{
parser.yyVAL.statement = &ast.DistributeTableStmt{
Table: yyS[yypt-7].item.(*ast.TableName),
PartitionNames: yyS[yypt-6].item.([]ast.CIStr),
Rule: yyS[yypt-3].ident,
Engine: yyS[yypt-0].ident,
}
}
case 225:
{
parser.yyVAL.statement = &ast.DistributeTableStmt{
Table: yyS[yypt-10].item.(*ast.TableName),
PartitionNames: yyS[yypt-9].item.([]ast.CIStr),
Rule: yyS[yypt-6].ident,
Engine: yyS[yypt-3].ident,
Timeout: yyS[yypt-0].ident,
}
}
case 226:
{
parser.yyVAL.statement = &ast.CancelDistributionJobStmt{
JobID: yyS[yypt-0].item.(int64),
}
}
case 227:
{
parser.yyVAL.statement = &ast.SplitRegionStmt{
SplitSyntaxOpt: yyS[yypt-4].item.(*ast.SplitSyntaxOption),
Table: yyS[yypt-2].item.(*ast.TableName),
PartitionNames: yyS[yypt-1].item.([]ast.CIStr),
SplitOpt: yyS[yypt-0].item.(*ast.SplitOption),
}
}
case 228:
{
parser.yyVAL.statement = &ast.SplitRegionStmt{
SplitSyntaxOpt: yyS[yypt-6].item.(*ast.SplitSyntaxOption),
Table: yyS[yypt-4].item.(*ast.TableName),
PartitionNames: yyS[yypt-3].item.([]ast.CIStr),
IndexName: ast.NewCIStr(yyS[yypt-1].ident),
SplitOpt: yyS[yypt-0].item.(*ast.SplitOption),
}
}
case 229:
{
parser.yyVAL.item = &ast.SplitOption{
Lower: yyS[yypt-4].item.([]ast.ExprNode),
Upper: yyS[yypt-2].item.([]ast.ExprNode),
Num: yyS[yypt-0].item.(int64),
}
}
case 230:
{
parser.yyVAL.item = yyS[yypt-0].item
}
case 231:
{
parser.yyVAL.item = &ast.SplitOption{
ValueLists: yyS[yypt-0].item.([][]ast.ExprNode),
}
}
case 232:
{
parser.yyVAL.item = &ast.SplitSyntaxOption{}
}
case 233:
{
parser.yyVAL.item = &ast.SplitSyntaxOption{
HasRegionFor: true,
}
}
case 234:
{
parser.yyVAL.item = &ast.SplitSyntaxOption{
HasPartition: true,
}
}
case 235:
{
parser.yyVAL.item = &ast.SplitSyntaxOption{
HasRegionFor: true,
HasPartition: true,
}
}
case 236:
{
parser.yyVAL.statement = &ast.AnalyzeTableStmt{TableNames: yyS[yypt-2].item.([]*ast.TableName), NoWriteToBinLog: yyS[yypt-4].item.(bool), ColumnChoice: yyS[yypt-1].item.(ast.ColumnChoice), AnalyzeOpts: yyS[yypt-0].item.([]ast.AnalyzeOpt)}
}
case 237:
{
parser.yyVAL.statement = &ast.AnalyzeTableStmt{TableNames: []*ast.TableName{yyS[yypt-3].item.(*ast.TableName)}, NoWriteToBinLog: yyS[yypt-5].item.(bool), IndexNames: yyS[yypt-1].item.([]ast.CIStr), IndexFlag: true, AnalyzeOpts: yyS[yypt-0].item.([]ast.AnalyzeOpt)}
}
case 238:
{
parser.yyVAL.statement = &ast.AnalyzeTableStmt{TableNames: []*ast.TableName{yyS[yypt-3].item.(*ast.TableName)}, NoWriteToBinLog: yyS[yypt-6].item.(bool), IndexNames: yyS[yypt-1].item.([]ast.CIStr), IndexFlag: true, Incremental: true, AnalyzeOpts: yyS[yypt-0].item.([]ast.AnalyzeOpt)}
}
case 239:
{
parser.yyVAL.statement = &ast.AnalyzeTableStmt{TableNames: []*ast.TableName{yyS[yypt-4].item.(*ast.TableName)}, NoWriteToBinLog: yyS[yypt-6].item.(bool), PartitionNames: yyS[yypt-2].item.([]ast.CIStr), ColumnChoice: yyS[yypt-1].item.(ast.ColumnChoice), AnalyzeOpts: yyS[yypt-0].item.([]ast.AnalyzeOpt)}
}
case 240:
{
parser.yyVAL.statement = &ast.AnalyzeTableStmt{
TableNames: []*ast.TableName{yyS[yypt-5].item.(*ast.TableName)},
NoWriteToBinLog: yyS[yypt-7].item.(bool),
PartitionNames: yyS[yypt-3].item.([]ast.CIStr),
IndexNames: yyS[yypt-1].item.([]ast.CIStr),
IndexFlag: true,
AnalyzeOpts: yyS[yypt-0].item.([]ast.AnalyzeOpt),
}
}
case 241:
{
parser.yyVAL.statement = &ast.AnalyzeTableStmt{
TableNames: []*ast.TableName{yyS[yypt-5].item.(*ast.TableName)},
NoWriteToBinLog: yyS[yypt-8].item.(bool),
PartitionNames: yyS[yypt-3].item.([]ast.CIStr),
IndexNames: yyS[yypt-1].item.([]ast.CIStr),
IndexFlag: true,
Incremental: true,
AnalyzeOpts: yyS[yypt-0].item.([]ast.AnalyzeOpt),
}
}
case 242:
{
parser.yyVAL.statement = &ast.AnalyzeTableStmt{
TableNames: []*ast.TableName{yyS[yypt-5].item.(*ast.TableName)},
NoWriteToBinLog: yyS[yypt-7].item.(bool),
ColumnNames: yyS[yypt-1].item.([]ast.CIStr),
AnalyzeOpts: yyS[yypt-0].item.([]ast.AnalyzeOpt),
HistogramOperation: ast.HistogramOperationUpdate,
}
}
case 243:
{
parser.yyVAL.statement = &ast.AnalyzeTableStmt{
TableNames: []*ast.TableName{yyS[yypt-4].item.(*ast.TableName)},
NoWriteToBinLog: yyS[yypt-6].item.(bool),
ColumnNames: yyS[yypt-0].item.([]ast.CIStr),
HistogramOperation: ast.HistogramOperationDrop,
}
}
case 244:
{
parser.yyVAL.statement = &ast.AnalyzeTableStmt{
TableNames: []*ast.TableName{yyS[yypt-3].item.(*ast.TableName)},
NoWriteToBinLog: yyS[yypt-5].item.(bool),
ColumnNames: yyS[yypt-1].item.([]ast.CIStr),
ColumnChoice: ast.ColumnList,
AnalyzeOpts: yyS[yypt-0].item.([]ast.AnalyzeOpt)}
}
case 245:
{
parser.yyVAL.statement = &ast.AnalyzeTableStmt{
TableNames: []*ast.TableName{yyS[yypt-5].item.(*ast.TableName)},
NoWriteToBinLog: yyS[yypt-7].item.(bool),
PartitionNames: yyS[yypt-3].item.([]ast.CIStr),
ColumnNames: yyS[yypt-1].item.([]ast.CIStr),
ColumnChoice: ast.ColumnList,
AnalyzeOpts: yyS[yypt-0].item.([]ast.AnalyzeOpt)}
}
case 246:
{
parser.yyVAL.item = ast.DefaultChoice
}
case 247:
{
parser.yyVAL.item = ast.AllColumns
}
case 248:
{
parser.yyVAL.item = ast.PredicateColumns
}
case 249:
{
parser.yyVAL.item = []ast.AnalyzeOpt{}
}
case 250:
{
parser.yyVAL.item = yyS[yypt-0].item.([]ast.AnalyzeOpt)
}
case 251:
{
parser.yyVAL.item = []ast.AnalyzeOpt{yyS[yypt-0].item.(ast.AnalyzeOpt)}
}
case 252:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.AnalyzeOpt), yyS[yypt-0].item.(ast.AnalyzeOpt))
}
case 253:
{
parser.yyVAL.item = append(yyS[yypt-1].item.([]ast.AnalyzeOpt), yyS[yypt-0].item.(ast.AnalyzeOpt))
}
case 254:
{
parser.yyVAL.item = ast.AnalyzeOpt{Type: ast.AnalyzeOptNumBuckets, Value: ast.NewValueExpr(yyS[yypt-1].item, "", "")}
}
case 255:
{
parser.yyVAL.item = ast.AnalyzeOpt{Type: ast.AnalyzeOptNumTopN, Value: ast.NewValueExpr(yyS[yypt-1].item, "", "")}
}
case 256:
{
parser.yyVAL.item = ast.AnalyzeOpt{Type: ast.AnalyzeOptCMSketchDepth, Value: ast.NewValueExpr(yyS[yypt-2].item, "", "")}
}
case 257:
{
parser.yyVAL.item = ast.AnalyzeOpt{Type: ast.AnalyzeOptCMSketchWidth, Value: ast.NewValueExpr(yyS[yypt-2].item, "", "")}
}
case 258:
{
parser.yyVAL.item = ast.AnalyzeOpt{Type: ast.AnalyzeOptNumSamples, Value: ast.NewValueExpr(yyS[yypt-1].item, "", "")}
}
case 259:
{
parser.yyVAL.item = ast.AnalyzeOpt{Type: ast.AnalyzeOptSampleRate, Value: ast.NewValueExpr(yyS[yypt-1].item, "", "")}
}
case 260:
{
parser.yyVAL.item = ast.AnalyzeOpt{Type: ast.AnalyzeOptNDVRate, Value: ast.NewValueExpr(yyS[yypt-1].item, "", "")}
}
case 261:
{
parser.yyVAL.item = &ast.Assignment{Column: yyS[yypt-2].item.(*ast.ColumnName), Expr: yyS[yypt-0].expr}
}
case 262:
{
parser.yyVAL.item = []*ast.Assignment{yyS[yypt-0].item.(*ast.Assignment)}
}
case 263:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.Assignment), yyS[yypt-0].item.(*ast.Assignment))
}
case 264:
{
parser.yyVAL.statement = &ast.BeginStmt{}
}
case 265:
{
parser.yyVAL.statement = &ast.BeginStmt{
Mode: ast.Pessimistic,
}
}
case 266:
{
parser.yyVAL.statement = &ast.BeginStmt{
Mode: ast.Optimistic,
}
}
case 267:
{
parser.yyVAL.statement = &ast.BeginStmt{}
}
case 268:
{
parser.yyVAL.statement = &ast.BeginStmt{}
}
case 269:
{
parser.yyVAL.statement = &ast.BeginStmt{}
}
case 270:
{
parser.yyVAL.statement = &ast.BeginStmt{
CausalConsistencyOnly: true,
}
}
case 271:
{
parser.yyVAL.statement = &ast.BeginStmt{
ReadOnly: true,
}
}
case 272:
{
parser.yyVAL.statement = &ast.BeginStmt{
ReadOnly: true,
AsOf: yyS[yypt-0].item.(*ast.AsOfClause),
}
}
case 273:
{
parser.yyVAL.statement = &ast.BinlogStmt{Str: yyS[yypt-0].ident}
}
case 274:
{
colDef := &ast.ColumnDef{Name: yyS[yypt-2].item.(*ast.ColumnName), Tp: yyS[yypt-1].item.(*types.FieldType), Options: yyS[yypt-0].item.(ast.ColumnOptionList).Options}
if err := colDef.Validate(); err != nil {
yylex.AppendError(err)
return 1
}
parser.yyVAL.item = colDef
}
case 275:
{
// TODO: check flen 0
tp := types.NewFieldType(mysql.TypeLonglong)
options := []*ast.ColumnOption{{Tp: ast.ColumnOptionNotNull}, {Tp: ast.ColumnOptionAutoIncrement}, {Tp: ast.ColumnOptionUniqKey}}
options = append(options, yyS[yypt-0].item.(ast.ColumnOptionList).Options...)
tp.AddFlag(mysql.UnsignedFlag)
colDef := &ast.ColumnDef{Name: yyS[yypt-2].item.(*ast.ColumnName), Tp: tp, Options: options}
if err := colDef.Validate(); err != nil {
yylex.AppendError(err)
return 1
}
parser.yyVAL.item = colDef
}
case 276:
{
parser.yyVAL.item = &ast.ColumnName{Name: ast.NewCIStr(yyS[yypt-0].ident)}
}
case 277:
{
parser.yyVAL.item = &ast.ColumnName{Table: ast.NewCIStr(yyS[yypt-2].ident), Name: ast.NewCIStr(yyS[yypt-0].ident)}
}
case 278:
{
parser.yyVAL.item = &ast.ColumnName{Schema: ast.NewCIStr(yyS[yypt-4].ident), Table: ast.NewCIStr(yyS[yypt-2].ident), Name: ast.NewCIStr(yyS[yypt-0].ident)}
}
case 279:
{
parser.yyVAL.item = []*ast.ColumnName{yyS[yypt-0].item.(*ast.ColumnName)}
}
case 280:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.ColumnName), yyS[yypt-0].item.(*ast.ColumnName))
}
case 281:
{
parser.yyVAL.item = []*ast.ColumnName{}
}
case 283:
{
parser.yyVAL.item = []ast.CIStr{}
}
case 284:
{
parser.yyVAL.item = yyS[yypt-1].item
}
case 285:
{
parser.yyVAL.item = []ast.CIStr{ast.NewCIStr(yyS[yypt-0].ident)}
}
case 286:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.CIStr), ast.NewCIStr(yyS[yypt-0].ident))
}
case 287:
{
parser.yyVAL.item = []*ast.ColumnNameOrUserVar{}
}
case 289:
{
parser.yyVAL.item = []*ast.ColumnNameOrUserVar{yyS[yypt-0].item.(*ast.ColumnNameOrUserVar)}
}
case 290:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.ColumnNameOrUserVar), yyS[yypt-0].item.(*ast.ColumnNameOrUserVar))
}
case 291:
{
parser.yyVAL.item = &ast.ColumnNameOrUserVar{ColumnName: yyS[yypt-0].item.(*ast.ColumnName)}
}
case 292:
{
parser.yyVAL.item = &ast.ColumnNameOrUserVar{UserVar: yyS[yypt-0].expr.(*ast.VariableExpr)}
}
case 293:
{
parser.yyVAL.item = []*ast.ColumnNameOrUserVar{}
}
case 294:
{
parser.yyVAL.item = yyS[yypt-1].item.([]*ast.ColumnNameOrUserVar)
}
case 295:
{
parser.yyVAL.statement = &ast.CommitStmt{}
}
case 296:
{
parser.yyVAL.statement = &ast.CommitStmt{CompletionType: yyS[yypt-0].item.(ast.CompletionType)}
}
case 300:
{
parser.yyVAL.ident = "NOT"
}
case 301:
{
parser.yyVAL.item = true
}
case 302:
{
parser.yyVAL.item = false
}
case 303:
{
parser.yyVAL.item = true
}
case 305:
{
parser.yyVAL.item = 0
}
case 306:
{
if yyS[yypt-0].item.(bool) {
parser.yyVAL.item = 1
} else {
parser.yyVAL.item = 2
}
}
case 307:
{
parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionNotNull}
}
case 308:
{
parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionNull}
}
case 309:
{
parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionAutoIncrement}
}
case 310:
{
// KEY is normally a synonym for INDEX. The key attribute PRIMARY KEY
// can also be specified as just KEY when given in a column definition.
// See http://dev.mysql.com/doc/refman/5.7/en/create-table.html
parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionPrimaryKey, StrValue: yyS[yypt-0].ident}
}
case 311:
{
// KEY is normally a synonym for INDEX. The key attribute PRIMARY KEY
// can also be specified as just KEY when given in a column definition.
// See http://dev.mysql.com/doc/refman/5.7/en/create-table.html
parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionPrimaryKey, PrimaryKeyTp: yyS[yypt-1].item.(ast.PrimaryKeyType), StrValue: yyS[yypt-0].ident}
}
case 312:
{
parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionUniqKey, StrValue: "Global"}
}
case 313:
{
parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionUniqKey}
}
case 314:
{
parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionUniqKey}
}
case 315:
{
parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionUniqKey, StrValue: yyS[yypt-0].ident}
}
case 316:
{
parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionDefaultValue, Expr: yyS[yypt-0].expr}
}
case 317:
{
parser.yyVAL.item = ast.ColumnOptionList{
Options: []*ast.ColumnOption{{Tp: ast.ColumnOptionNotNull}, {Tp: ast.ColumnOptionAutoIncrement}, {Tp: ast.ColumnOptionUniqKey}},
}
}
case 318:
{
parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionOnUpdate, Expr: yyS[yypt-0].expr}
}
case 319:
{
parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionComment, Expr: ast.NewValueExpr(yyS[yypt-0].ident, "", "")}
}
case 320:
{
// See https://dev.mysql.com/doc/refman/5.7/en/create-table.html
// The CHECK clause is parsed but ignored by all storage engines.
// See the branch named `EnforcedOrNotOrNotNullOpt`.
optionCheck := &ast.ColumnOption{
Tp: ast.ColumnOptionCheck,
Expr: yyS[yypt-2].expr,
Enforced: true,
}
// Keep the column type check constraint name.
if yyS[yypt-5].item != nil {
optionCheck.ConstraintName = yyS[yypt-5].item.(string)
}
switch yyS[yypt-0].item.(int) {
case 0:
parser.yyVAL.item = ast.ColumnOptionList{
Options: []*ast.ColumnOption{optionCheck, {Tp: ast.ColumnOptionNotNull}},
}
case 1:
optionCheck.Enforced = true
parser.yyVAL.item = optionCheck
case 2:
optionCheck.Enforced = false
parser.yyVAL.item = optionCheck
default:
}
}
case 321:
{
startOffset := parser.startOffset(&yyS[yypt-2])
endOffset := parser.endOffset(&yyS[yypt-1])
expr := yyS[yypt-2].expr
parser.setNodeText(expr, parser.src[startOffset:endOffset])
parser.yyVAL.item = &ast.ColumnOption{
Tp: ast.ColumnOptionGenerated,
Expr: expr,
Stored: yyS[yypt-0].item.(bool),
}
}
case 322:
{
parser.yyVAL.item = &ast.ColumnOption{
Tp: ast.ColumnOptionReference,
Refer: yyS[yypt-0].item.(*ast.ReferenceDef),
}
}
case 323:
{
parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionCollate, StrValue: yyS[yypt-0].ident}
}
case 324:
{
parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionColumnFormat, StrValue: yyS[yypt-0].ident}
}
case 325:
{
parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionStorage, StrValue: yyS[yypt-0].ident}
yylex.AppendError(yylex.Errorf("The STORAGE clause is parsed but ignored by all storage engines."))
parser.lastErrorAsWarn()
}
case 326:
{
parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionAutoRandom, AutoRandOpt: yyS[yypt-0].item.(ast.AutoRandomOption)}
}
case 327:
{
parser.yyVAL.item = &ast.ColumnOption{
Tp: ast.ColumnOptionSecondaryEngineAttribute,
StrValue: yyS[yypt-0].ident,
}
}
case 328:
{
parser.yyVAL.item = ast.AutoRandomOption{ShardBits: types.UnspecifiedLength, RangeBits: types.UnspecifiedLength}
}
case 329:
{
parser.yyVAL.item = ast.AutoRandomOption{ShardBits: int(yyS[yypt-1].item.(uint64)), RangeBits: types.UnspecifiedLength}
}
case 330:
{
parser.yyVAL.item = ast.AutoRandomOption{ShardBits: int(yyS[yypt-3].item.(uint64)), RangeBits: int(yyS[yypt-1].item.(uint64))}
}
case 334:
{
parser.yyVAL.ident = "DEFAULT"
}
case 335:
{
parser.yyVAL.ident = "FIXED"
}
case 336:
{
parser.yyVAL.ident = "DYNAMIC"
}
case 339:
{
parser.yyVAL.item = false
}
case 340:
{
parser.yyVAL.item = false
}
case 341:
{
parser.yyVAL.item = true
}
case 342:
{
if columnOption, ok := yyS[yypt-0].item.(*ast.ColumnOption); ok {
hasCollateOption := false
if columnOption.Tp == ast.ColumnOptionCollate {
hasCollateOption = true
}
parser.yyVAL.item = ast.ColumnOptionList{
HasCollateOption: hasCollateOption,
Options: []*ast.ColumnOption{columnOption},
}
} else {
parser.yyVAL.item = yyS[yypt-0].item
}
}
case 343:
{
columnOptionList := yyS[yypt-1].item.(ast.ColumnOptionList)
if columnOption, ok := yyS[yypt-0].item.(*ast.ColumnOption); ok {
if columnOption.Tp == ast.ColumnOptionCollate && columnOptionList.HasCollateOption {
yylex.AppendError(ErrParse.GenWithStackByArgs("Multiple COLLATE clauses", yylex.Errorf("").Error()))
return 1
}
columnOptionList.Options = append(columnOptionList.Options, columnOption)
} else {
if columnOptionList.HasCollateOption && yyS[yypt-0].item.(ast.ColumnOptionList).HasCollateOption {
yylex.AppendError(ErrParse.GenWithStackByArgs("Multiple COLLATE clauses", yylex.Errorf("").Error()))
return 1
}
columnOptionList.Options = append(columnOptionList.Options, yyS[yypt-0].item.(ast.ColumnOptionList).Options...)
}
parser.yyVAL.item = columnOptionList
}
case 344:
{
parser.yyVAL.item = ast.ColumnOptionList{}
}
case 346:
{
c := &ast.Constraint{
Tp: ast.ConstraintPrimaryKey,
Keys: yyS[yypt-2].item.([]*ast.IndexPartSpecification),
Name: yyS[yypt-4].item.([]interface{})[0].(*ast.NullString).String,
IsEmptyIndex: yyS[yypt-4].item.([]interface{})[0].(*ast.NullString).Empty,
}
if yyS[yypt-0].item != nil {
c.Option = yyS[yypt-0].item.(*ast.IndexOption)
}
if indexType := yyS[yypt-4].item.([]interface{})[1]; indexType != nil {
if c.Option == nil {
c.Option = &ast.IndexOption{}
}
c.Option.Tp = indexType.(ast.IndexType)
}
parser.yyVAL.item = c
}
case 347:
{
c := &ast.Constraint{
Tp: ast.ConstraintFulltext,
Keys: yyS[yypt-2].item.([]*ast.IndexPartSpecification),
Name: yyS[yypt-4].item.(*ast.NullString).String,
IsEmptyIndex: yyS[yypt-4].item.(*ast.NullString).Empty,
}
if yyS[yypt-0].item != nil {
c.Option = yyS[yypt-0].item.(*ast.IndexOption)
} else {
c.Option = &ast.IndexOption{}
}
parser.yyVAL.item = c
}
case 348:
{
c := &ast.Constraint{
IfNotExists: yyS[yypt-5].item.(bool),
Tp: ast.ConstraintIndex,
Keys: yyS[yypt-2].item.([]*ast.IndexPartSpecification),
Name: yyS[yypt-4].item.([]interface{})[0].(*ast.NullString).String,
IsEmptyIndex: yyS[yypt-4].item.([]interface{})[0].(*ast.NullString).Empty,
}
if yyS[yypt-0].item != nil {
c.Option = yyS[yypt-0].item.(*ast.IndexOption)
}
if indexType := yyS[yypt-4].item.([]interface{})[1]; indexType != nil {
if c.Option == nil {
c.Option = &ast.IndexOption{}
}
c.Option.Tp = indexType.(ast.IndexType)
}
parser.yyVAL.item = c
}
case 349:
{
c := &ast.Constraint{
Tp: ast.ConstraintUniq,
Keys: yyS[yypt-2].item.([]*ast.IndexPartSpecification),
Name: yyS[yypt-4].item.([]interface{})[0].(*ast.NullString).String,
IsEmptyIndex: yyS[yypt-4].item.([]interface{})[0].(*ast.NullString).Empty,
}
if yyS[yypt-0].item != nil {
c.Option = yyS[yypt-0].item.(*ast.IndexOption)
}
if indexType := yyS[yypt-4].item.([]interface{})[1]; indexType != nil {
if c.Option == nil {
c.Option = &ast.IndexOption{}
}
c.Option.Tp = indexType.(ast.IndexType)
}
parser.yyVAL.item = c
}
case 350:
{
parser.yyVAL.item = &ast.Constraint{
IfNotExists: yyS[yypt-5].item.(bool),
Tp: ast.ConstraintForeignKey,
Keys: yyS[yypt-2].item.([]*ast.IndexPartSpecification),
Name: yyS[yypt-4].item.(*ast.NullString).String,
Refer: yyS[yypt-0].item.(*ast.ReferenceDef),
IsEmptyIndex: yyS[yypt-4].item.(*ast.NullString).Empty,
}
}
case 351:
{
parser.yyVAL.item = &ast.Constraint{
Tp: ast.ConstraintCheck,
Expr: yyS[yypt-2].expr.(ast.ExprNode),
Enforced: yyS[yypt-0].item.(bool),
}
}
case 352:
{
parser.yyVAL.item = ast.MatchFull
}
case 353:
{
parser.yyVAL.item = ast.MatchPartial
}
case 354:
{
parser.yyVAL.item = ast.MatchSimple
}
case 355:
{
parser.yyVAL.item = ast.MatchNone
}
case 356:
{
parser.yyVAL.item = yyS[yypt-0].item
yylex.AppendError(yylex.Errorf("The MATCH clause is parsed but ignored by all storage engines."))
parser.lastErrorAsWarn()
}
case 357:
{
onDeleteUpdate := yyS[yypt-0].item.([2]interface{})
parser.yyVAL.item = &ast.ReferenceDef{
Table: yyS[yypt-3].item.(*ast.TableName),
IndexPartSpecifications: yyS[yypt-2].item.([]*ast.IndexPartSpecification),
OnDelete: onDeleteUpdate[0].(*ast.OnDeleteOpt),
OnUpdate: onDeleteUpdate[1].(*ast.OnUpdateOpt),
Match: yyS[yypt-1].item.(ast.MatchType),
}
}
case 358:
{
parser.yyVAL.item = &ast.OnDeleteOpt{ReferOpt: yyS[yypt-0].item.(ast.ReferOptionType)}
}
case 359:
{
parser.yyVAL.item = &ast.OnUpdateOpt{ReferOpt: yyS[yypt-0].item.(ast.ReferOptionType)}
}
case 360:
{
parser.yyVAL.item = [2]interface{}{&ast.OnDeleteOpt{}, &ast.OnUpdateOpt{}}
}
case 361:
{
parser.yyVAL.item = [2]interface{}{yyS[yypt-0].item, &ast.OnUpdateOpt{}}
}
case 362:
{
parser.yyVAL.item = [2]interface{}{&ast.OnDeleteOpt{}, yyS[yypt-0].item}
}
case 363:
{
parser.yyVAL.item = [2]interface{}{yyS[yypt-1].item, yyS[yypt-0].item}
}
case 364:
{
parser.yyVAL.item = [2]interface{}{yyS[yypt-0].item, yyS[yypt-1].item}
}
case 365:
{
parser.yyVAL.item = ast.ReferOptionRestrict
}
case 366:
{
parser.yyVAL.item = ast.ReferOptionCascade
}
case 367:
{
parser.yyVAL.item = ast.ReferOptionSetNull
}
case 368:
{
parser.yyVAL.item = ast.ReferOptionNoAction
}
case 369:
{
parser.yyVAL.item = ast.ReferOptionSetDefault
yylex.AppendError(yylex.Errorf("The SET DEFAULT clause is parsed but ignored by all storage engines."))
parser.lastErrorAsWarn()
}
case 374:
{
parser.yyVAL.expr = &ast.ColumnNameExpr{Name: &ast.ColumnName{
Name: ast.NewCIStr(yyS[yypt-1].ident),
}}
}
case 375:
{
parser.yyVAL.expr = yyS[yypt-1].expr
}
case 376:
{
parser.yyVAL.expr = yyS[yypt-1].expr.(*ast.FuncCallExpr)
}
case 377:
{
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr(yyS[yypt-2].ident),
}
}
case 378:
{
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr(yyS[yypt-3].ident),
Args: yyS[yypt-1].item.([]ast.ExprNode),
}
}
case 379:
{
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr(yyS[yypt-3].ident),
Args: yyS[yypt-1].item.([]ast.ExprNode),
}
}
case 380:
{
parser.yyVAL.expr = yyS[yypt-1].expr.(*ast.FuncCallExpr)
}
case 382:
{
parser.yyVAL.expr = &ast.FuncCallExpr{FnName: ast.NewCIStr("CURRENT_TIMESTAMP")}
}
case 383:
{
parser.yyVAL.expr = &ast.FuncCallExpr{FnName: ast.NewCIStr("CURRENT_TIMESTAMP")}
}
case 384:
{
parser.yyVAL.expr = &ast.FuncCallExpr{FnName: ast.NewCIStr("CURRENT_TIMESTAMP"), Args: []ast.ExprNode{ast.NewValueExpr(yyS[yypt-1].item, parser.charset, parser.collation)}}
}
case 385:
{
parser.yyVAL.expr = &ast.FuncCallExpr{FnName: ast.NewCIStr("CURRENT_DATE")}
}
case 386:
{
parser.yyVAL.expr = &ast.FuncCallExpr{FnName: ast.NewCIStr("CURRENT_DATE")}
}
case 387:
{
parser.yyVAL.expr = yyS[yypt-1].expr.(*ast.FuncCallExpr)
}
case 389:
{
objNameExpr := &ast.TableNameExpr{
Name: yyS[yypt-0].item.(*ast.TableName),
}
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr(ast.NextVal),
Args: []ast.ExprNode{objNameExpr},
}
}
case 390:
{
objNameExpr := &ast.TableNameExpr{
Name: yyS[yypt-1].item.(*ast.TableName),
}
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr(ast.NextVal),
Args: []ast.ExprNode{objNameExpr},
}
}
case 400:
{
parser.yyVAL.expr = ast.NewValueExpr(yyS[yypt-0].expr, parser.charset, parser.collation)
}
case 401:
{
parser.yyVAL.expr = &ast.UnaryOperationExpr{Op: opcode.Plus, V: ast.NewValueExpr(yyS[yypt-0].item, parser.charset, parser.collation)}
}
case 402:
{
parser.yyVAL.expr = &ast.UnaryOperationExpr{Op: opcode.Minus, V: ast.NewValueExpr(yyS[yypt-0].item, parser.charset, parser.collation)}
}
case 406:
{
parser.yyVAL.item = ast.StatsTypeCardinality
}
case 407:
{
parser.yyVAL.item = ast.StatsTypeDependency
}
case 408:
{
parser.yyVAL.item = ast.StatsTypeCorrelation
}
case 409:
{
parser.yyVAL.item = ast.BindingStatusTypeEnabled
}
case 410:
{
parser.yyVAL.item = ast.BindingStatusTypeDisabled
}
case 411:
{
parser.yyVAL.statement = &ast.CreateStatisticsStmt{
IfNotExists: yyS[yypt-9].item.(bool),
StatsName: yyS[yypt-8].ident,
StatsType: yyS[yypt-6].item.(uint8),
Table: yyS[yypt-3].item.(*ast.TableName),
Columns: yyS[yypt-1].item.([]*ast.ColumnName),
}
}
case 412:
{
parser.yyVAL.statement = &ast.DropStatisticsStmt{StatsName: yyS[yypt-0].ident}
}
case 413:
{
var indexOption *ast.IndexOption
if yyS[yypt-1].item != nil {
indexOption = yyS[yypt-1].item.(*ast.IndexOption)
if indexOption.Tp == ast.IndexTypeInvalid {
if yyS[yypt-7].item != nil {
indexOption.Tp = yyS[yypt-7].item.(ast.IndexType)
}
}
} else {
indexOption = &ast.IndexOption{}
if yyS[yypt-7].item != nil {
indexOption.Tp = yyS[yypt-7].item.(ast.IndexType)
}
}
var indexLockAndAlgorithm *ast.IndexLockAndAlgorithm
if yyS[yypt-0].item != nil {
indexLockAndAlgorithm = yyS[yypt-0].item.(*ast.IndexLockAndAlgorithm)
if indexLockAndAlgorithm.LockTp == ast.LockTypeDefault && indexLockAndAlgorithm.AlgorithmTp == ast.AlgorithmTypeDefault {
indexLockAndAlgorithm = nil
}
}
parser.yyVAL.statement = &ast.CreateIndexStmt{
IfNotExists: yyS[yypt-9].item.(bool),
IndexName: yyS[yypt-8].ident,
Table: yyS[yypt-5].item.(*ast.TableName),
IndexPartSpecifications: yyS[yypt-3].item.([]*ast.IndexPartSpecification),
IndexOption: indexOption,
KeyType: yyS[yypt-11].item.(ast.IndexKeyType),
LockAlg: indexLockAndAlgorithm,
}
}
case 414:
{
parser.yyVAL.item = ([]*ast.IndexPartSpecification)(nil)
}
case 415:
{
parser.yyVAL.item = yyS[yypt-1].item
}
case 416:
{
parser.yyVAL.item = []*ast.IndexPartSpecification{yyS[yypt-0].item.(*ast.IndexPartSpecification)}
}
case 417:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.IndexPartSpecification), yyS[yypt-0].item.(*ast.IndexPartSpecification))
}
case 418:
{
parser.yyVAL.item = &ast.IndexPartSpecification{Column: yyS[yypt-2].item.(*ast.ColumnName), Length: yyS[yypt-1].item.(int), Desc: yyS[yypt-0].item.(bool)}
}
case 419:
{
parser.yyVAL.item = &ast.IndexPartSpecification{Expr: yyS[yypt-2].expr, Desc: yyS[yypt-0].item.(bool)}
}
case 420:
{
parser.yyVAL.item = nil
}
case 421:
{
parser.yyVAL.item = &ast.IndexLockAndAlgorithm{
LockTp: yyS[yypt-0].item.(ast.LockType),
AlgorithmTp: ast.AlgorithmTypeDefault,
}
}
case 422:
{
parser.yyVAL.item = &ast.IndexLockAndAlgorithm{
LockTp: ast.LockTypeDefault,
AlgorithmTp: yyS[yypt-0].item.(ast.AlgorithmType),
}
}
case 423:
{
parser.yyVAL.item = &ast.IndexLockAndAlgorithm{
LockTp: yyS[yypt-1].item.(ast.LockType),
AlgorithmTp: yyS[yypt-0].item.(ast.AlgorithmType),
}
}
case 424:
{
parser.yyVAL.item = &ast.IndexLockAndAlgorithm{
LockTp: yyS[yypt-0].item.(ast.LockType),
AlgorithmTp: yyS[yypt-1].item.(ast.AlgorithmType),
}
}
case 425:
{
parser.yyVAL.item = ast.IndexKeyTypeNone
}
case 426:
{
parser.yyVAL.item = ast.IndexKeyTypeUnique
}
case 427:
{
parser.yyVAL.item = ast.IndexKeyTypeSpatial
}
case 428:
{
parser.yyVAL.item = ast.IndexKeyTypeFulltext
}
case 429:
{
parser.yyVAL.item = ast.IndexKeyTypeVector
}
case 430:
{
parser.yyVAL.item = ast.IndexKeyTypeColumnar
}
case 431:
{
parser.yyVAL.statement = &ast.AlterDatabaseStmt{
Name: ast.NewCIStr(yyS[yypt-1].ident),
AlterDefaultDatabase: false,
Options: yyS[yypt-0].item.([]*ast.DatabaseOption),
}
}
case 432:
{
parser.yyVAL.statement = &ast.AlterDatabaseStmt{
Name: ast.NewCIStr(""),
AlterDefaultDatabase: true,
Options: yyS[yypt-0].item.([]*ast.DatabaseOption),
}
}
case 433:
{
parser.yyVAL.statement = &ast.CreateDatabaseStmt{
IfNotExists: yyS[yypt-2].item.(bool),
Name: ast.NewCIStr(yyS[yypt-1].ident),
Options: yyS[yypt-0].item.([]*ast.DatabaseOption),
}
}
case 438:
{
parser.yyVAL.item = &ast.DatabaseOption{Tp: ast.DatabaseOptionCharset, Value: yyS[yypt-0].ident}
}
case 439:
{
parser.yyVAL.item = &ast.DatabaseOption{Tp: ast.DatabaseOptionCollate, Value: yyS[yypt-0].ident}
}
case 440:
{
parser.yyVAL.item = &ast.DatabaseOption{Tp: ast.DatabaseOptionEncryption, Value: yyS[yypt-0].ident}
}
case 441:
{
placementOptions := yyS[yypt-0].item.(*ast.PlacementOption)
parser.yyVAL.item = &ast.DatabaseOption{
// offset trick, enums are identical but of different type
Tp: ast.DatabaseOptionType(placementOptions.Tp),
Value: placementOptions.StrValue,
UintValue: placementOptions.UintValue,
}
}
case 442:
{
placementOptions := yyS[yypt-0].item.(*ast.PlacementOption)
parser.yyVAL.item = &ast.DatabaseOption{
// offset trick, enums are identical but of different type
Tp: ast.DatabaseOptionType(placementOptions.Tp),
Value: placementOptions.StrValue,
UintValue: placementOptions.UintValue,
}
}
case 443:
{
tiflashReplicaSpec := &ast.TiFlashReplicaSpec{
Count: yyS[yypt-1].item.(uint64),
Labels: yyS[yypt-0].item.([]string),
}
parser.yyVAL.item = &ast.DatabaseOption{
Tp: ast.DatabaseSetTiFlashReplica,
TiFlashReplica: tiflashReplicaSpec,
}
}
case 444:
{
parser.yyVAL.item = []*ast.DatabaseOption{}
}
case 446:
{
parser.yyVAL.item = []*ast.DatabaseOption{yyS[yypt-0].item.(*ast.DatabaseOption)}
}
case 447:
{
parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.DatabaseOption), yyS[yypt-0].item.(*ast.DatabaseOption))
}
case 448:
{
stmt := yyS[yypt-7].item.(*ast.CreateTableStmt)
stmt.Table = yyS[yypt-8].item.(*ast.TableName)
stmt.IfNotExists = yyS[yypt-9].item.(bool)
stmt.TemporaryKeyword = yyS[yypt-11].item.(ast.TemporaryKeyword)
stmt.Options = yyS[yypt-6].item.([]*ast.TableOption)
if yyS[yypt-5].item != nil {
stmt.Partition = yyS[yypt-5].item.(*ast.PartitionOptions)
}
if yyS[yypt-4].item != nil {
stmt.SplitIndex = yyS[yypt-4].item.([]*ast.SplitIndexOption)
}
stmt.OnDuplicate = yyS[yypt-3].item.(ast.OnDuplicateKeyHandlingType)
stmt.Select = yyS[yypt-1].item.(*ast.CreateTableStmt).Select
if (yyS[yypt-0].item != nil && stmt.TemporaryKeyword != ast.TemporaryGlobal) || (stmt.TemporaryKeyword == ast.TemporaryGlobal && yyS[yypt-0].item == nil) {
yylex.AppendError(yylex.Errorf("GLOBAL TEMPORARY and ON COMMIT DELETE ROWS must appear together"))
} else {
if stmt.TemporaryKeyword == ast.TemporaryGlobal {
stmt.OnCommitDelete = yyS[yypt-0].item.(bool)
}
}
parser.yyVAL.statement = stmt
}
case 449:
{
tmp := &ast.CreateTableStmt{
Table: yyS[yypt-2].item.(*ast.TableName),
ReferTable: yyS[yypt-1].item.(*ast.TableName),
IfNotExists: yyS[yypt-3].item.(bool),
TemporaryKeyword: yyS[yypt-5].item.(ast.TemporaryKeyword),
}
if (yyS[yypt-0].item != nil && tmp.TemporaryKeyword != ast.TemporaryGlobal) || (tmp.TemporaryKeyword == ast.TemporaryGlobal && yyS[yypt-0].item == nil) {
yylex.AppendError(yylex.Errorf("GLOBAL TEMPORARY and ON COMMIT DELETE ROWS must appear together"))
} else {
if tmp.TemporaryKeyword == ast.TemporaryGlobal {
tmp.OnCommitDelete = yyS[yypt-0].item.(bool)
}
}
parser.yyVAL.statement = tmp
}
case 450:
{
parser.yyVAL.item = nil
}
case 451:
{
parser.yyVAL.item = true
}
case 452:
{
parser.yyVAL.item = false
}
case 455:
{
parser.yyVAL.item = nil
}
case 456:
{
method := yyS[yypt-4].item.(*ast.PartitionMethod)
method.Num = yyS[yypt-3].item.(uint64)
sub, _ := yyS[yypt-2].item.(*ast.PartitionMethod)
defs, _ := yyS[yypt-1].item.([]*ast.PartitionDefinition)
UpdateIndexes, _ := yyS[yypt-0].item.([]*ast.Constraint)
opt := &ast.PartitionOptions{
PartitionMethod: *method,
Sub: sub,
Definitions: defs,
UpdateIndexes: UpdateIndexes,
}
if err := opt.Validate(); err != nil {
yylex.AppendError(err)
return 1
}
parser.yyVAL.item = opt
}
case 457:
{
parser.yyVAL.item = false
}
case 458:
{
parser.yyVAL.item = true
}
case 459:
{
opt := &ast.IndexOption{Global: yyS[yypt-0].item.(bool)}
parser.yyVAL.item = &ast.Constraint{
Name: yyS[yypt-1].ident,
Option: opt,
}
}
case 460:
{
parser.yyVAL.item = []*ast.Constraint{yyS[yypt-0].item.(*ast.Constraint)}
}
case 461:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.Constraint), yyS[yypt-0].item.(*ast.Constraint))
}
case 462:
{
parser.yyVAL.item = nil
}
case 463:
{
parser.yyVAL.item = yyS[yypt-1].item
}
case 464:
{
keyAlgorithm, _ := yyS[yypt-3].item.(*ast.PartitionKeyAlgorithm)
parser.yyVAL.item = &ast.PartitionMethod{
Tp: ast.PartitionTypeKey,
Linear: len(yyS[yypt-5].ident) != 0,
ColumnNames: yyS[yypt-1].item.([]*ast.ColumnName),
KeyAlgorithm: keyAlgorithm,
}
}
case 465:
{
parser.yyVAL.item = &ast.PartitionMethod{
Tp: ast.PartitionTypeHash,
Linear: len(yyS[yypt-4].ident) != 0,
Expr: yyS[yypt-1].expr.(ast.ExprNode),
}
}
case 466:
{
parser.yyVAL.item = nil
}
case 467:
{
tp := getUint64FromNUM(yyS[yypt-0].item)
if tp != 1 && tp != 2 {
yylex.AppendError(ErrSyntax)
return 1
}
parser.yyVAL.item = &ast.PartitionKeyAlgorithm{
Type: tp,
}
}
case 469:
{
partitionInterval, _ := yyS[yypt-0].item.(*ast.PartitionInterval)
parser.yyVAL.item = &ast.PartitionMethod{
Tp: ast.PartitionTypeRange,
Expr: yyS[yypt-2].expr.(ast.ExprNode),
Interval: partitionInterval,
}
}
case 470:
{
partitionInterval, _ := yyS[yypt-0].item.(*ast.PartitionInterval)
parser.yyVAL.item = &ast.PartitionMethod{
Tp: ast.PartitionTypeRange,
ColumnNames: yyS[yypt-2].item.([]*ast.ColumnName),
Interval: partitionInterval,
}
}
case 471:
{
parser.yyVAL.item = &ast.PartitionMethod{
Tp: ast.PartitionTypeList,
Expr: yyS[yypt-1].expr.(ast.ExprNode),
}
}
case 472:
{
parser.yyVAL.item = &ast.PartitionMethod{
Tp: ast.PartitionTypeList,
ColumnNames: yyS[yypt-1].item.([]*ast.ColumnName),
}
}
case 473:
{
parser.yyVAL.item = &ast.PartitionMethod{
Tp: ast.PartitionTypeSystemTime,
Expr: yyS[yypt-1].expr.(ast.ExprNode),
Unit: yyS[yypt-0].item.(ast.TimeUnitType),
}
}
case 474:
{
parser.yyVAL.item = &ast.PartitionMethod{
Tp: ast.PartitionTypeSystemTime,
Limit: yyS[yypt-0].item.(uint64),
}
}
case 475:
{
parser.yyVAL.item = &ast.PartitionMethod{
Tp: ast.PartitionTypeSystemTime,
}
}
case 476:
{
parser.yyVAL.item = nil
}
case 477:
{
partitionInterval := &ast.PartitionInterval{
IntervalExpr: yyS[yypt-4].item.(ast.PartitionIntervalExpr),
FirstRangeEnd: yyS[yypt-2].item.(ast.PartitionInterval).FirstRangeEnd,
LastRangeEnd: yyS[yypt-2].item.(ast.PartitionInterval).LastRangeEnd,
NullPart: yyS[yypt-1].item.(bool),
MaxValPart: yyS[yypt-0].item.(bool),
}
startOffset := parser.yyVAL.offset
endOffset := parser.yylval.offset
parser.setNodeText(partitionInterval, parser.src[startOffset:endOffset])
parser.yyVAL.item = partitionInterval
}
case 478:
{
parser.yyVAL.item = ast.PartitionIntervalExpr{Expr: yyS[yypt-0].expr, TimeUnit: ast.TimeUnitInvalid}
}
case 479:
{
parser.yyVAL.item = ast.PartitionIntervalExpr{Expr: yyS[yypt-1].expr, TimeUnit: yyS[yypt-0].item.(ast.TimeUnitType)}
}
case 480:
{
parser.yyVAL.item = false
}
case 481:
{
parser.yyVAL.item = true
}
case 482:
{
parser.yyVAL.item = false
}
case 483:
{
parser.yyVAL.item = true
}
case 484:
{
parser.yyVAL.item = ast.PartitionInterval{} // First/LastRangeEnd defaults to nil
}
case 485:
{
first := yyS[yypt-8].expr.(ast.ExprNode)
last := yyS[yypt-1].expr.(ast.ExprNode)
parser.yyVAL.item = ast.PartitionInterval{
FirstRangeEnd: &first,
LastRangeEnd: &last,
}
}
case 486:
{
parser.yyVAL.ident = ""
}
case 488:
{
parser.yyVAL.item = nil
}
case 489:
{
method := yyS[yypt-1].item.(*ast.PartitionMethod)
method.Num = yyS[yypt-0].item.(uint64)
parser.yyVAL.item = method
}
case 490:
{
parser.yyVAL.item = uint64(0)
}
case 491:
{
res := yyS[yypt-0].item.(uint64)
if res == 0 {
yylex.AppendError(ast.ErrNoParts.GenWithStackByArgs("subpartitions"))
return 1
}
parser.yyVAL.item = res
}
case 492:
{
parser.yyVAL.item = uint64(0)
}
case 493:
{
res := yyS[yypt-0].item.(uint64)
if res == 0 {
yylex.AppendError(ast.ErrNoParts.GenWithStackByArgs("partitions"))
return 1
}
parser.yyVAL.item = res
}
case 494:
{
parser.yyVAL.item = nil
}
case 495:
{
parser.yyVAL.item = yyS[yypt-1].item.([]*ast.PartitionDefinition)
}
case 496:
{
parser.yyVAL.item = []*ast.PartitionDefinition{yyS[yypt-0].item.(*ast.PartitionDefinition)}
}
case 497:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.PartitionDefinition), yyS[yypt-0].item.(*ast.PartitionDefinition))
}
case 498:
{
parser.yyVAL.item = &ast.PartitionDefinition{
Name: ast.NewCIStr(yyS[yypt-3].ident),
Clause: yyS[yypt-2].item.(ast.PartitionDefinitionClause),
Options: yyS[yypt-1].item.([]*ast.TableOption),
Sub: yyS[yypt-0].item.([]*ast.SubPartitionDefinition),
}
}
case 499:
{
parser.yyVAL.item = make([]*ast.SubPartitionDefinition, 0)
}
case 500:
{
parser.yyVAL.item = yyS[yypt-1].item
}
case 501:
{
parser.yyVAL.item = []*ast.SubPartitionDefinition{yyS[yypt-0].item.(*ast.SubPartitionDefinition)}
}
case 502:
{
list := yyS[yypt-2].item.([]*ast.SubPartitionDefinition)
parser.yyVAL.item = append(list, yyS[yypt-0].item.(*ast.SubPartitionDefinition))
}
case 503:
{
parser.yyVAL.item = &ast.SubPartitionDefinition{
Name: ast.NewCIStr(yyS[yypt-1].ident),
Options: yyS[yypt-0].item.([]*ast.TableOption),
}
}
case 504:
{
parser.yyVAL.item = make([]*ast.TableOption, 0)
}
case 505:
{
list := yyS[yypt-1].item.([]*ast.TableOption)
parser.yyVAL.item = append(list, yyS[yypt-0].item.(*ast.TableOption))
}
case 506:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionComment, StrValue: yyS[yypt-0].ident}
}
case 507:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionEngine, StrValue: yyS[yypt-0].ident}
}
case 508:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionEngine, StrValue: yyS[yypt-0].ident}
}
case 509:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionEngineAttribute, StrValue: yyS[yypt-0].ident}
}
case 510:
{
parser.yyVAL.item = &ast.TableOption{
Tp: ast.TableOptionSecondaryEngineAttribute,
StrValue: yyS[yypt-0].ident,
}
}
case 511:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionInsertMethod, StrValue: yyS[yypt-0].ident}
}
case 512:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionDataDirectory, StrValue: yyS[yypt-0].ident}
}
case 513:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionIndexDirectory, StrValue: yyS[yypt-0].ident}
}
case 514:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionMaxRows, UintValue: yyS[yypt-0].item.(uint64)}
}
case 515:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionMinRows, UintValue: yyS[yypt-0].item.(uint64)}
}
case 516:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionTablespace, StrValue: yyS[yypt-0].ident}
}
case 517:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionNodegroup, UintValue: yyS[yypt-0].item.(uint64)}
}
case 518:
{
placementOptions := yyS[yypt-0].item.(*ast.PlacementOption)
parser.yyVAL.item = &ast.TableOption{
// offset trick, enums are identical but of different type
Tp: ast.TableOptionType(placementOptions.Tp),
StrValue: placementOptions.StrValue,
UintValue: placementOptions.UintValue,
}
}
case 519:
{
parser.yyVAL.item = &ast.PartitionDefinitionClauseNone{}
}
case 520:
{
parser.yyVAL.item = &ast.PartitionDefinitionClauseLessThan{
Exprs: []ast.ExprNode{&ast.MaxValueExpr{}},
}
}
case 521:
{
parser.yyVAL.item = &ast.PartitionDefinitionClauseLessThan{
Exprs: yyS[yypt-1].item.([]ast.ExprNode),
}
}
case 522:
{
parser.yyVAL.item = &ast.PartitionDefinitionClauseIn{
Values: [][]ast.ExprNode{{&ast.DefaultExpr{}}},
}
}
case 523:
{
exprs := yyS[yypt-1].item.([]ast.ExprNode)
values := make([][]ast.ExprNode, 0, len(exprs))
for _, expr := range exprs {
if row, ok := expr.(*ast.RowExpr); ok {
values = append(values, row.Values)
} else {
values = append(values, []ast.ExprNode{expr})
}
}
parser.yyVAL.item = &ast.PartitionDefinitionClauseIn{Values: values}
}
case 524:
{
parser.yyVAL.item = &ast.PartitionDefinitionClauseHistory{Current: false}
}
case 525:
{
parser.yyVAL.item = &ast.PartitionDefinitionClauseHistory{Current: true}
}
case 526:
{
parser.yyVAL.item = ast.OnDuplicateKeyHandlingError
}
case 527:
{
parser.yyVAL.item = ast.OnDuplicateKeyHandlingIgnore
}
case 528:
{
parser.yyVAL.item = ast.OnDuplicateKeyHandlingReplace
}
case 531:
{
parser.yyVAL.item = &ast.CreateTableStmt{}
}
case 532:
{
parser.yyVAL.item = &ast.CreateTableStmt{Select: yyS[yypt-0].statement.(ast.ResultSetNode)}
}
case 533:
{
parser.yyVAL.item = &ast.CreateTableStmt{Select: yyS[yypt-0].statement.(ast.ResultSetNode)}
}
case 534:
{
parser.yyVAL.item = &ast.CreateTableStmt{Select: yyS[yypt-0].statement.(ast.ResultSetNode)}
}
case 535:
{
var sel ast.ResultSetNode
switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) {
case *ast.SelectStmt:
x.IsInBraces = true
sel = x
case *ast.SetOprStmt:
x.IsInBraces = true
sel = x
}
parser.yyVAL.item = &ast.CreateTableStmt{Select: sel}
}
case 539:
{
var sel ast.StmtNode
switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) {
case *ast.SelectStmt:
x.IsInBraces = true
sel = x
case *ast.SetOprStmt:
x.IsInBraces = true
sel = x
}
parser.yyVAL.statement = sel
}
case 540:
{
parser.yyVAL.item = yyS[yypt-0].item
}
case 541:
{
parser.yyVAL.item = yyS[yypt-1].item
}
case 542:
{
startOffset := parser.startOffset(&yyS[yypt-1])
endOffset := parser.yylval.offset
selStmt := yyS[yypt-1].statement.(ast.StmtNode)
x := &ast.CreateViewStmt{
OrReplace: yyS[yypt-9].item.(bool),
ViewName: yyS[yypt-4].item.(*ast.TableName),
Select: selStmt,
Algorithm: yyS[yypt-8].item.(ast.ViewAlgorithm),
Definer: yyS[yypt-7].item.(*auth.UserIdentity),
Security: yyS[yypt-6].item.(ast.ViewSecurity),
}
if yyS[yypt-3].item != nil {
x.Cols = yyS[yypt-3].item.([]ast.CIStr)
}
if yyS[yypt-0].item != nil {
x.CheckOption = yyS[yypt-0].item.(ast.ViewCheckOption)
endOffset = parser.startOffset(&yyS[yypt])
} else {
x.CheckOption = ast.CheckOptionCascaded
}
parser.setNodeText(selStmt, strings.TrimSpace(parser.src[startOffset:endOffset]))
parser.yyVAL.statement = x
}
case 543:
{
parser.yyVAL.item = false
}
case 544:
{
parser.yyVAL.item = true
}
case 545:
{
parser.yyVAL.item = ast.AlgorithmUndefined
}
case 546:
{
parser.yyVAL.item = ast.AlgorithmUndefined
}
case 547:
{
parser.yyVAL.item = ast.AlgorithmMerge
}
case 548:
{
parser.yyVAL.item = ast.AlgorithmTemptable
}
case 549:
{
parser.yyVAL.item = &auth.UserIdentity{CurrentUser: true}
}
case 550:
{
parser.yyVAL.item = yyS[yypt-0].item
}
case 551:
{
parser.yyVAL.item = ast.SecurityDefiner
}
case 552:
{
parser.yyVAL.item = ast.SecurityDefiner
}
case 553:
{
parser.yyVAL.item = ast.SecurityInvoker
}
case 555:
{
parser.yyVAL.item = nil
}
case 556:
{
parser.yyVAL.item = yyS[yypt-1].item.([]ast.CIStr)
}
case 557:
{
parser.yyVAL.item = []ast.CIStr{ast.NewCIStr(yyS[yypt-0].ident)}
}
case 558:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.CIStr), ast.NewCIStr(yyS[yypt-0].ident))
}
case 559:
{
parser.yyVAL.item = nil
}
case 560:
{
parser.yyVAL.item = ast.CheckOptionCascaded
}
case 561:
{
parser.yyVAL.item = ast.CheckOptionLocal
}
case 562:
{
parser.yyVAL.statement = &ast.DoStmt{
Exprs: yyS[yypt-0].item.([]ast.ExprNode),
}
}
case 563:
{
// Single Table
tn := yyS[yypt-7].item.(*ast.TableName)
tn.IndexHints = yyS[yypt-4].item.([]*ast.IndexHint)
tn.PartitionNames = yyS[yypt-6].item.([]ast.CIStr)
join := &ast.Join{Left: &ast.TableSource{Source: tn, AsName: yyS[yypt-5].item.(ast.CIStr)}, Right: nil}
x := &ast.DeleteStmt{
TableRefs: &ast.TableRefsClause{TableRefs: join},
Priority: yyS[yypt-11].item.(mysql.PriorityEnum),
Quick: yyS[yypt-10].item.(bool),
IgnoreErr: yyS[yypt-9].item.(bool),
}
if yyS[yypt-12].item != nil {
x.TableHints = yyS[yypt-12].item.([]*ast.TableOptimizerHint)
}
if yyS[yypt-3].item != nil {
x.Where = yyS[yypt-3].item.(ast.ExprNode)
}
if yyS[yypt-2].item != nil {
x.Order = yyS[yypt-2].item.(*ast.OrderByClause)
}
if yyS[yypt-1].item != nil {
x.Limit = yyS[yypt-1].item.(*ast.Limit)
}
if yyS[yypt-0].item != nil {
x.Returning = yyS[yypt-0].item.([]*ast.SelectField)
}
parser.yyVAL.statement = x
}
case 564:
{
// Multiple Table
x := &ast.DeleteStmt{
Priority: yyS[yypt-6].item.(mysql.PriorityEnum),
Quick: yyS[yypt-5].item.(bool),
IgnoreErr: yyS[yypt-4].item.(bool),
IsMultiTable: true,
BeforeFrom: true,
Tables: &ast.DeleteTableList{Tables: yyS[yypt-3].item.([]*ast.TableName)},
TableRefs: &ast.TableRefsClause{TableRefs: yyS[yypt-1].item.(*ast.Join)},
}
if yyS[yypt-7].item != nil {
x.TableHints = yyS[yypt-7].item.([]*ast.TableOptimizerHint)
}
if yyS[yypt-0].item != nil {
x.Where = yyS[yypt-0].item.(ast.ExprNode)
}
parser.yyVAL.statement = x
}
case 565:
{
// Multiple Table
x := &ast.DeleteStmt{
Priority: yyS[yypt-7].item.(mysql.PriorityEnum),
Quick: yyS[yypt-6].item.(bool),
IgnoreErr: yyS[yypt-5].item.(bool),
IsMultiTable: true,
Tables: &ast.DeleteTableList{Tables: yyS[yypt-3].item.([]*ast.TableName)},
TableRefs: &ast.TableRefsClause{TableRefs: yyS[yypt-1].item.(*ast.Join)},
}
if yyS[yypt-8].item != nil {
x.TableHints = yyS[yypt-8].item.([]*ast.TableOptimizerHint)
}
if yyS[yypt-0].item != nil {
x.Where = yyS[yypt-0].item.(ast.ExprNode)
}
parser.yyVAL.statement = x
}
case 568:
{
d := yyS[yypt-0].statement.(*ast.DeleteStmt)
d.With = yyS[yypt-1].item.(*ast.WithClause)
parser.yyVAL.statement = d
}
case 569:
{
d := yyS[yypt-0].statement.(*ast.DeleteStmt)
d.With = yyS[yypt-1].item.(*ast.WithClause)
parser.yyVAL.statement = d
}
case 571:
{
parser.yyVAL.statement = &ast.DropDatabaseStmt{IfExists: yyS[yypt-1].item.(bool), Name: ast.NewCIStr(yyS[yypt-0].ident)}
}
case 572:
{
var indexLockAndAlgorithm *ast.IndexLockAndAlgorithm
if yyS[yypt-0].item != nil {
indexLockAndAlgorithm = yyS[yypt-0].item.(*ast.IndexLockAndAlgorithm)
if indexLockAndAlgorithm.LockTp == ast.LockTypeDefault && indexLockAndAlgorithm.AlgorithmTp == ast.AlgorithmTypeDefault {
indexLockAndAlgorithm = nil
}
}
parser.yyVAL.statement = &ast.DropIndexStmt{IfExists: yyS[yypt-4].item.(bool), IndexName: yyS[yypt-3].ident, Table: yyS[yypt-1].item.(*ast.TableName), LockAlg: indexLockAndAlgorithm}
}
case 573:
{
parser.yyVAL.statement = &ast.DropIndexStmt{IfExists: yyS[yypt-3].item.(bool), IndexName: yyS[yypt-2].ident, Table: yyS[yypt-0].item.(*ast.TableName), IsHypo: true}
}
case 574:
{
parser.yyVAL.statement = &ast.DropTableStmt{IfExists: yyS[yypt-2].item.(bool), Tables: yyS[yypt-1].item.([]*ast.TableName), IsView: false, TemporaryKeyword: yyS[yypt-4].item.(ast.TemporaryKeyword)}
}
case 575:
{
parser.yyVAL.item = ast.TemporaryNone
}
case 576:
{
parser.yyVAL.item = ast.TemporaryLocal
}
case 577:
{
parser.yyVAL.item = ast.TemporaryGlobal
}
case 578:
{
parser.yyVAL.statement = &ast.DropTableStmt{Tables: yyS[yypt-1].item.([]*ast.TableName), IsView: true}
}
case 579:
{
parser.yyVAL.statement = &ast.DropTableStmt{IfExists: true, Tables: yyS[yypt-1].item.([]*ast.TableName), IsView: true}
}
case 580:
{
parser.yyVAL.statement = &ast.DropUserStmt{IsDropRole: false, IfExists: false, UserList: yyS[yypt-0].item.([]*auth.UserIdentity)}
}
case 581:
{
parser.yyVAL.statement = &ast.DropUserStmt{IsDropRole: false, IfExists: true, UserList: yyS[yypt-0].item.([]*auth.UserIdentity)}
}
case 582:
{
tmp := make([]*auth.UserIdentity, 0, 10)
roleList := yyS[yypt-0].item.([]*auth.RoleIdentity)
for _, r := range roleList {
tmp = append(tmp, &auth.UserIdentity{Username: r.Username, Hostname: r.Hostname})
}
parser.yyVAL.statement = &ast.DropUserStmt{IsDropRole: true, IfExists: false, UserList: tmp}
}
case 583:
{
tmp := make([]*auth.UserIdentity, 0, 10)
roleList := yyS[yypt-0].item.([]*auth.RoleIdentity)
for _, r := range roleList {
tmp = append(tmp, &auth.UserIdentity{Username: r.Username, Hostname: r.Hostname})
}
parser.yyVAL.statement = &ast.DropUserStmt{IsDropRole: true, IfExists: true, UserList: tmp}
}
case 584:
{
parser.yyVAL.statement = &ast.DropStatsStmt{Tables: yyS[yypt-0].item.([]*ast.TableName)}
}
case 585:
{
yylex.AppendError(ErrWarnDeprecatedSyntaxNoReplacement.FastGenByArgs("'DROP STATS ... PARTITION ...'", ""))
parser.lastErrorAsWarn()
parser.yyVAL.statement = &ast.DropStatsStmt{
Tables: []*ast.TableName{yyS[yypt-2].item.(*ast.TableName)},
PartitionNames: yyS[yypt-0].item.([]ast.CIStr),
}
}
case 586:
{
yylex.AppendError(ErrWarnDeprecatedSyntax.FastGenByArgs("DROP STATS ... GLOBAL", "DROP STATS ..."))
parser.lastErrorAsWarn()
parser.yyVAL.statement = &ast.DropStatsStmt{
Tables: []*ast.TableName{yyS[yypt-1].item.(*ast.TableName)},
IsGlobalStats: true,
}
}
case 594:
{
parser.yyVAL.statement = nil
}
case 595:
{
parser.yyVAL.statement = &ast.TraceStmt{
Stmt: yyS[yypt-0].statement,
Format: "row",
TracePlan: false,
}
startOffset := parser.startOffset(&yyS[yypt])
parser.setNodeText(yyS[yypt-0].statement, string(parser.src[startOffset:]))
}
case 596:
{
parser.yyVAL.statement = &ast.TraceStmt{
Stmt: yyS[yypt-0].statement,
Format: yyS[yypt-1].ident,
TracePlan: false,
}
startOffset := parser.startOffset(&yyS[yypt])
parser.setNodeText(yyS[yypt-0].statement, string(parser.src[startOffset:]))
}
case 597:
{
parser.yyVAL.statement = &ast.TraceStmt{
Stmt: yyS[yypt-0].statement,
TracePlan: true,
}
startOffset := parser.startOffset(&yyS[yypt])
parser.setNodeText(yyS[yypt-0].statement, string(parser.src[startOffset:]))
}
case 598:
{
parser.yyVAL.statement = &ast.TraceStmt{
Stmt: yyS[yypt-0].statement,
TracePlan: true,
TracePlanTarget: yyS[yypt-1].ident,
}
startOffset := parser.startOffset(&yyS[yypt])
parser.setNodeText(yyS[yypt-0].statement, string(parser.src[startOffset:]))
}
case 602:
{
startOffset := parser.startOffset(&yyS[yypt])
stmt := yyS[yypt-0].statement
parser.setNodeText(stmt, strings.TrimSpace(parser.src[startOffset:]))
parser.yyVAL.statement = &ast.ExplainStmt{
Stmt: stmt,
Explore: true,
}
}
case 603:
{
parser.yyVAL.statement = &ast.ExplainStmt{
SQLDigest: yyS[yypt-0].ident,
Explore: true,
}
}
case 604:
{
startOffset := parser.startOffset(&yyS[yypt])
stmt := yyS[yypt-0].statement
parser.setNodeText(stmt, strings.TrimSpace(parser.src[startOffset:]))
parser.yyVAL.statement = &ast.ExplainStmt{
Stmt: stmt,
Explore: true,
Analyze: true,
}
}
case 605:
{
parser.yyVAL.statement = &ast.ExplainStmt{
SQLDigest: yyS[yypt-0].ident,
Explore: true,
Analyze: true,
}
}
case 606:
{
parser.yyVAL.statement = &ast.ExplainStmt{
Stmt: &ast.ShowStmt{
Tp: ast.ShowColumns,
Table: yyS[yypt-0].item.(*ast.TableName),
},
}
}
case 607:
{
parser.yyVAL.statement = &ast.ExplainStmt{
Stmt: &ast.ShowStmt{
Tp: ast.ShowColumns,
Table: yyS[yypt-1].item.(*ast.TableName),
Column: yyS[yypt-0].item.(*ast.ColumnName),
},
}
}
case 608:
{
parser.yyVAL.statement = &ast.ExplainStmt{
Stmt: yyS[yypt-0].statement,
Format: "row",
}
}
case 609:
{
parser.yyVAL.statement = &ast.ExplainStmt{
PlanDigest: yyS[yypt-0].ident,
Format: "row",
}
}
case 610:
{
parser.yyVAL.statement = &ast.ExplainForStmt{
Format: "row",
ConnectionID: getUint64FromNUM(yyS[yypt-0].item),
}
}
case 611:
{
parser.yyVAL.statement = &ast.ExplainForStmt{
Format: yyS[yypt-3].ident,
ConnectionID: getUint64FromNUM(yyS[yypt-0].item),
}
}
case 612:
{
parser.yyVAL.statement = &ast.ExplainStmt{
Stmt: yyS[yypt-0].statement,
Format: yyS[yypt-1].ident,
}
}
case 613:
{
parser.yyVAL.statement = &ast.ExplainForStmt{
Format: yyS[yypt-3].ident,
ConnectionID: getUint64FromNUM(yyS[yypt-0].item),
}
}
case 614:
{
parser.yyVAL.statement = &ast.ExplainStmt{
Stmt: yyS[yypt-0].statement,
Format: yyS[yypt-1].ident,
}
}
case 615:
{
parser.yyVAL.statement = &ast.ExplainStmt{
PlanDigest: yyS[yypt-0].ident,
Format: yyS[yypt-1].ident,
}
}
case 616:
{
parser.yyVAL.statement = &ast.ExplainStmt{
PlanDigest: yyS[yypt-0].ident,
Format: yyS[yypt-1].ident,
}
}
case 617:
{
parser.yyVAL.statement = &ast.ExplainStmt{
Stmt: yyS[yypt-0].statement,
Format: "row",
Analyze: true,
}
}
case 618:
{
parser.yyVAL.statement = &ast.ExplainStmt{
PlanDigest: yyS[yypt-0].ident,
Format: "row",
Analyze: true,
}
}
case 619:
{
parser.yyVAL.statement = &ast.ExplainStmt{
Stmt: yyS[yypt-0].statement,
Format: yyS[yypt-1].ident,
Analyze: true,
}
}
case 620:
{
parser.yyVAL.statement = &ast.ExplainStmt{
PlanDigest: yyS[yypt-0].ident,
Format: yyS[yypt-1].ident,
Analyze: true,
}
}
case 621:
{
parser.yyVAL.statement = &ast.ExplainStmt{
PlanDigest: yyS[yypt-0].ident,
Format: yyS[yypt-1].ident,
Analyze: true,
}
}
case 622:
{
parser.yyVAL.statement = &ast.ExplainStmt{
Stmt: yyS[yypt-0].statement,
Format: yyS[yypt-1].ident,
Analyze: true,
}
}
case 631:
{
parser.yyVAL.statement = &ast.SavepointStmt{Name: yyS[yypt-0].ident}
}
case 632:
{
parser.yyVAL.statement = &ast.ReleaseSavepointStmt{Name: yyS[yypt-0].ident}
}
case 633:
{
stmt := yyS[yypt-3].item.(*ast.BRIEStmt)
stmt.Kind = ast.BRIEKindBackup
stmt.Storage = yyS[yypt-1].ident
stmt.Options = yyS[yypt-0].item.([]*ast.BRIEOption)
parser.yyVAL.statement = stmt
}
case 634:
{
stmt := &ast.BRIEStmt{}
stmt.Kind = ast.BRIEKindStreamStart
stmt.Storage = yyS[yypt-1].ident
stmt.Options = yyS[yypt-0].item.([]*ast.BRIEOption)
parser.yyVAL.statement = stmt
}
case 635:
{
stmt := &ast.BRIEStmt{}
stmt.Kind = ast.BRIEKindStreamStop
parser.yyVAL.statement = stmt
}
case 636:
{
stmt := &ast.BRIEStmt{}
stmt.Kind = ast.BRIEKindStreamPause
stmt.Options = yyS[yypt-0].item.([]*ast.BRIEOption)
parser.yyVAL.statement = stmt
}
case 637:
{
stmt := &ast.BRIEStmt{}
stmt.Kind = ast.BRIEKindStreamResume
parser.yyVAL.statement = stmt
}
case 638:
{
stmt := &ast.BRIEStmt{}
stmt.Kind = ast.BRIEKindStreamPurge
stmt.Storage = yyS[yypt-1].ident
stmt.Options = yyS[yypt-0].item.([]*ast.BRIEOption)
parser.yyVAL.statement = stmt
}
case 639:
{
stmt := &ast.BRIEStmt{}
stmt.Kind = ast.BRIEKindStreamStatus
parser.yyVAL.statement = stmt
}
case 640:
{
stmt := &ast.BRIEStmt{}
stmt.Kind = ast.BRIEKindStreamMetaData
stmt.Storage = yyS[yypt-0].ident
parser.yyVAL.statement = stmt
}
case 641:
{
stmt := &ast.BRIEStmt{}
stmt.Kind = ast.BRIEKindShowJob
stmt.JobID = yyS[yypt-0].item.(int64)
parser.yyVAL.statement = stmt
}
case 642:
{
stmt := &ast.BRIEStmt{}
stmt.Kind = ast.BRIEKindShowQuery
stmt.JobID = yyS[yypt-0].item.(int64)
parser.yyVAL.statement = stmt
}
case 643:
{
stmt := &ast.BRIEStmt{}
stmt.Kind = ast.BRIEKindCancelJob
stmt.JobID = yyS[yypt-0].item.(int64)
parser.yyVAL.statement = stmt
}
case 644:
{
stmt := &ast.BRIEStmt{}
stmt.Kind = ast.BRIEKindShowBackupMeta
stmt.Storage = yyS[yypt-0].ident
parser.yyVAL.statement = stmt
}
case 645:
{
stmt := yyS[yypt-3].item.(*ast.BRIEStmt)
stmt.Kind = ast.BRIEKindRestore
stmt.Storage = yyS[yypt-1].ident
stmt.Options = yyS[yypt-0].item.([]*ast.BRIEOption)
parser.yyVAL.statement = stmt
}
case 646:
{
stmt := &ast.BRIEStmt{}
stmt.Kind = ast.BRIEKindRestorePIT
stmt.Storage = yyS[yypt-1].ident
stmt.Options = yyS[yypt-0].item.([]*ast.BRIEOption)
parser.yyVAL.statement = stmt
}
case 647:
{
parser.yyVAL.item = &ast.BRIEStmt{}
}
case 648:
{
parser.yyVAL.item = &ast.BRIEStmt{Schemas: yyS[yypt-0].item.([]string)}
}
case 649:
{
parser.yyVAL.item = &ast.BRIEStmt{Tables: yyS[yypt-0].item.([]*ast.TableName)}
}
case 650:
{
parser.yyVAL.item = []string{yyS[yypt-0].ident}
}
case 651:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]string), yyS[yypt-0].ident)
}
case 652:
{
parser.yyVAL.item = []*ast.BRIEOption{}
}
case 653:
{
parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.BRIEOption), yyS[yypt-0].item.(*ast.BRIEOption))
}
case 654:
{
parser.yyVAL.item = ast.BRIEOptionConcurrency
}
case 655:
{
parser.yyVAL.item = ast.BRIEOptionResume
}
case 656:
{
parser.yyVAL.item = ast.BRIEOptionChecksumConcurrency
}
case 657:
{
parser.yyVAL.item = ast.BRIEOptionCompressionLevel
}
case 658:
{
parser.yyVAL.item = ast.BRIEOptionSendCreds
}
case 659:
{
parser.yyVAL.item = ast.BRIEOptionOnline
}
case 660:
{
parser.yyVAL.item = ast.BRIEOptionCheckpoint
}
case 661:
{
parser.yyVAL.item = ast.BRIEOptionSkipSchemaFiles
}
case 662:
{
parser.yyVAL.item = ast.BRIEOptionStrictFormat
}
case 663:
{
parser.yyVAL.item = ast.BRIEOptionCSVNotNull
}
case 664:
{
parser.yyVAL.item = ast.BRIEOptionCSVBackslashEscape
}
case 665:
{
parser.yyVAL.item = ast.BRIEOptionCSVTrimLastSeparators
}
case 666:
{
parser.yyVAL.item = ast.BRIEOptionWaitTiflashReady
}
case 667:
{
parser.yyVAL.item = ast.BRIEOptionWithSysTable
}
case 668:
{
parser.yyVAL.item = ast.BRIEOptionIgnoreStats
}
case 669:
{
parser.yyVAL.item = ast.BRIEOptionLoadStats
}
case 670:
{
parser.yyVAL.item = ast.BRIEOptionTiKVImporter
}
case 671:
{
parser.yyVAL.item = ast.BRIEOptionCSVSeparator
}
case 672:
{
parser.yyVAL.item = ast.BRIEOptionCSVDelimiter
}
case 673:
{
parser.yyVAL.item = ast.BRIEOptionCSVNull
}
case 674:
{
parser.yyVAL.item = ast.BRIEOptionCompression
}
case 675:
{
parser.yyVAL.item = ast.BRIEOptionEncryptionMethod
}
case 676:
{
parser.yyVAL.item = ast.BRIEOptionEncryptionKeyFile
}
case 677:
{
parser.yyVAL.item = ast.BRIEOptionBackend
}
case 678:
{
parser.yyVAL.item = ast.BRIEOptionOnDuplicate
}
case 679:
{
parser.yyVAL.item = ast.BRIEOptionOnDuplicate
}
case 680:
{
parser.yyVAL.item = &ast.BRIEOption{
Tp: yyS[yypt-2].item.(ast.BRIEOptionType),
UintValue: yyS[yypt-0].item.(uint64),
}
}
case 681:
{
value := uint64(0)
if yyS[yypt-0].item.(bool) {
value = 1
}
parser.yyVAL.item = &ast.BRIEOption{
Tp: yyS[yypt-2].item.(ast.BRIEOptionType),
UintValue: value,
}
}
case 682:
{
parser.yyVAL.item = &ast.BRIEOption{
Tp: yyS[yypt-2].item.(ast.BRIEOptionType),
StrValue: yyS[yypt-0].ident,
}
}
case 683:
{
parser.yyVAL.item = &ast.BRIEOption{
Tp: yyS[yypt-2].item.(ast.BRIEOptionType),
StrValue: strings.ToLower(yyS[yypt-0].ident),
}
}
case 684:
{
unit, err := yyS[yypt-1].item.(ast.TimeUnitType).Duration()
if err != nil {
yylex.AppendError(err)
return 1
}
// TODO: check overflow?
parser.yyVAL.item = &ast.BRIEOption{
Tp: ast.BRIEOptionBackupTimeAgo,
UintValue: yyS[yypt-2].item.(uint64) * uint64(unit),
}
}
case 685:
{
parser.yyVAL.item = &ast.BRIEOption{
Tp: ast.BRIEOptionBackupTS,
StrValue: yyS[yypt-0].ident,
}
}
case 686:
{
parser.yyVAL.item = &ast.BRIEOption{
Tp: ast.BRIEOptionBackupTSO,
UintValue: yyS[yypt-0].item.(uint64),
}
}
case 687:
{
parser.yyVAL.item = &ast.BRIEOption{
Tp: ast.BRIEOptionLastBackupTS,
StrValue: yyS[yypt-0].ident,
}
}
case 688:
{
parser.yyVAL.item = &ast.BRIEOption{
Tp: ast.BRIEOptionLastBackupTSO,
UintValue: yyS[yypt-0].item.(uint64),
}
}
case 689:
{
// TODO: check overflow?
parser.yyVAL.item = &ast.BRIEOption{
Tp: ast.BRIEOptionRateLimit,
UintValue: yyS[yypt-3].item.(uint64) * 1048576,
}
}
case 690:
{
parser.yyVAL.item = &ast.BRIEOption{
Tp: ast.BRIEOptionCSVHeader,
UintValue: ast.BRIECSVHeaderIsColumns,
}
}
case 691:
{
parser.yyVAL.item = &ast.BRIEOption{
Tp: ast.BRIEOptionCSVHeader,
UintValue: yyS[yypt-0].item.(uint64),
}
}
case 692:
{
value := uint64(0)
if yyS[yypt-0].item.(bool) {
value = 1
}
parser.yyVAL.item = &ast.BRIEOption{
Tp: ast.BRIEOptionChecksum,
UintValue: value,
}
}
case 693:
{
parser.yyVAL.item = &ast.BRIEOption{
Tp: ast.BRIEOptionChecksum,
UintValue: uint64(yyS[yypt-0].item.(ast.BRIEOptionLevel)),
}
}
case 694:
{
value := uint64(0)
if yyS[yypt-0].item.(bool) {
value = 1
}
parser.yyVAL.item = &ast.BRIEOption{
Tp: ast.BRIEOptionAnalyze,
UintValue: value,
}
}
case 695:
{
parser.yyVAL.item = &ast.BRIEOption{
Tp: ast.BRIEOptionAnalyze,
UintValue: uint64(yyS[yypt-0].item.(ast.BRIEOptionLevel)),
}
}
case 696:
{
parser.yyVAL.item = &ast.BRIEOption{
Tp: ast.BRIEOptionFullBackupStorage,
StrValue: yyS[yypt-0].ident,
}
}
case 697:
{
parser.yyVAL.item = &ast.BRIEOption{
Tp: ast.BRIEOptionRestoredTS,
StrValue: yyS[yypt-0].ident,
}
}
case 698:
{
parser.yyVAL.item = &ast.BRIEOption{
Tp: ast.BRIEOptionStartTS,
StrValue: yyS[yypt-0].ident,
}
}
case 699:
{
parser.yyVAL.item = &ast.BRIEOption{
Tp: ast.BRIEOptionUntilTS,
StrValue: yyS[yypt-0].ident,
}
}
case 700:
{
parser.yyVAL.item = &ast.BRIEOption{
Tp: ast.BRIEOptionGCTTL,
StrValue: yyS[yypt-0].ident,
}
}
case 701:
{
parser.yyVAL.item = getUint64FromNUM(yyS[yypt-0].item)
}
case 702:
{
v, rangeErrMsg := getInt64FromNUM(yyS[yypt-0].item)
if len(rangeErrMsg) != 0 {
yylex.AppendError(yylex.Errorf(rangeErrMsg))
return 1
}
parser.yyVAL.item = v
}
case 704:
{
parser.yyVAL.item = yyS[yypt-0].item.(int64) != 0
}
case 705:
{
parser.yyVAL.item = false
}
case 706:
{
parser.yyVAL.item = true
}
case 707:
{
parser.yyVAL.item = ast.BRIEOptionLevelOff
}
case 708:
{
parser.yyVAL.item = ast.BRIEOptionLevelOptional
}
case 709:
{
parser.yyVAL.item = ast.BRIEOptionLevelRequired
}
case 710:
{
parser.yyVAL.statement = &ast.ImportIntoActionStmt{
Tp: ast.ImportIntoCancel,
JobID: yyS[yypt-0].item.(int64),
}
}
case 711:
{
v := yyS[yypt-2].ident
v = strings.TrimPrefix(v, "@")
parser.yyVAL.expr = &ast.VariableExpr{
Name: v,
IsGlobal: false,
IsSystem: false,
Value: yyS[yypt-0].expr,
}
}
case 712:
{
parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.LogicOr, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr}
}
case 713:
{
parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.LogicXor, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr}
}
case 714:
{
parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.LogicAnd, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr}
}
case 715:
{
expr, ok := yyS[yypt-0].expr.(*ast.ExistsSubqueryExpr)
if ok {
expr.Not = !expr.Not
parser.yyVAL.expr = yyS[yypt-0].expr
} else {
parser.yyVAL.expr = &ast.UnaryOperationExpr{Op: opcode.Not, V: yyS[yypt-0].expr}
}
}
case 716:
{
parser.yyVAL.expr = &ast.MatchAgainst{
ColumnNames: yyS[yypt-6].item.([]*ast.ColumnName),
Against: yyS[yypt-2].expr,
Modifier: ast.FulltextSearchModifier(yyS[yypt-1].item.(int)),
}
}
case 717:
{
parser.yyVAL.expr = &ast.IsTruthExpr{Expr: yyS[yypt-2].expr, Not: !yyS[yypt-1].item.(bool), True: int64(1)}
}
case 718:
{
parser.yyVAL.expr = &ast.IsTruthExpr{Expr: yyS[yypt-2].expr, Not: !yyS[yypt-1].item.(bool), True: int64(0)}
}
case 719:
{
/* https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_is */
parser.yyVAL.expr = &ast.IsNullExpr{Expr: yyS[yypt-2].expr, Not: !yyS[yypt-1].item.(bool)}
}
case 721:
{
parser.yyVAL.expr = &ast.DefaultExpr{}
}
case 723:
{
parser.yyVAL.expr = &ast.MaxValueExpr{}
}
case 725:
{
parser.yyVAL.item = ast.FulltextSearchModifierNaturalLanguageMode
}
case 726:
{
parser.yyVAL.item = ast.FulltextSearchModifierNaturalLanguageMode
}
case 727:
{
parser.yyVAL.item = ast.FulltextSearchModifierNaturalLanguageMode | ast.FulltextSearchModifierWithQueryExpansion
}
case 728:
{
parser.yyVAL.item = ast.FulltextSearchModifierBooleanMode
}
case 729:
{
parser.yyVAL.item = ast.FulltextSearchModifierWithQueryExpansion
}
case 734:
{
parser.yyVAL.item = []ast.ExprNode{yyS[yypt-0].expr}
}
case 735:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.ExprNode), yyS[yypt-0].expr)
}
case 736:
{
parser.yyVAL.item = []ast.ExprNode{yyS[yypt-0].expr}
}
case 737:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.ExprNode), yyS[yypt-0].expr)
}
case 738:
{
parser.yyVAL.item = []ast.ExprNode{yyS[yypt-0].expr}
}
case 739:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.ExprNode), yyS[yypt-0].expr)
}
case 740:
{
parser.yyVAL.item = []ast.ExprNode{}
}
case 742:
{
parser.yyVAL.item = []ast.ExprNode{}
}
case 744:
{
expr := ast.NewValueExpr(yyS[yypt-0].item, parser.charset, parser.collation)
parser.yyVAL.item = []ast.ExprNode{expr}
}
case 745:
{
parser.yyVAL.expr = &ast.IsNullExpr{Expr: yyS[yypt-2].expr, Not: !yyS[yypt-1].item.(bool)}
}
case 746:
{
parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: yyS[yypt-1].item.(opcode.Op), L: yyS[yypt-2].expr, R: yyS[yypt-0].expr}
}
case 747:
{
sq := yyS[yypt-0].expr.(*ast.SubqueryExpr)
sq.MultiRows = true
parser.yyVAL.expr = &ast.CompareSubqueryExpr{Op: yyS[yypt-2].item.(opcode.Op), L: yyS[yypt-3].expr, R: sq, All: yyS[yypt-1].item.(bool)}
}
case 748:
{
v := yyS[yypt-2].ident
v = strings.TrimPrefix(v, "@")
variable := &ast.VariableExpr{
Name: v,
IsGlobal: false,
IsSystem: false,
Value: yyS[yypt-0].expr,
}
parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: yyS[yypt-3].item.(opcode.Op), L: yyS[yypt-4].expr, R: variable}
}
case 750:
{
parser.yyVAL.item = opcode.GE
}
case 751:
{
parser.yyVAL.item = opcode.GT
}
case 752:
{
parser.yyVAL.item = opcode.LE
}
case 753:
{
parser.yyVAL.item = opcode.LT
}
case 754:
{
parser.yyVAL.item = opcode.NE
}
case 755:
{
parser.yyVAL.item = opcode.NE
}
case 756:
{
parser.yyVAL.item = opcode.EQ
}
case 757:
{
parser.yyVAL.item = opcode.NullEQ
}
case 758:
{
parser.yyVAL.item = true
}
case 759:
{
parser.yyVAL.item = false
}
case 760:
{
parser.yyVAL.item = true
}
case 761:
{
parser.yyVAL.item = false
}
case 762:
{
parser.yyVAL.item = true
}
case 763:
{
parser.yyVAL.item = false
}
case 764:
{
parser.yyVAL.item = true
}
case 765:
{
parser.yyVAL.item = false
}
case 766:
{
parser.yyVAL.item = true
}
case 767:
{
parser.yyVAL.item = false
}
case 768:
{
parser.yyVAL.item = true
}
case 769:
{
parser.yyVAL.item = false
}
case 770:
{
parser.yyVAL.item = false
}
case 771:
{
parser.yyVAL.item = false
}
case 772:
{
parser.yyVAL.item = true
}
case 773:
{
parser.yyVAL.expr = &ast.PatternInExpr{Expr: yyS[yypt-4].expr, Not: !yyS[yypt-3].item.(bool), List: yyS[yypt-1].item.([]ast.ExprNode)}
}
case 774:
{
sq := yyS[yypt-0].expr.(*ast.SubqueryExpr)
sq.MultiRows = true
parser.yyVAL.expr = &ast.PatternInExpr{Expr: yyS[yypt-2].expr, Not: !yyS[yypt-1].item.(bool), Sel: sq}
}
case 775:
{
parser.yyVAL.expr = &ast.BetweenExpr{
Expr: yyS[yypt-4].expr,
Left: yyS[yypt-2].expr,
Right: yyS[yypt-0].expr,
Not: !yyS[yypt-3].item.(bool),
}
}
case 776:
{
escapeSpec := yyS[yypt-0].item.(*likeEscapeSpec)
escape := escapeSpec.escape
explicit := escapeSpec.explicit
if len(escape) > 1 {
yylex.AppendError(ErrWrongArguments.GenWithStackByArgs("ESCAPE"))
return 1
}
// When ESCAPE empty string is specified, escape is empty and explicit is true.
// This means no escape character should be used (Escape = 0).
var escapeChar byte
if len(escape) > 0 {
escapeChar = escape[0]
}
parser.yyVAL.expr = &ast.PatternLikeOrIlikeExpr{
Expr: yyS[yypt-3].expr,
Pattern: yyS[yypt-1].expr,
Not: !yyS[yypt-2].item.(bool),
Escape: escapeChar,
EscapeExplicit: explicit,
IsLike: true,
}
}
case 777:
{
escapeSpec := yyS[yypt-0].item.(*likeEscapeSpec)
escape := escapeSpec.escape
explicit := escapeSpec.explicit
if len(escape) > 1 {
yylex.AppendError(ErrWrongArguments.GenWithStackByArgs("ESCAPE"))
return 1
}
// When ESCAPE empty string is specified, escape is empty and explicit is true.
// This means no escape character should be used (Escape = 0).
var escapeChar byte
if len(escape) > 0 {
escapeChar = escape[0]
}
parser.yyVAL.expr = &ast.PatternLikeOrIlikeExpr{
Expr: yyS[yypt-3].expr,
Pattern: yyS[yypt-1].expr,
Not: !yyS[yypt-2].item.(bool),
Escape: escapeChar,
EscapeExplicit: explicit,
IsLike: false,
}
}
case 778:
{
parser.yyVAL.expr = &ast.PatternRegexpExpr{Expr: yyS[yypt-2].expr, Pattern: yyS[yypt-0].expr, Not: !yyS[yypt-1].item.(bool)}
}
case 779:
{
parser.yyVAL.expr = &ast.FuncCallExpr{FnName: ast.NewCIStr(ast.JSONMemberOf), Args: []ast.ExprNode{yyS[yypt-4].expr, yyS[yypt-1].expr}}
}
case 783:
{
parser.yyVAL.item = &likeEscapeSpec{escape: "\\", explicit: false}
}
case 784:
{
parser.yyVAL.item = &likeEscapeSpec{escape: yyS[yypt-0].ident, explicit: true}
}
case 785:
{
parser.yyVAL.item = &ast.SelectField{WildCard: &ast.WildCardField{}}
}
case 786:
{
wildCard := &ast.WildCardField{Table: ast.NewCIStr(yyS[yypt-2].ident)}
parser.yyVAL.item = &ast.SelectField{WildCard: wildCard}
}
case 787:
{
wildCard := &ast.WildCardField{Schema: ast.NewCIStr(yyS[yypt-4].ident), Table: ast.NewCIStr(yyS[yypt-2].ident)}
parser.yyVAL.item = &ast.SelectField{WildCard: wildCard}
}
case 788:
{
expr := yyS[yypt-1].expr
asName := yyS[yypt-0].ident
parser.yyVAL.item = &ast.SelectField{Expr: expr, AsName: ast.NewCIStr(asName)}
}
case 789:
{
parser.yyVAL.ident = ""
}
case 792:
{
parser.yyVAL.ident = yyS[yypt-0].ident
}
case 794:
{
parser.yyVAL.ident = yyS[yypt-0].ident
}
case 795:
{
field := yyS[yypt-0].item.(*ast.SelectField)
field.Offset = parser.startOffset(&yyS[yypt])
if field.Expr != nil {
endOffset := parser.yylval.offset
parser.setNodeText(field, strings.TrimSpace(parser.src[field.Offset:endOffset]))
}
parser.yyVAL.item = []*ast.SelectField{field}
}
case 796:
{
fl := yyS[yypt-2].item.([]*ast.SelectField)
field := yyS[yypt-0].item.(*ast.SelectField)
field.Offset = parser.startOffset(&yyS[yypt])
if field.Expr != nil {
endOffset := parser.yylval.offset
parser.setNodeText(field, strings.TrimSpace(parser.src[field.Offset:endOffset]))
}
parser.yyVAL.item = append(fl, field)
}
case 797:
{
parser.yyVAL.item = false
}
case 798:
{
parser.yyVAL.item = true
}
case 799:
{
parser.yyVAL.item = &ast.GroupByClause{Items: yyS[yypt-1].item.([]*ast.ByItem), Rollup: yyS[yypt-0].item.(bool)}
}
case 800:
{
parser.yyVAL.item = nil
}
case 801:
{
parser.yyVAL.item = &ast.HavingClause{Expr: yyS[yypt-0].expr}
}
case 802:
{
parser.yyVAL.item = nil
}
case 804:
{
parser.yyVAL.item = &ast.AsOfClause{
TsExpr: yyS[yypt-0].expr.(ast.ExprNode),
}
}
case 805:
{
parser.yyVAL.item = false
}
case 806:
{
parser.yyVAL.item = true
}
case 807:
{
parser.yyVAL.item = false
}
case 808:
{
parser.yyVAL.item = true
}
case 809:
{
parser.yyVAL.item = false
}
case 810:
{
parser.yyVAL.item = true
}
case 811:
{
parser.yyVAL.item = &ast.NullString{
String: "",
Empty: false,
}
}
case 812:
{
parser.yyVAL.item = &ast.NullString{
String: yyS[yypt-0].ident,
Empty: len(yyS[yypt-0].ident) == 0,
}
}
case 813:
{
parser.yyVAL.item = nil
}
case 814:
{
// Merge the options
if yyS[yypt-1].item == nil {
parser.yyVAL.item = yyS[yypt-0].item
} else {
opt1 := yyS[yypt-1].item.(*ast.IndexOption)
opt2 := yyS[yypt-0].item.(*ast.IndexOption)
if len(opt2.Comment) > 0 {
opt1.Comment = opt2.Comment
} else if opt2.Tp != 0 {
opt1.Tp = opt2.Tp
} else if opt2.KeyBlockSize > 0 {
opt1.KeyBlockSize = opt2.KeyBlockSize
} else if len(opt2.ParserName.O) > 0 {
opt1.ParserName = opt2.ParserName
} else if opt2.Visibility != ast.IndexVisibilityDefault {
opt1.Visibility = opt2.Visibility
} else if opt2.PrimaryKeyTp != ast.PrimaryKeyTypeDefault {
opt1.PrimaryKeyTp = opt2.PrimaryKeyTp
} else if opt2.AddColumnarReplicaOnDemand > 0 {
opt1.AddColumnarReplicaOnDemand = opt2.AddColumnarReplicaOnDemand
} else if opt2.Global {
opt1.Global = true
} else if opt2.SplitOpt != nil {
opt1.SplitOpt = opt2.SplitOpt
} else if len(opt2.SecondaryEngineAttr) > 0 {
opt1.SecondaryEngineAttr = opt2.SecondaryEngineAttr
} else if opt2.Condition != nil {
opt1.Condition = opt2.Condition
}
parser.yyVAL.item = opt1
}
}
case 815:
{
parser.yyVAL.item = &ast.IndexOption{
KeyBlockSize: yyS[yypt-0].item.(uint64),
}
}
case 816:
{
parser.yyVAL.item = &ast.IndexOption{
AddColumnarReplicaOnDemand: 1,
}
}
case 817:
{
parser.yyVAL.item = &ast.IndexOption{
Tp: yyS[yypt-0].item.(ast.IndexType),
}
}
case 818:
{
parser.yyVAL.item = &ast.IndexOption{
ParserName: ast.NewCIStr(yyS[yypt-0].ident),
}
}
case 819:
{
parser.yyVAL.item = &ast.IndexOption{
Comment: yyS[yypt-0].ident,
}
}
case 820:
{
parser.yyVAL.item = &ast.IndexOption{
Visibility: yyS[yypt-0].item.(ast.IndexVisibility),
}
}
case 821:
{
parser.yyVAL.item = &ast.IndexOption{
PrimaryKeyTp: yyS[yypt-0].item.(ast.PrimaryKeyType),
}
}
case 822:
{
parser.yyVAL.item = &ast.IndexOption{
Global: true,
}
}
case 823:
{
parser.yyVAL.item = &ast.IndexOption{
Global: false,
}
}
case 824:
{
parser.yyVAL.item = &ast.IndexOption{
SplitOpt: yyS[yypt-1].item.(*ast.SplitOption),
}
}
case 825:
{
parser.yyVAL.item = &ast.IndexOption{
SplitOpt: &ast.SplitOption{
Num: yyS[yypt-0].item.(int64),
},
}
}
case 826:
{
parser.yyVAL.item = &ast.IndexOption{SecondaryEngineAttr: yyS[yypt-0].ident}
}
case 827:
{
parser.yyVAL.item = &ast.IndexOption{
Condition: yyS[yypt-0].expr.(ast.ExprNode),
}
}
case 828:
{
parser.yyVAL.item = []interface{}{yyS[yypt-0].item, nil}
}
case 829:
{
parser.yyVAL.item = []interface{}{yyS[yypt-2].item, yyS[yypt-0].item}
}
case 830:
{
parser.yyVAL.item = []interface{}{&ast.NullString{String: yyS[yypt-2].ident, Empty: len(yyS[yypt-2].ident) == 0}, yyS[yypt-0].item}
}
case 831:
{
parser.yyVAL.item = nil
}
case 833:
{
parser.yyVAL.item = yyS[yypt-0].item
}
case 834:
{
parser.yyVAL.item = yyS[yypt-0].item
}
case 835:
{
parser.yyVAL.item = ast.IndexTypeBtree
}
case 836:
{
parser.yyVAL.item = ast.IndexTypeHash
}
case 837:
{
parser.yyVAL.item = ast.IndexTypeRtree
}
case 838:
{
parser.yyVAL.item = ast.IndexTypeHypo
}
case 839:
{
parser.yyVAL.item = ast.IndexTypeHNSW
}
case 840:
{
parser.yyVAL.item = ast.IndexTypeInverted
}
case 841:
{
parser.yyVAL.item = ast.IndexVisibilityVisible
}
case 842:
{
parser.yyVAL.item = ast.IndexVisibilityInvisible
}
case 1425:
{
parser.yyVAL.statement = &ast.CallStmt{
Procedure: yyS[yypt-0].expr.(*ast.FuncCallExpr),
}
}
case 1426:
{
parser.yyVAL.expr = &ast.FuncCallExpr{
Tp: ast.FuncCallExprTypeGeneric,
FnName: ast.NewCIStr(yyS[yypt-0].ident),
Args: []ast.ExprNode{},
}
}
case 1427:
{
parser.yyVAL.expr = &ast.FuncCallExpr{
Tp: ast.FuncCallExprTypeGeneric,
Schema: ast.NewCIStr(yyS[yypt-2].ident),
FnName: ast.NewCIStr(yyS[yypt-0].ident),
Args: []ast.ExprNode{},
}
}
case 1428:
{
parser.yyVAL.expr = &ast.FuncCallExpr{
Tp: ast.FuncCallExprTypeGeneric,
FnName: ast.NewCIStr(yyS[yypt-3].ident),
Args: yyS[yypt-1].item.([]ast.ExprNode),
}
}
case 1429:
{
parser.yyVAL.expr = &ast.FuncCallExpr{
Tp: ast.FuncCallExprTypeGeneric,
Schema: ast.NewCIStr(yyS[yypt-5].ident),
FnName: ast.NewCIStr(yyS[yypt-3].ident),
Args: yyS[yypt-1].item.([]ast.ExprNode),
}
}
case 1430:
{
x := yyS[yypt-2].item.(*ast.InsertStmt)
x.Priority = yyS[yypt-7].item.(mysql.PriorityEnum)
x.IgnoreErr = yyS[yypt-6].item.(bool)
// Wraps many layers here so that it can be processed the same way as select statement.
ts := &ast.TableSource{Source: yyS[yypt-4].item.(*ast.TableName)}
x.Table = &ast.TableRefsClause{TableRefs: &ast.Join{Left: ts}}
if yyS[yypt-1].item != nil {
x.OnDuplicate = yyS[yypt-1].item.([]*ast.Assignment)
}
if yyS[yypt-8].item != nil {
x.TableHints = yyS[yypt-8].item.([]*ast.TableOptimizerHint)
}
x.PartitionNames = yyS[yypt-3].item.([]ast.CIStr)
if yyS[yypt-0].item != nil {
x.Returning = yyS[yypt-0].item.([]*ast.SelectField)
}
parser.yyVAL.statement = x
}
case 1433:
{
parser.yyVAL.item = &ast.InsertStmt{
Columns: yyS[yypt-3].item.([]*ast.ColumnName),
Lists: yyS[yypt-0].item.([][]ast.ExprNode),
}
}
case 1434:
{
parser.yyVAL.item = &ast.InsertStmt{Columns: yyS[yypt-2].item.([]*ast.ColumnName), Select: yyS[yypt-0].statement.(ast.ResultSetNode)}
}
case 1435:
{
parser.yyVAL.item = &ast.InsertStmt{Columns: yyS[yypt-2].item.([]*ast.ColumnName), Select: yyS[yypt-0].statement.(ast.ResultSetNode)}
}
case 1436:
{
parser.yyVAL.item = &ast.InsertStmt{Columns: yyS[yypt-2].item.([]*ast.ColumnName), Select: yyS[yypt-0].statement.(ast.ResultSetNode)}
}
case 1437:
{
var sel ast.ResultSetNode
switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) {
case *ast.SelectStmt:
x.IsInBraces = true
sel = x
case *ast.SetOprStmt:
x.IsInBraces = true
sel = x
}
parser.yyVAL.item = &ast.InsertStmt{Columns: yyS[yypt-2].item.([]*ast.ColumnName), Select: sel}
}
case 1438:
{
parser.yyVAL.item = &ast.InsertStmt{Lists: yyS[yypt-0].item.([][]ast.ExprNode)}
}
case 1439:
{
parser.yyVAL.item = &ast.InsertStmt{Select: yyS[yypt-0].statement.(ast.ResultSetNode)}
}
case 1440:
{
parser.yyVAL.item = &ast.InsertStmt{Select: yyS[yypt-0].statement.(ast.ResultSetNode)}
}
case 1441:
{
parser.yyVAL.item = &ast.InsertStmt{Select: yyS[yypt-0].statement.(ast.ResultSetNode)}
}
case 1442:
{
var sel ast.ResultSetNode
switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) {
case *ast.SelectStmt:
x.IsInBraces = true
sel = x
case *ast.SetOprStmt:
x.IsInBraces = true
sel = x
}
parser.yyVAL.item = &ast.InsertStmt{Select: sel}
}
case 1443:
{
parser.yyVAL.item = yyS[yypt-0].item.(*ast.InsertStmt)
}
case 1446:
{
parser.yyVAL.item = [][]ast.ExprNode{yyS[yypt-0].item.([]ast.ExprNode)}
}
case 1447:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([][]ast.ExprNode), yyS[yypt-0].item.([]ast.ExprNode))
}
case 1448:
{
parser.yyVAL.item = yyS[yypt-1].item
}
case 1449:
{
parser.yyVAL.item = []ast.ExprNode{}
}
case 1451:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.ExprNode), yyS[yypt-0].expr)
}
case 1452:
{
parser.yyVAL.item = []ast.ExprNode{yyS[yypt-0].expr}
}
case 1454:
{
parser.yyVAL.expr = &ast.DefaultExpr{}
}
case 1455:
{
parser.yyVAL.item = &ast.InsertStmt{
Columns: []*ast.ColumnName{yyS[yypt-2].item.(*ast.ColumnName)},
Lists: [][]ast.ExprNode{{yyS[yypt-0].expr.(ast.ExprNode)}},
Setlist: true,
}
}
case 1456:
{
ins := yyS[yypt-4].item.(*ast.InsertStmt)
ins.Columns = append(ins.Columns, yyS[yypt-2].item.(*ast.ColumnName))
ins.Lists[0] = append(ins.Lists[0], yyS[yypt-0].expr.(ast.ExprNode))
parser.yyVAL.item = ins
}
case 1457:
{
parser.yyVAL.item = nil
}
case 1458:
{
parser.yyVAL.item = yyS[yypt-0].item
}
case 1459:
{
parser.yyVAL.item = nil
}
case 1460:
{
parser.yyVAL.item = yyS[yypt-0].item
}
case 1461:
{
x := yyS[yypt-0].item.(*ast.InsertStmt)
if yyS[yypt-5].item != nil {
x.TableHints = yyS[yypt-5].item.([]*ast.TableOptimizerHint)
}
x.IsReplace = true
x.Priority = yyS[yypt-4].item.(mysql.PriorityEnum)
ts := &ast.TableSource{Source: yyS[yypt-2].item.(*ast.TableName)}
x.Table = &ast.TableRefsClause{TableRefs: &ast.Join{Left: ts}}
x.PartitionNames = yyS[yypt-1].item.([]ast.CIStr)
parser.yyVAL.statement = x
}
case 1462:
{
parser.yyVAL.expr = ast.NewValueExpr(false, parser.charset, parser.collation)
}
case 1463:
{
parser.yyVAL.expr = ast.NewValueExpr(nil, parser.charset, parser.collation)
}
case 1464:
{
parser.yyVAL.expr = ast.NewValueExpr(true, parser.charset, parser.collation)
}
case 1465:
{
parser.yyVAL.expr = ast.NewValueExpr(yyS[yypt-0].item, parser.charset, parser.collation)
}
case 1466:
{
parser.yyVAL.expr = ast.NewValueExpr(yyS[yypt-0].item, parser.charset, parser.collation)
}
case 1467:
{
parser.yyVAL.expr = ast.NewValueExpr(yyS[yypt-0].item, parser.charset, parser.collation)
}
case 1469:
{
// See https://dev.mysql.com/doc/refman/5.7/en/charset-literal.html
co, err := charset.GetDefaultCollationLegacy(yyS[yypt-1].ident)
if err != nil {
yylex.AppendError(ast.ErrUnknownCharacterSet.GenWithStack("Unsupported character introducer: '%-.64s'", yyS[yypt-1].ident))
return 1
}
expr := ast.NewValueExpr(yyS[yypt-0].ident, yyS[yypt-1].ident, co)
tp := expr.GetType()
tp.SetCharset(yyS[yypt-1].ident)
tp.SetCollate(co)
tp.AddFlag(mysql.UnderScoreCharsetFlag)
if tp.GetCollate() == charset.CollationBin {
tp.AddFlag(mysql.BinaryFlag)
}
parser.yyVAL.expr = expr
}
case 1470:
{
parser.yyVAL.expr = ast.NewValueExpr(yyS[yypt-0].item, parser.charset, parser.collation)
}
case 1471:
{
parser.yyVAL.expr = ast.NewValueExpr(yyS[yypt-0].item, parser.charset, parser.collation)
}
case 1472:
{
co, err := charset.GetDefaultCollationLegacy(yyS[yypt-1].ident)
if err != nil {
yylex.AppendError(ast.ErrUnknownCharacterSet.GenWithStack("Unsupported character introducer: '%-.64s'", yyS[yypt-1].ident))
return 1
}
expr := ast.NewValueExpr(yyS[yypt-0].item, yyS[yypt-1].ident, co)
tp := expr.GetType()
tp.SetCharset(yyS[yypt-1].ident)
tp.SetCollate(co)
tp.AddFlag(mysql.UnderScoreCharsetFlag)
if tp.GetCollate() == charset.CollationBin {
tp.AddFlag(mysql.BinaryFlag)
}
parser.yyVAL.expr = expr
}
case 1473:
{
co, err := charset.GetDefaultCollationLegacy(yyS[yypt-1].ident)
if err != nil {
yylex.AppendError(ast.ErrUnknownCharacterSet.GenWithStack("Unsupported character introducer: '%-.64s'", yyS[yypt-1].ident))
return 1
}
expr := ast.NewValueExpr(yyS[yypt-0].item, yyS[yypt-1].ident, co)
tp := expr.GetType()
tp.SetCharset(yyS[yypt-1].ident)
tp.SetCollate(co)
tp.AddFlag(mysql.UnderScoreCharsetFlag)
if tp.GetCollate() == charset.CollationBin {
tp.AddFlag(mysql.BinaryFlag)
}
parser.yyVAL.expr = expr
}
case 1474:
{
expr := ast.NewValueExpr(yyS[yypt-0].ident, parser.charset, parser.collation)
parser.yyVAL.expr = expr
}
case 1475:
{
valExpr := yyS[yypt-1].expr.(ast.ValueExpr)
strLit := valExpr.GetString()
expr := ast.NewValueExpr(strLit+yyS[yypt-0].ident, parser.charset, parser.collation)
// Fix #4239, use first string literal as projection name.
if valExpr.GetProjectionOffset() >= 0 {
expr.SetProjectionOffset(valExpr.GetProjectionOffset())
} else {
expr.SetProjectionOffset(len(strLit))
}
parser.yyVAL.expr = expr
}
case 1476:
{
parser.yyVAL.item = []*ast.AlterOrderItem{yyS[yypt-0].item.(*ast.AlterOrderItem)}
}
case 1477:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.AlterOrderItem), yyS[yypt-0].item.(*ast.AlterOrderItem))
}
case 1478:
{
parser.yyVAL.item = &ast.AlterOrderItem{Column: yyS[yypt-1].item.(*ast.ColumnName), Desc: yyS[yypt-0].item.(bool)}
}
case 1479:
{
parser.yyVAL.item = &ast.OrderByClause{Items: yyS[yypt-0].item.([]*ast.ByItem)}
}
case 1480:
{
parser.yyVAL.item = []*ast.ByItem{yyS[yypt-0].item.(*ast.ByItem)}
}
case 1481:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.ByItem), yyS[yypt-0].item.(*ast.ByItem))
}
case 1482:
{
expr := yyS[yypt-0].expr
valueExpr, ok := expr.(ast.ValueExpr)
if ok {
position, isPosition := valueExpr.GetValue().(int64)
if isPosition {
expr = &ast.PositionExpr{N: int(position)}
}
}
parser.yyVAL.item = &ast.ByItem{Expr: expr, NullOrder: true}
}
case 1483:
{
expr := yyS[yypt-1].expr
valueExpr, ok := expr.(ast.ValueExpr)
if ok {
position, isPosition := valueExpr.GetValue().(int64)
if isPosition {
expr = &ast.PositionExpr{N: int(position)}
}
}
parser.yyVAL.item = &ast.ByItem{Expr: expr, Desc: yyS[yypt-0].item.(bool)}
}
case 1484:
{
parser.yyVAL.item = false
}
case 1485:
{
parser.yyVAL.item = true
}
case 1486:
{
parser.yyVAL.item = false // ASC by default
}
case 1487:
{
parser.yyVAL.item = false
}
case 1488:
{
parser.yyVAL.item = true
}
case 1489:
{
parser.yyVAL.item = nil
}
case 1491:
{
parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Or, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr}
}
case 1492:
{
parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.And, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr}
}
case 1493:
{
parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.LeftShift, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr}
}
case 1494:
{
parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.RightShift, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr}
}
case 1495:
{
parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Plus, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr}
}
case 1496:
{
parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Minus, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr}
}
case 1497:
{
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr("DATE_ADD"),
Args: []ast.ExprNode{
yyS[yypt-4].expr,
yyS[yypt-1].expr,
&ast.TimeUnitExpr{Unit: yyS[yypt-0].item.(ast.TimeUnitType)},
},
}
}
case 1498:
{
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr("DATE_SUB"),
Args: []ast.ExprNode{
yyS[yypt-4].expr,
yyS[yypt-1].expr,
&ast.TimeUnitExpr{Unit: yyS[yypt-0].item.(ast.TimeUnitType)},
},
}
}
case 1499:
{
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr("DATE_ADD"),
Args: []ast.ExprNode{
yyS[yypt-0].expr,
yyS[yypt-3].expr,
&ast.TimeUnitExpr{Unit: yyS[yypt-2].item.(ast.TimeUnitType)},
},
}
}
case 1500:
{
parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Mul, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr}
}
case 1501:
{
parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Div, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr}
}
case 1502:
{
parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Mod, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr}
}
case 1503:
{
parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.IntDiv, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr}
}
case 1504:
{
parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Mod, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr}
}
case 1505:
{
parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Xor, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr}
}
case 1507:
{
parser.yyVAL.expr = &ast.ColumnNameExpr{Name: &ast.ColumnName{
Name: ast.NewCIStr(yyS[yypt-0].ident),
}}
}
case 1508:
{
parser.yyVAL.expr = &ast.ColumnNameExpr{Name: &ast.ColumnName{
Table: ast.NewCIStr(yyS[yypt-2].ident),
Name: ast.NewCIStr(yyS[yypt-0].ident),
}}
}
case 1509:
{
parser.yyVAL.expr = &ast.ColumnNameExpr{Name: &ast.ColumnName{
Schema: ast.NewCIStr(yyS[yypt-4].ident),
Table: ast.NewCIStr(yyS[yypt-2].ident),
Name: ast.NewCIStr(yyS[yypt-0].ident),
}}
}
case 1514:
{
parser.yyVAL.expr = &ast.SetCollationExpr{Expr: yyS[yypt-2].expr, Collate: yyS[yypt-0].ident}
}
case 1517:
{
parser.yyVAL.expr = ast.NewParamMarkerExpr(yyS[yypt].offset)
}
case 1520:
{
parser.yyVAL.expr = &ast.UnaryOperationExpr{Op: opcode.Not2, V: yyS[yypt-0].expr}
}
case 1521:
{
parser.yyVAL.expr = &ast.UnaryOperationExpr{Op: opcode.BitNeg, V: yyS[yypt-0].expr}
}
case 1522:
{
parser.yyVAL.expr = &ast.UnaryOperationExpr{Op: opcode.Minus, V: yyS[yypt-0].expr}
}
case 1523:
{
parser.yyVAL.expr = &ast.UnaryOperationExpr{Op: opcode.Plus, V: yyS[yypt-0].expr}
}
case 1524:
{
parser.yyVAL.expr = &ast.FuncCallExpr{FnName: ast.NewCIStr(ast.Concat), Args: []ast.ExprNode{yyS[yypt-2].expr, yyS[yypt-0].expr}}
}
case 1525:
{
parser.yyVAL.expr = &ast.UnaryOperationExpr{Op: opcode.Not2, V: yyS[yypt-0].expr}
}
case 1527:
{
startOffset := parser.startOffset(&yyS[yypt-1])
endOffset := parser.endOffset(&yyS[yypt])
expr := yyS[yypt-1].expr
parser.setNodeText(expr, parser.src[startOffset:endOffset])
parser.yyVAL.expr = &ast.ParenthesesExpr{Expr: expr}
}
case 1528:
{
values := append(yyS[yypt-3].item.([]ast.ExprNode), yyS[yypt-1].expr)
parser.yyVAL.expr = &ast.RowExpr{Values: values}
}
case 1529:
{
values := append(yyS[yypt-3].item.([]ast.ExprNode), yyS[yypt-1].expr)
parser.yyVAL.expr = &ast.RowExpr{Values: values}
}
case 1530:
{
sq := yyS[yypt-0].expr.(*ast.SubqueryExpr)
sq.Exists = true
parser.yyVAL.expr = &ast.ExistsSubqueryExpr{Sel: sq}
}
case 1531:
{
/*
* ODBC escape syntax.
* See https://dev.mysql.com/doc/refman/5.7/en/expressions.html
*/
tp := yyS[yypt-1].expr.GetType()
switch yyS[yypt-2].ident {
case "d":
tp.SetCharset("")
tp.SetCollate("")
parser.yyVAL.expr = &ast.FuncCallExpr{FnName: ast.NewCIStr(ast.DateLiteral), Args: []ast.ExprNode{yyS[yypt-1].expr}}
case "t":
tp.SetCharset("")
tp.SetCollate("")
parser.yyVAL.expr = &ast.FuncCallExpr{FnName: ast.NewCIStr(ast.TimeLiteral), Args: []ast.ExprNode{yyS[yypt-1].expr}}
case "ts":
tp.SetCharset("")
tp.SetCollate("")
parser.yyVAL.expr = &ast.FuncCallExpr{FnName: ast.NewCIStr(ast.TimestampLiteral), Args: []ast.ExprNode{yyS[yypt-1].expr}}
default:
parser.yyVAL.expr = yyS[yypt-1].expr
}
}
case 1532:
{
// See https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#operator_binary
tp := types.NewFieldType(mysql.TypeString)
tp.SetCharset(charset.CharsetBin)
tp.SetCollate(charset.CharsetBin)
tp.AddFlag(mysql.BinaryFlag)
parser.yyVAL.expr = &ast.FuncCastExpr{
Expr: yyS[yypt-0].expr,
Tp: tp,
FunctionType: ast.CastBinaryOperator,
}
}
case 1533:
{
/* See https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_cast */
tp := yyS[yypt-2].item.(*types.FieldType)
defaultFlen, defaultDecimal := mysql.GetDefaultFieldLengthAndDecimalForCast(tp.GetType())
if tp.GetFlen() == types.UnspecifiedLength {
tp.SetFlen(defaultFlen)
}
if tp.GetDecimal() == types.UnspecifiedLength {
tp.SetDecimal(defaultDecimal)
}
isArray := yyS[yypt-1].item.(bool)
tp.SetArray(isArray)
explicitCharset := parser.explicitCharset
if isArray && !explicitCharset && tp.GetCharset() != charset.CharsetBin {
tp.SetCharset(charset.CharsetUTF8MB4)
tp.SetCollate(charset.CollationUTF8MB4)
}
parser.explicitCharset = false
parser.yyVAL.expr = &ast.FuncCastExpr{
Expr: yyS[yypt-4].expr,
Tp: tp,
FunctionType: ast.CastFunction,
ExplicitCharSet: explicitCharset,
}
}
case 1534:
{
/* Copied from CAST function, except that ARRAY is enforced to be true */
tp := yyS[yypt-2].item.(*types.FieldType)
defaultFlen, defaultDecimal := mysql.GetDefaultFieldLengthAndDecimalForCast(tp.GetType())
if tp.GetFlen() == types.UnspecifiedLength {
tp.SetFlen(defaultFlen)
}
if tp.GetDecimal() == types.UnspecifiedLength {
tp.SetDecimal(defaultDecimal)
}
tp.SetArray(true)
explicitCharset := parser.explicitCharset
if !explicitCharset && tp.GetCharset() != charset.CharsetBin {
tp.SetCharset(charset.CharsetUTF8MB4)
tp.SetCollate(charset.CollationUTF8MB4)
}
parser.explicitCharset = false
parser.yyVAL.expr = &ast.JSONSumCrc32Expr{
Expr: yyS[yypt-4].expr,
Tp: tp,
ExplicitCharSet: explicitCharset,
}
}
case 1535:
{
x := &ast.CaseExpr{WhenClauses: yyS[yypt-2].item.([]*ast.WhenClause)}
if yyS[yypt-3].expr != nil {
x.Value = yyS[yypt-3].expr
}
if yyS[yypt-1].item != nil {
x.ElseClause = yyS[yypt-1].item.(ast.ExprNode)
}
parser.yyVAL.expr = x
}
case 1536:
{
// See https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_convert
tp := yyS[yypt-1].item.(*types.FieldType)
defaultFlen, defaultDecimal := mysql.GetDefaultFieldLengthAndDecimalForCast(tp.GetType())
if tp.GetFlen() == types.UnspecifiedLength {
tp.SetFlen(defaultFlen)
}
if tp.GetDecimal() == types.UnspecifiedLength {
tp.SetDecimal(defaultDecimal)
}
explicitCharset := parser.explicitCharset
parser.explicitCharset = false
parser.yyVAL.expr = &ast.FuncCastExpr{
Expr: yyS[yypt-3].expr,
Tp: tp,
FunctionType: ast.CastConvertFunction,
ExplicitCharSet: explicitCharset,
}
}
case 1537:
{
// See https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_convert
charset1 := ast.NewValueExpr(yyS[yypt-1].ident, "", "")
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr(yyS[yypt-5].ident),
Args: []ast.ExprNode{yyS[yypt-3].expr, charset1},
}
}
case 1538:
{
parser.yyVAL.expr = &ast.DefaultExpr{Name: yyS[yypt-1].expr.(*ast.ColumnNameExpr).Name}
}
case 1539:
{
parser.yyVAL.expr = &ast.ValuesExpr{Column: yyS[yypt-1].expr.(*ast.ColumnNameExpr)}
}
case 1540:
{
expr := ast.NewValueExpr(yyS[yypt-0].ident, parser.charset, parser.collation)
parser.yyVAL.expr = &ast.FuncCallExpr{FnName: ast.NewCIStr(ast.JSONExtract), Args: []ast.ExprNode{yyS[yypt-2].expr, expr}}
}
case 1541:
{
expr := ast.NewValueExpr(yyS[yypt-0].ident, parser.charset, parser.collation)
extract := &ast.FuncCallExpr{FnName: ast.NewCIStr(ast.JSONExtract), Args: []ast.ExprNode{yyS[yypt-2].expr, expr}}
parser.yyVAL.expr = &ast.FuncCallExpr{FnName: ast.NewCIStr(ast.JSONUnquote), Args: []ast.ExprNode{extract}}
}
case 1542:
{
parser.yyVAL.item = false
}
case 1543:
{
parser.yyVAL.item = true
}
case 1546:
{
parser.yyVAL.item = false
}
case 1547:
{
parser.yyVAL.item = true
}
case 1548:
{
parser.yyVAL.item = false
}
case 1550:
{
parser.yyVAL.item = true
}
case 1553:
{
parser.yyVAL.item = true
}
case 1598:
{
parser.yyVAL.expr = &ast.FuncCallExpr{FnName: ast.NewCIStr(yyS[yypt-3].ident), Args: yyS[yypt-1].item.([]ast.ExprNode)}
}
case 1599:
{
parser.yyVAL.expr = &ast.FuncCallExpr{FnName: ast.NewCIStr(yyS[yypt-3].ident), Args: yyS[yypt-1].item.([]ast.ExprNode)}
}
case 1600:
{
parser.yyVAL.expr = &ast.FuncCallExpr{FnName: ast.NewCIStr(yyS[yypt-1].ident)}
}
case 1601:
{
parser.yyVAL.expr = &ast.FuncCallExpr{FnName: ast.NewCIStr(yyS[yypt-2].ident)}
}
case 1602:
{
args := []ast.ExprNode{}
if yyS[yypt-0].item != nil {
args = append(args, yyS[yypt-0].item.(ast.ExprNode))
}
parser.yyVAL.expr = &ast.FuncCallExpr{FnName: ast.NewCIStr(yyS[yypt-1].ident), Args: args}
}
case 1603:
{
nilVal := ast.NewValueExpr(nil, parser.charset, parser.collation)
args := yyS[yypt-1].item.([]ast.ExprNode)
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr(ast.CharFunc),
Args: append(args, nilVal),
}
}
case 1604:
{
charset1 := ast.NewValueExpr(yyS[yypt-1].ident, "", "")
args := yyS[yypt-3].item.([]ast.ExprNode)
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr(ast.CharFunc),
Args: append(args, charset1),
}
}
case 1605:
{
expr := ast.NewValueExpr(yyS[yypt-0].ident, "", "")
parser.yyVAL.expr = &ast.FuncCallExpr{FnName: ast.NewCIStr(ast.DateLiteral), Args: []ast.ExprNode{expr}}
}
case 1606:
{
expr := ast.NewValueExpr(yyS[yypt-0].ident, "", "")
parser.yyVAL.expr = &ast.FuncCallExpr{FnName: ast.NewCIStr(ast.TimeLiteral), Args: []ast.ExprNode{expr}}
}
case 1607:
{
expr := ast.NewValueExpr(yyS[yypt-0].ident, "", "")
parser.yyVAL.expr = &ast.FuncCallExpr{FnName: ast.NewCIStr(ast.TimestampLiteral), Args: []ast.ExprNode{expr}}
}
case 1608:
{
parser.yyVAL.expr = &ast.FuncCallExpr{FnName: ast.NewCIStr(ast.InsertFunc), Args: yyS[yypt-1].item.([]ast.ExprNode)}
}
case 1609:
{
parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Mod, L: yyS[yypt-3].expr, R: yyS[yypt-1].expr}
}
case 1610:
{
parser.yyVAL.expr = &ast.FuncCallExpr{FnName: ast.NewCIStr(ast.PasswordFunc), Args: yyS[yypt-1].item.([]ast.ExprNode)}
}
case 1611:
{
parser.yyVAL.expr = &ast.FuncCallExpr{FnName: ast.NewCIStr(yyS[yypt-3].ident), Args: yyS[yypt-1].item.([]ast.ExprNode)}
}
case 1612:
{
parser.yyVAL.expr = &ast.FuncCallExpr{FnName: ast.NewCIStr(yyS[yypt-3].ident), Args: yyS[yypt-1].item.([]ast.ExprNode)}
}
case 1613:
{
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr(yyS[yypt-5].ident),
Args: []ast.ExprNode{
yyS[yypt-3].expr,
yyS[yypt-1].expr,
&ast.TimeUnitExpr{Unit: ast.TimeUnitDay},
},
}
}
case 1614:
{
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr(yyS[yypt-7].ident),
Args: []ast.ExprNode{
yyS[yypt-5].expr,
yyS[yypt-2].expr,
&ast.TimeUnitExpr{Unit: yyS[yypt-1].item.(ast.TimeUnitType)},
},
}
}
case 1615:
{
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr(yyS[yypt-7].ident),
Args: []ast.ExprNode{
yyS[yypt-5].expr,
yyS[yypt-2].expr,
&ast.TimeUnitExpr{Unit: yyS[yypt-1].item.(ast.TimeUnitType)},
},
}
}
case 1616:
{
timeUnit := &ast.TimeUnitExpr{Unit: yyS[yypt-3].item.(ast.TimeUnitType)}
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr(yyS[yypt-5].ident),
Args: []ast.ExprNode{timeUnit, yyS[yypt-1].expr},
}
}
case 1617:
{
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr(yyS[yypt-5].ident),
Args: []ast.ExprNode{
&ast.GetFormatSelectorExpr{Selector: yyS[yypt-3].item.(ast.GetFormatSelectorType)},
yyS[yypt-1].expr,
},
}
}
case 1618:
{
parser.yyVAL.expr = &ast.FuncCallExpr{FnName: ast.NewCIStr(yyS[yypt-5].ident), Args: []ast.ExprNode{yyS[yypt-3].expr, yyS[yypt-1].expr}}
}
case 1619:
{
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr(yyS[yypt-5].ident),
Args: []ast.ExprNode{yyS[yypt-3].expr, yyS[yypt-1].expr},
}
}
case 1620:
{
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr(yyS[yypt-5].ident),
Args: []ast.ExprNode{yyS[yypt-3].expr, yyS[yypt-1].expr},
}
}
case 1621:
{
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr(yyS[yypt-7].ident),
Args: []ast.ExprNode{yyS[yypt-5].expr, yyS[yypt-3].expr, yyS[yypt-1].expr},
}
}
case 1622:
{
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr(yyS[yypt-7].ident),
Args: []ast.ExprNode{yyS[yypt-5].expr, yyS[yypt-3].expr, yyS[yypt-1].expr},
}
}
case 1623:
{
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr(yyS[yypt-7].ident),
Args: []ast.ExprNode{&ast.TimeUnitExpr{Unit: yyS[yypt-5].item.(ast.TimeUnitType)}, yyS[yypt-3].expr, yyS[yypt-1].expr},
}
}
case 1624:
{
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr(yyS[yypt-7].ident),
Args: []ast.ExprNode{&ast.TimeUnitExpr{Unit: yyS[yypt-5].item.(ast.TimeUnitType)}, yyS[yypt-3].expr, yyS[yypt-1].expr},
}
}
case 1625:
{
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr(yyS[yypt-3].ident),
Args: []ast.ExprNode{yyS[yypt-1].expr},
}
}
case 1626:
{
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr(yyS[yypt-5].ident),
Args: []ast.ExprNode{yyS[yypt-1].expr, yyS[yypt-3].expr},
}
}
case 1627:
{
spaceVal := ast.NewValueExpr(" ", parser.charset, parser.collation)
direction := &ast.TrimDirectionExpr{Direction: yyS[yypt-3].item.(ast.TrimDirectionType)}
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr(yyS[yypt-5].ident),
Args: []ast.ExprNode{yyS[yypt-1].expr, spaceVal, direction},
}
}
case 1628:
{
direction := &ast.TrimDirectionExpr{Direction: yyS[yypt-4].item.(ast.TrimDirectionType)}
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr(yyS[yypt-6].ident),
Args: []ast.ExprNode{yyS[yypt-1].expr, yyS[yypt-3].expr, direction},
}
}
case 1629:
{
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr(yyS[yypt-3].ident),
Args: []ast.ExprNode{yyS[yypt-1].expr},
}
}
case 1630:
{
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr(yyS[yypt-6].ident),
Args: []ast.ExprNode{yyS[yypt-4].expr, ast.NewValueExpr("CHAR", parser.charset, parser.collation), ast.NewValueExpr(yyS[yypt-1].item, parser.charset, parser.collation)},
}
}
case 1631:
{
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr(yyS[yypt-6].ident),
Args: []ast.ExprNode{yyS[yypt-4].expr, ast.NewValueExpr("BINARY", parser.charset, parser.collation), ast.NewValueExpr(yyS[yypt-1].item, parser.charset, parser.collation)},
}
}
case 1633:
{
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr(yyS[yypt-7].ident),
Args: []ast.ExprNode{yyS[yypt-5].expr, yyS[yypt-3].expr, yyS[yypt-1].expr},
}
}
case 1634:
{
parser.yyVAL.expr = &ast.FuncCallExpr{FnName: ast.NewCIStr(yyS[yypt-3].ident), Args: yyS[yypt-1].item.([]ast.ExprNode)}
}
case 1635:
{
parser.yyVAL.item = ast.GetFormatSelectorDate
}
case 1636:
{
parser.yyVAL.item = ast.GetFormatSelectorDatetime
}
case 1637:
{
parser.yyVAL.item = ast.GetFormatSelectorTime
}
case 1638:
{
parser.yyVAL.item = ast.GetFormatSelectorDatetime
}
case 1643:
{
parser.yyVAL.item = ast.TrimBoth
}
case 1644:
{
parser.yyVAL.item = ast.TrimLeading
}
case 1645:
{
parser.yyVAL.item = ast.TrimTrailing
}
case 1646:
{
objNameExpr := &ast.TableNameExpr{
Name: yyS[yypt-1].item.(*ast.TableName),
}
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr(ast.LastVal),
Args: []ast.ExprNode{objNameExpr},
}
}
case 1647:
{
objNameExpr := &ast.TableNameExpr{
Name: yyS[yypt-3].item.(*ast.TableName),
}
valueExpr := ast.NewValueExpr(yyS[yypt-1].item, parser.charset, parser.collation)
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr(ast.SetVal),
Args: []ast.ExprNode{objNameExpr, valueExpr},
}
}
case 1649:
{
if yyS[yypt-0].item != nil {
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool), Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))}
} else {
parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool)}
}
}
case 1650:
{
parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-3].ident, Args: yyS[yypt-1].item.([]ast.ExprNode), Distinct: false}
}
case 1651:
{
parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-3].ident, Args: yyS[yypt-1].item.([]ast.ExprNode)}
}
case 1652:
{
if yyS[yypt-0].item != nil {
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))}
} else {
parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}}
}
}
case 1653:
{
if yyS[yypt-0].item != nil {
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))}
} else {
parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}}
}
}
case 1654:
{
if yyS[yypt-0].item != nil {
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))}
} else {
parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}}
}
}
case 1655:
{
if yyS[yypt-0].item != nil {
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))}
} else {
parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}}
}
}
case 1656:
{
if yyS[yypt-0].item != nil {
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))}
} else {
parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}}
}
}
case 1657:
{
if yyS[yypt-0].item != nil {
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))}
} else {
parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}}
}
}
case 1658:
{
parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-4].ident, Args: yyS[yypt-1].item.([]ast.ExprNode), Distinct: true}
}
case 1659:
{
if yyS[yypt-0].item != nil {
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))}
} else {
parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}}
}
}
case 1660:
{
if yyS[yypt-0].item != nil {
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))}
} else {
parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}}
}
}
case 1661:
{
args := []ast.ExprNode{ast.NewValueExpr(1, parser.charset, parser.collation)}
if yyS[yypt-0].item != nil {
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-4].ident, Args: args, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))}
} else {
parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-4].ident, Args: args}
}
}
case 1662:
{
args := yyS[yypt-4].item.([]ast.ExprNode)
args = append(args, yyS[yypt-2].item.(ast.ExprNode))
if yyS[yypt-0].item != nil {
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-7].ident, Args: args, Distinct: yyS[yypt-5].item.(bool), Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))}
} else {
agg := &ast.AggregateFuncExpr{F: yyS[yypt-7].ident, Args: args, Distinct: yyS[yypt-5].item.(bool)}
if yyS[yypt-3].item != nil {
agg.Order = yyS[yypt-3].item.(*ast.OrderByClause)
}
parser.yyVAL.expr = agg
}
}
case 1663:
{
if yyS[yypt-0].item != nil {
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool), Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))}
} else {
parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool)}
}
}
case 1664:
{
if yyS[yypt-0].item != nil {
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool), Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))}
} else {
parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool)}
}
}
case 1665:
{
if yyS[yypt-0].item != nil {
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool), Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))}
} else {
parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool)}
}
}
case 1666:
{
if yyS[yypt-0].item != nil {
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: ast.AggFuncStddevPop, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool), Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))}
} else {
parser.yyVAL.expr = &ast.AggregateFuncExpr{F: ast.AggFuncStddevPop, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool)}
}
}
case 1667:
{
if yyS[yypt-0].item != nil {
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool), Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))}
} else {
parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool)}
}
}
case 1668:
{
if yyS[yypt-0].item != nil {
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: ast.AggFuncVarPop, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool), Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))}
} else {
parser.yyVAL.expr = &ast.AggregateFuncExpr{F: ast.AggFuncVarPop, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool)}
}
}
case 1669:
{
if yyS[yypt-0].item != nil {
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool), Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))}
} else {
parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool)}
}
}
case 1670:
{
if yyS[yypt-0].item != nil {
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))}
} else {
parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}}
}
}
case 1671:
{
if yyS[yypt-0].item != nil {
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))}
} else {
parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}}
}
}
case 1672:
{
if yyS[yypt-0].item != nil {
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-6].ident, Args: []ast.ExprNode{yyS[yypt-4].expr, yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))}
} else {
parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-6].ident, Args: []ast.ExprNode{yyS[yypt-4].expr, yyS[yypt-2].expr}}
}
}
case 1673:
{
if yyS[yypt-0].item != nil {
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-7].ident, Args: []ast.ExprNode{yyS[yypt-4].expr, yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))}
} else {
parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-7].ident, Args: []ast.ExprNode{yyS[yypt-4].expr, yyS[yypt-2].expr}}
}
}
case 1674:
{
if yyS[yypt-0].item != nil {
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-7].ident, Args: []ast.ExprNode{yyS[yypt-5].expr, yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))}
} else {
parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-7].ident, Args: []ast.ExprNode{yyS[yypt-5].expr, yyS[yypt-2].expr}}
}
}
case 1675:
{
if yyS[yypt-0].item != nil {
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-8].ident, Args: []ast.ExprNode{yyS[yypt-5].expr, yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))}
} else {
parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-8].ident, Args: []ast.ExprNode{yyS[yypt-5].expr, yyS[yypt-2].expr}}
}
}
case 1676:
{
parser.yyVAL.item = ast.NewValueExpr(",", parser.charset, parser.collation)
}
case 1677:
{
parser.yyVAL.item = ast.NewValueExpr(yyS[yypt-0].ident, parser.charset, parser.collation)
}
case 1678:
{
parser.yyVAL.expr = &ast.FuncCallExpr{
FnName: ast.NewCIStr(yyS[yypt-3].ident),
Args: yyS[yypt-1].item.([]ast.ExprNode),
}
}
case 1679:
{
var tp ast.FuncCallExprType
if isInTokenMap(yyS[yypt-3].ident) {
tp = ast.FuncCallExprTypeKeyword
} else {
tp = ast.FuncCallExprTypeGeneric
}
parser.yyVAL.expr = &ast.FuncCallExpr{
Tp: tp,
Schema: ast.NewCIStr(yyS[yypt-5].ident),
FnName: ast.NewCIStr(yyS[yypt-3].ident),
Args: yyS[yypt-1].item.([]ast.ExprNode),
}
}
case 1680:
{
parser.yyVAL.item = nil
}
case 1681:
{
parser.yyVAL.item = nil
}
case 1682:
{
expr := ast.NewValueExpr(yyS[yypt-1].item, parser.charset, parser.collation)
parser.yyVAL.item = expr
}
case 1684:
{
parser.yyVAL.item = ast.TimeUnitSecondMicrosecond
}
case 1685:
{
parser.yyVAL.item = ast.TimeUnitMinuteMicrosecond
}
case 1686:
{
parser.yyVAL.item = ast.TimeUnitMinuteSecond
}
case 1687:
{
parser.yyVAL.item = ast.TimeUnitHourMicrosecond
}
case 1688:
{
parser.yyVAL.item = ast.TimeUnitHourSecond
}
case 1689:
{
parser.yyVAL.item = ast.TimeUnitHourMinute
}
case 1690:
{
parser.yyVAL.item = ast.TimeUnitDayMicrosecond
}
case 1691:
{
parser.yyVAL.item = ast.TimeUnitDaySecond
}
case 1692:
{
parser.yyVAL.item = ast.TimeUnitDayMinute
}
case 1693:
{
parser.yyVAL.item = ast.TimeUnitDayHour
}
case 1694:
{
parser.yyVAL.item = ast.TimeUnitYearMonth
}
case 1695:
{
parser.yyVAL.item = ast.TimeUnitMicrosecond
}
case 1696:
{
parser.yyVAL.item = ast.TimeUnitSecond
}
case 1697:
{
parser.yyVAL.item = ast.TimeUnitMinute
}
case 1698:
{
parser.yyVAL.item = ast.TimeUnitHour
}
case 1699:
{
parser.yyVAL.item = ast.TimeUnitDay
}
case 1700:
{
parser.yyVAL.item = ast.TimeUnitWeek
}
case 1701:
{
parser.yyVAL.item = ast.TimeUnitMonth
}
case 1702:
{
parser.yyVAL.item = ast.TimeUnitQuarter
}
case 1703:
{
parser.yyVAL.item = ast.TimeUnitYear
}
case 1704:
{
parser.yyVAL.item = ast.TimeUnitSecond
}
case 1705:
{
parser.yyVAL.item = ast.TimeUnitMinute
}
case 1706:
{
parser.yyVAL.item = ast.TimeUnitHour
}
case 1707:
{
parser.yyVAL.item = ast.TimeUnitDay
}
case 1708:
{
parser.yyVAL.item = ast.TimeUnitWeek
}
case 1709:
{
parser.yyVAL.item = ast.TimeUnitMonth
}
case 1710:
{
parser.yyVAL.item = ast.TimeUnitQuarter
}
case 1711:
{
parser.yyVAL.item = ast.TimeUnitYear
}
case 1712:
{
parser.yyVAL.expr = nil
}
case 1714:
{
parser.yyVAL.item = []*ast.WhenClause{yyS[yypt-0].item.(*ast.WhenClause)}
}
case 1715:
{
parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.WhenClause), yyS[yypt-0].item.(*ast.WhenClause))
}
case 1716:
{
parser.yyVAL.item = &ast.WhenClause{
Expr: yyS[yypt-2].expr,
Result: yyS[yypt-0].expr,
}
}
case 1717:
{
parser.yyVAL.item = nil
}
case 1718:
{
parser.yyVAL.item = yyS[yypt-0].expr
}
case 1719:
{
tp := types.NewFieldType(mysql.TypeVarString)
tp.SetFlen(yyS[yypt-0].item.(int)) // TODO: Flen should be the flen of expression
if tp.GetFlen() != types.UnspecifiedLength {
tp.SetType(mysql.TypeString)
}
tp.SetCharset(charset.CharsetBin)
tp.SetCollate(charset.CollationBin)
tp.AddFlag(mysql.BinaryFlag)
parser.yyVAL.item = tp
}
case 1720:
{
tp := types.NewFieldType(mysql.TypeVarString)
tp.SetFlen(yyS[yypt-1].item.(int)) // TODO: Flen should be the flen of expression
tp.SetCharset(yyS[yypt-0].item.(*ast.OptBinary).Charset)
if yyS[yypt-0].item.(*ast.OptBinary).IsBinary {
tp.AddFlag(mysql.BinaryFlag)
tp.SetCharset(charset.CharsetBin)
tp.SetCollate(charset.CollationBin)
} else if tp.GetCharset() != "" {
co, err := charset.GetDefaultCollation(tp.GetCharset())
if err != nil {
yylex.AppendError(yylex.Errorf("Get collation error for charset: %s", tp.GetCharset()))
return 1
}
tp.SetCollate(co)
parser.explicitCharset = true
} else {
tp.SetCharset(parser.charset)
tp.SetCollate(parser.collation)
}
parser.yyVAL.item = tp
}
case 1721:
{
tp := types.NewFieldType(mysql.TypeDate)
tp.SetCharset(charset.CharsetBin)
tp.SetCollate(charset.CollationBin)
tp.AddFlag(mysql.BinaryFlag)
parser.yyVAL.item = tp
}
case 1722:
{
tp := types.NewFieldType(mysql.TypeYear)
tp.SetCharset(charset.CharsetBin)
tp.SetCollate(charset.CollationBin)
tp.AddFlag(mysql.BinaryFlag)
parser.yyVAL.item = tp
}
case 1723:
{
tp := types.NewFieldType(mysql.TypeDatetime)
flen, _ := mysql.GetDefaultFieldLengthAndDecimalForCast(mysql.TypeDatetime)
tp.SetFlen(flen)
tp.SetDecimal(yyS[yypt-0].item.(int))
if tp.GetDecimal() > 0 {
tp.SetFlen(tp.GetFlen() + 1 + tp.GetDecimal())
}
tp.SetCharset(charset.CharsetBin)
tp.SetCollate(charset.CollationBin)
tp.AddFlag(mysql.BinaryFlag)
parser.yyVAL.item = tp
}
case 1724:
{
fopt := yyS[yypt-0].item.(*ast.FloatOpt)
tp := types.NewFieldType(mysql.TypeNewDecimal)
tp.SetFlen(fopt.Flen)
tp.SetDecimal(fopt.Decimal)
tp.SetCharset(charset.CharsetBin)
tp.SetCollate(charset.CollationBin)
tp.AddFlag(mysql.BinaryFlag)
parser.yyVAL.item = tp
}
case 1725:
{
tp := types.NewFieldType(mysql.TypeDuration)
flen, _ := mysql.GetDefaultFieldLengthAndDecimalForCast(mysql.TypeDuration)
tp.SetFlen(flen)
tp.SetDecimal(yyS[yypt-0].item.(int))
if tp.GetDecimal() > 0 {
tp.SetFlen(tp.GetFlen() + 1 + tp.GetDecimal())
}
tp.SetCharset(charset.CharsetBin)
tp.SetCollate(charset.CollationBin)
tp.AddFlag(mysql.BinaryFlag)
parser.yyVAL.item = tp
}
case 1726:
{
tp := types.NewFieldType(mysql.TypeLonglong)
tp.SetCharset(charset.CharsetBin)
tp.SetCollate(charset.CollationBin)
tp.AddFlag(mysql.BinaryFlag)
parser.yyVAL.item = tp
}
case 1727:
{
tp := types.NewFieldType(mysql.TypeLonglong)
tp.AddFlag(mysql.UnsignedFlag | mysql.BinaryFlag)
tp.SetCharset(charset.CharsetBin)
tp.SetCollate(charset.CollationBin)
parser.yyVAL.item = tp
}
case 1728:
{
tp := types.NewFieldType(mysql.TypeJSON)
tp.AddFlag(mysql.BinaryFlag | mysql.ParseToJSONFlag)
tp.SetCharset(mysql.DefaultCharset)
tp.SetCollate(mysql.DefaultCollationName)
parser.yyVAL.item = tp
}
case 1729:
{
tp := types.NewFieldType(mysql.TypeDouble)
flen, decimal := mysql.GetDefaultFieldLengthAndDecimalForCast(mysql.TypeDouble)
tp.SetFlen(flen)
tp.SetDecimal(decimal)
tp.AddFlag(mysql.BinaryFlag)
tp.SetCharset(charset.CharsetBin)
tp.SetCollate(charset.CollationBin)
parser.yyVAL.item = tp
}
case 1730:
{
tp := types.NewFieldType(mysql.TypeFloat)
fopt := yyS[yypt-0].item.(*ast.FloatOpt)
if fopt.Flen >= 54 {
yylex.AppendError(ErrTooBigPrecision.GenWithStackByArgs(fopt.Flen, "CAST", 53))
} else if fopt.Flen >= 25 {
tp = types.NewFieldType(mysql.TypeDouble)
}
flen, decimal := mysql.GetDefaultFieldLengthAndDecimalForCast(tp.GetType())
tp.SetFlen(flen)
tp.SetDecimal(decimal)
tp.AddFlag(mysql.BinaryFlag)
tp.SetCharset(charset.CharsetBin)
tp.SetCollate(charset.CollationBin)
parser.yyVAL.item = tp
}
case 1731:
{
var tp *types.FieldType
if parser.lexer.GetSQLMode().HasRealAsFloatMode() {
tp = types.NewFieldType(mysql.TypeFloat)
} else {
tp = types.NewFieldType(mysql.TypeDouble)
}
flen, decimal := mysql.GetDefaultFieldLengthAndDecimalForCast(tp.GetType())
tp.SetFlen(flen)
tp.SetDecimal(decimal)
tp.AddFlag(mysql.BinaryFlag)
tp.SetCharset(charset.CharsetBin)
tp.SetCollate(charset.CollationBin)
parser.yyVAL.item = tp
}
case 1732:
{
elementType := yyS[yypt-1].item.(*ast.VectorElementType)
if elementType.Tp != mysql.TypeFloat {
yylex.AppendError(yylex.Errorf("Only VECTOR is supported for now"))
}
tp := types.NewFieldType(mysql.TypeTiDBVectorFloat32)
tp.SetFlen(yyS[yypt-0].item.(int))
tp.SetDecimal(0)
tp.SetCharset(charset.CharsetBin)
tp.SetCollate(charset.CollationBin)
parser.yyVAL.item = tp
}
case 1733:
{
parser.yyVAL.item = mysql.LowPriority
}
case 1734:
{
parser.yyVAL.item = mysql.HighPriority
}
case 1735:
{
parser.yyVAL.item = mysql.DelayedPriority
}
case 1736:
{
parser.yyVAL.item = mysql.NoPriority
}
case 1738:
{
parser.yyVAL.item = &ast.TableName{Name: ast.NewCIStr(yyS[yypt-0].ident)}
}
case 1739:
{
schema := yyS[yypt-2].ident
if isInCorrectIdentifierName(schema) {
yylex.AppendError(ErrWrongDBName.GenWithStackByArgs(schema))
return 1
}
parser.yyVAL.item = &ast.TableName{Schema: ast.NewCIStr(schema), Name: ast.NewCIStr(yyS[yypt-0].ident)}
}
case 1740:
{
parser.yyVAL.item = &ast.TableName{Schema: ast.NewCIStr("*"), Name: ast.NewCIStr(yyS[yypt-0].ident)}
}
case 1741:
{
tbl := []*ast.TableName{yyS[yypt-0].item.(*ast.TableName)}
parser.yyVAL.item = tbl
}
case 1742:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.TableName), yyS[yypt-0].item.(*ast.TableName))
}
case 1743:
{
parser.yyVAL.item = &ast.TableName{Name: ast.NewCIStr(yyS[yypt-1].ident)}
}
case 1744:
{
parser.yyVAL.item = &ast.TableName{Schema: ast.NewCIStr(yyS[yypt-3].ident), Name: ast.NewCIStr(yyS[yypt-1].ident)}
}
case 1745:
{
tbl := []*ast.TableName{yyS[yypt-0].item.(*ast.TableName)}
parser.yyVAL.item = tbl
}
case 1746:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.TableName), yyS[yypt-0].item.(*ast.TableName))
}
case 1749:
{
parser.yyVAL.item = false
}
case 1750:
{
parser.yyVAL.item = true
}
case 1751:
{
var sqlText string
var sqlVar *ast.VariableExpr
switch x := yyS[yypt-0].item.(type) {
case string:
sqlText = x
case *ast.VariableExpr:
sqlVar = x
}
parser.yyVAL.statement = &ast.PrepareStmt{
Name: yyS[yypt-2].ident,
SQLText: sqlText,
SQLVar: sqlVar,
}
}
case 1752:
{
parser.yyVAL.item = yyS[yypt-0].ident
}
case 1753:
{
parser.yyVAL.item = yyS[yypt-0].expr
}
case 1754:
{
parser.yyVAL.statement = &ast.ExecuteStmt{Name: yyS[yypt-0].ident}
}
case 1755:
{
parser.yyVAL.statement = &ast.ExecuteStmt{
Name: yyS[yypt-2].ident,
UsingVars: yyS[yypt-0].item.([]ast.ExprNode),
}
}
case 1756:
{
parser.yyVAL.item = []ast.ExprNode{yyS[yypt-0].expr}
}
case 1757:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.ExprNode), yyS[yypt-0].expr)
}
case 1758:
{
parser.yyVAL.statement = &ast.DeallocateStmt{Name: yyS[yypt-0].ident}
}
case 1761:
{
parser.yyVAL.statement = &ast.RollbackStmt{}
}
case 1762:
{
parser.yyVAL.statement = &ast.RollbackStmt{CompletionType: yyS[yypt-0].item.(ast.CompletionType)}
}
case 1763:
{
parser.yyVAL.statement = &ast.RollbackStmt{SavepointName: yyS[yypt-0].ident}
}
case 1764:
{
parser.yyVAL.statement = &ast.RollbackStmt{SavepointName: yyS[yypt-0].ident}
}
case 1765:
{
parser.yyVAL.item = ast.CompletionTypeChain
}
case 1766:
{
parser.yyVAL.item = ast.CompletionTypeRelease
}
case 1767:
{
parser.yyVAL.item = ast.CompletionTypeDefault
}
case 1768:
{
parser.yyVAL.item = ast.CompletionTypeChain
}
case 1769:
{
parser.yyVAL.item = ast.CompletionTypeDefault
}
case 1770:
{
parser.yyVAL.item = ast.CompletionTypeRelease
}
case 1771:
{
parser.yyVAL.item = ast.CompletionTypeDefault
}
case 1772:
{
parser.yyVAL.statement = &ast.ShutdownStmt{}
}
case 1773:
{
parser.yyVAL.statement = &ast.RestartStmt{}
}
case 1774:
{
parser.yyVAL.statement = &ast.HelpStmt{Topic: yyS[yypt-0].ident}
}
case 1775:
{
st := &ast.SelectStmt{
SelectStmtOpts: yyS[yypt-2].item.(*ast.SelectStmtOpts),
Distinct: yyS[yypt-2].item.(*ast.SelectStmtOpts).Distinct,
Fields: yyS[yypt-1].item.(*ast.FieldList),
Kind: ast.SelectStmtKindSelect,
}
if st.SelectStmtOpts.TableHints != nil {
st.TableHints = st.SelectStmtOpts.TableHints
}
if yyS[yypt-0].item != nil {
st.Having = yyS[yypt-0].item.(*ast.HavingClause)
}
parser.yyVAL.item = st
}
case 1776:
{
st := yyS[yypt-2].item.(*ast.SelectStmt)
lastField := st.Fields.Fields[len(st.Fields.Fields)-1]
if lastField.Expr != nil && lastField.AsName.O == "" {
lastEnd := yyS[yypt-1].offset - 1
parser.setNodeText(lastField, parser.src[lastField.Offset:lastEnd])
}
if yyS[yypt-0].item != nil {
st.Where = yyS[yypt-0].item.(ast.ExprNode)
}
}
case 1777:
{
st := yyS[yypt-6].item.(*ast.SelectStmt)
st.From = yyS[yypt-4].item.(*ast.TableRefsClause)
lastField := st.Fields.Fields[len(st.Fields.Fields)-1]
if lastField.Expr != nil && lastField.AsName.O == "" {
lastEnd := parser.endOffset(&yyS[yypt-5])
parser.setNodeText(lastField, parser.src[lastField.Offset:lastEnd])
}
if yyS[yypt-3].item != nil {
st.Where = yyS[yypt-3].item.(ast.ExprNode)
}
if yyS[yypt-2].item != nil {
st.GroupBy = yyS[yypt-2].item.(*ast.GroupByClause)
}
if yyS[yypt-1].item != nil {
st.Having = yyS[yypt-1].item.(*ast.HavingClause)
}
if yyS[yypt-0].item != nil {
st.WindowSpecs = (yyS[yypt-0].item.([]ast.WindowSpec))
}
parser.yyVAL.item = st
}
case 1778:
{
parser.yyVAL.item = nil
}
case 1779:
{
var repSeed ast.ExprNode
if yyS[yypt-0].expr != nil {
repSeed = ast.NewValueExpr(yyS[yypt-0].expr, parser.charset, parser.collation)
}
parser.yyVAL.item = &ast.TableSample{
SampleMethod: yyS[yypt-5].item.(ast.SampleMethodType),
Expr: ast.NewValueExpr(yyS[yypt-3].expr, parser.charset, parser.collation),
SampleClauseUnit: yyS[yypt-2].item.(ast.SampleClauseUnitType),
RepeatableSeed: repSeed,
}
}
case 1780:
{
var repSeed ast.ExprNode
if yyS[yypt-0].expr != nil {
repSeed = ast.NewValueExpr(yyS[yypt-0].expr, parser.charset, parser.collation)
}
parser.yyVAL.item = &ast.TableSample{
SampleMethod: yyS[yypt-3].item.(ast.SampleMethodType),
RepeatableSeed: repSeed,
}
}
case 1781:
{
parser.yyVAL.item = ast.SampleMethodTypeNone
}
case 1782:
{
parser.yyVAL.item = ast.SampleMethodTypeSystem
}
case 1783:
{
parser.yyVAL.item = ast.SampleMethodTypeBernoulli
}
case 1784:
{
parser.yyVAL.item = ast.SampleMethodTypeTiDBRegion
}
case 1785:
{
parser.yyVAL.item = ast.SampleClauseUnitTypeDefault
}
case 1786:
{
parser.yyVAL.item = ast.SampleClauseUnitTypeRow
}
case 1787:
{
parser.yyVAL.item = ast.SampleClauseUnitTypePercent
}
case 1788:
{
parser.yyVAL.expr = nil
}
case 1789:
{
parser.yyVAL.expr = yyS[yypt-1].expr
}
case 1790:
{
st := yyS[yypt-6].item.(*ast.SelectStmt)
if yyS[yypt-1].item != nil {
st.LockInfo = yyS[yypt-1].item.(*ast.SelectLockInfo)
}
if yyS[yypt-5].item != nil {
st.Where = yyS[yypt-5].item.(ast.ExprNode)
}
if yyS[yypt-4].item != nil {
st.GroupBy = yyS[yypt-4].item.(*ast.GroupByClause)
}
if yyS[yypt-3].item != nil {
st.OrderBy = yyS[yypt-3].item.(*ast.OrderByClause)
}
if yyS[yypt-2].item != nil {
st.Limit = yyS[yypt-2].item.(*ast.Limit)
}
if yyS[yypt-0].item != nil {
st.SelectIntoOpt = yyS[yypt-0].item.(*ast.SelectIntoOption)
}
parser.yyVAL.statement = st
}
case 1791:
{
st := yyS[yypt-5].item.(*ast.SelectStmt)
if yyS[yypt-4].item != nil {
st.GroupBy = yyS[yypt-4].item.(*ast.GroupByClause)
}
if yyS[yypt-3].item != nil {
st.OrderBy = yyS[yypt-3].item.(*ast.OrderByClause)
}
if yyS[yypt-2].item != nil {
st.Limit = yyS[yypt-2].item.(*ast.Limit)
}
if yyS[yypt-1].item != nil {
st.LockInfo = yyS[yypt-1].item.(*ast.SelectLockInfo)
}
if yyS[yypt-0].item != nil {
st.SelectIntoOpt = yyS[yypt-0].item.(*ast.SelectIntoOption)
}
parser.yyVAL.statement = st
}
case 1792:
{
st := yyS[yypt-4].item.(*ast.SelectStmt)
if yyS[yypt-1].item != nil {
st.LockInfo = yyS[yypt-1].item.(*ast.SelectLockInfo)
}
if yyS[yypt-3].item != nil {
st.OrderBy = yyS[yypt-3].item.(*ast.OrderByClause)
}
if yyS[yypt-2].item != nil {
st.Limit = yyS[yypt-2].item.(*ast.Limit)
}
if yyS[yypt-0].item != nil {
st.SelectIntoOpt = yyS[yypt-0].item.(*ast.SelectIntoOption)
}
parser.yyVAL.statement = st
}
case 1793:
{
st := &ast.SelectStmt{
Kind: ast.SelectStmtKindTable,
Fields: &ast.FieldList{Fields: []*ast.SelectField{{WildCard: &ast.WildCardField{}}}},
}
ts := &ast.TableSource{Source: yyS[yypt-4].item.(*ast.TableName)}
st.From = &ast.TableRefsClause{TableRefs: &ast.Join{Left: ts}}
if yyS[yypt-3].item != nil {
st.OrderBy = yyS[yypt-3].item.(*ast.OrderByClause)
}
if yyS[yypt-2].item != nil {
st.Limit = yyS[yypt-2].item.(*ast.Limit)
}
if yyS[yypt-1].item != nil {
st.LockInfo = yyS[yypt-1].item.(*ast.SelectLockInfo)
}
if yyS[yypt-0].item != nil {
st.SelectIntoOpt = yyS[yypt-0].item.(*ast.SelectIntoOption)
}
parser.yyVAL.statement = st
}
case 1794:
{
st := &ast.SelectStmt{
Kind: ast.SelectStmtKindValues,
Fields: &ast.FieldList{Fields: []*ast.SelectField{{WildCard: &ast.WildCardField{}}}},
Lists: yyS[yypt-4].item.([]*ast.RowExpr),
}
if yyS[yypt-3].item != nil {
st.OrderBy = yyS[yypt-3].item.(*ast.OrderByClause)
}
if yyS[yypt-2].item != nil {
st.Limit = yyS[yypt-2].item.(*ast.Limit)
}
if yyS[yypt-1].item != nil {
st.LockInfo = yyS[yypt-1].item.(*ast.SelectLockInfo)
}
if yyS[yypt-0].item != nil {
st.SelectIntoOpt = yyS[yypt-0].item.(*ast.SelectIntoOption)
}
parser.yyVAL.statement = st
}
case 1795:
{
sel := yyS[yypt-0].statement.(*ast.SelectStmt)
sel.With = yyS[yypt-1].item.(*ast.WithClause)
parser.yyVAL.statement = sel
}
case 1796:
{
var sel ast.StmtNode
switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) {
case *ast.SelectStmt:
x.IsInBraces = true
x.WithBeforeBraces = true
x.With = yyS[yypt-1].item.(*ast.WithClause)
sel = x
case *ast.SetOprStmt:
x.IsInBraces = true
x.With = yyS[yypt-1].item.(*ast.WithClause)
sel = x
}
parser.yyVAL.statement = sel
}
case 1797:
{
parser.yyVAL.item = yyS[yypt-0].item
}
case 1798:
{
ws := yyS[yypt-0].item.(*ast.WithClause)
ws.IsRecursive = true
for _, cte := range ws.CTEs {
cte.IsRecursive = true
}
parser.yyVAL.item = ws
}
case 1799:
{
ws := yyS[yypt-2].item.(*ast.WithClause)
ws.CTEs = append(ws.CTEs, yyS[yypt-0].item.(*ast.CommonTableExpression))
parser.yyVAL.item = ws
}
case 1800:
{
ws := &ast.WithClause{}
ws.CTEs = make([]*ast.CommonTableExpression, 0, 4)
ws.CTEs = append(ws.CTEs, yyS[yypt-0].item.(*ast.CommonTableExpression))
parser.yyVAL.item = ws
}
case 1801:
{
cte := &ast.CommonTableExpression{}
cte.Name = ast.NewCIStr(yyS[yypt-3].ident)
cte.ColNameList = yyS[yypt-2].item.([]ast.CIStr)
cte.Query = yyS[yypt-0].expr.(*ast.SubqueryExpr)
parser.yyVAL.item = cte
}
case 1803:
{
parser.yyVAL.item = nil
}
case 1804:
{
parser.yyVAL.item = yyS[yypt-0].item.([]ast.WindowSpec)
}
case 1805:
{
parser.yyVAL.item = []ast.WindowSpec{yyS[yypt-0].item.(ast.WindowSpec)}
}
case 1806:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.WindowSpec), yyS[yypt-0].item.(ast.WindowSpec))
}
case 1807:
{
var spec = yyS[yypt-0].item.(ast.WindowSpec)
spec.Name = yyS[yypt-2].item.(ast.CIStr)
parser.yyVAL.item = spec
}
case 1808:
{
parser.yyVAL.item = ast.NewCIStr(yyS[yypt-0].ident)
}
case 1809:
{
parser.yyVAL.item = yyS[yypt-1].item.(ast.WindowSpec)
}
case 1810:
{
spec := ast.WindowSpec{Ref: yyS[yypt-3].item.(ast.CIStr)}
if yyS[yypt-2].item != nil {
spec.PartitionBy = yyS[yypt-2].item.(*ast.PartitionByClause)
}
if yyS[yypt-1].item != nil {
spec.OrderBy = yyS[yypt-1].item.(*ast.OrderByClause)
}
if yyS[yypt-0].item != nil {
spec.Frame = yyS[yypt-0].item.(*ast.FrameClause)
}
parser.yyVAL.item = spec
}
case 1811:
{
parser.yyVAL.item = ast.CIStr{}
}
case 1813:
{
parser.yyVAL.item = nil
}
case 1814:
{
parser.yyVAL.item = &ast.PartitionByClause{Items: yyS[yypt-0].item.([]*ast.ByItem)}
}
case 1815:
{
parser.yyVAL.item = nil
}
case 1816:
{
parser.yyVAL.item = &ast.OrderByClause{Items: yyS[yypt-0].item.([]*ast.ByItem)}
}
case 1817:
{
parser.yyVAL.item = nil
}
case 1818:
{
parser.yyVAL.item = &ast.FrameClause{
Type: yyS[yypt-1].item.(ast.FrameType),
Extent: yyS[yypt-0].item.(ast.FrameExtent),
}
}
case 1819:
{
parser.yyVAL.item = ast.FrameType(ast.Rows)
}
case 1820:
{
parser.yyVAL.item = ast.FrameType(ast.Ranges)
}
case 1821:
{
parser.yyVAL.item = ast.FrameType(ast.Groups)
}
case 1822:
{
parser.yyVAL.item = ast.FrameExtent{
Start: yyS[yypt-0].item.(ast.FrameBound),
End: ast.FrameBound{Type: ast.CurrentRow},
}
}
case 1824:
{
parser.yyVAL.item = ast.FrameBound{Type: ast.Preceding, UnBounded: true}
}
case 1825:
{
parser.yyVAL.item = ast.FrameBound{Type: ast.Preceding, Expr: ast.NewValueExpr(yyS[yypt-1].item, parser.charset, parser.collation)}
}
case 1826:
{
parser.yyVAL.item = ast.FrameBound{Type: ast.Preceding, Expr: ast.NewParamMarkerExpr(yyS[yypt].offset)}
}
case 1827:
{
parser.yyVAL.item = ast.FrameBound{Type: ast.Preceding, Expr: yyS[yypt-2].expr, Unit: yyS[yypt-1].item.(ast.TimeUnitType)}
}
case 1828:
{
parser.yyVAL.item = ast.FrameBound{Type: ast.CurrentRow}
}
case 1829:
{
parser.yyVAL.item = ast.FrameExtent{Start: yyS[yypt-2].item.(ast.FrameBound), End: yyS[yypt-0].item.(ast.FrameBound)}
}
case 1831:
{
parser.yyVAL.item = ast.FrameBound{Type: ast.Following, UnBounded: true}
}
case 1832:
{
parser.yyVAL.item = ast.FrameBound{Type: ast.Following, Expr: ast.NewValueExpr(yyS[yypt-1].item, parser.charset, parser.collation)}
}
case 1833:
{
parser.yyVAL.item = ast.FrameBound{Type: ast.Following, Expr: ast.NewParamMarkerExpr(yyS[yypt].offset)}
}
case 1834:
{
parser.yyVAL.item = ast.FrameBound{Type: ast.Following, Expr: yyS[yypt-2].expr, Unit: yyS[yypt-1].item.(ast.TimeUnitType)}
}
case 1835:
{
parser.yyVAL.item = nil
}
case 1836:
{
spec := yyS[yypt-0].item.(ast.WindowSpec)
parser.yyVAL.item = &spec
}
case 1837:
{
parser.yyVAL.item = yyS[yypt-0].item.(ast.WindowSpec)
}
case 1838:
{
parser.yyVAL.item = ast.WindowSpec{Name: yyS[yypt-0].item.(ast.CIStr), OnlyAlias: true}
}
case 1840:
{
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-3].ident, Spec: yyS[yypt-0].item.(ast.WindowSpec)}
}
case 1841:
{
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-3].ident, Spec: yyS[yypt-0].item.(ast.WindowSpec)}
}
case 1842:
{
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-3].ident, Spec: yyS[yypt-0].item.(ast.WindowSpec)}
}
case 1843:
{
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-3].ident, Spec: yyS[yypt-0].item.(ast.WindowSpec)}
}
case 1844:
{
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-3].ident, Spec: yyS[yypt-0].item.(ast.WindowSpec)}
}
case 1845:
{
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: yyS[yypt-0].item.(ast.WindowSpec)}
}
case 1846:
{
args := []ast.ExprNode{yyS[yypt-4].expr}
if yyS[yypt-3].item != nil {
args = append(args, yyS[yypt-3].item.([]ast.ExprNode)...)
}
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-6].ident, Args: args, IgnoreNull: yyS[yypt-1].item.(bool), Spec: yyS[yypt-0].item.(ast.WindowSpec)}
}
case 1847:
{
args := []ast.ExprNode{yyS[yypt-4].expr}
if yyS[yypt-3].item != nil {
args = append(args, yyS[yypt-3].item.([]ast.ExprNode)...)
}
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-6].ident, Args: args, IgnoreNull: yyS[yypt-1].item.(bool), Spec: yyS[yypt-0].item.(ast.WindowSpec)}
}
case 1848:
{
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-3].expr}, IgnoreNull: yyS[yypt-1].item.(bool), Spec: yyS[yypt-0].item.(ast.WindowSpec)}
}
case 1849:
{
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-3].expr}, IgnoreNull: yyS[yypt-1].item.(bool), Spec: yyS[yypt-0].item.(ast.WindowSpec)}
}
case 1850:
{
parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-8].ident, Args: []ast.ExprNode{yyS[yypt-6].expr, yyS[yypt-4].expr}, FromLast: yyS[yypt-2].item.(bool), IgnoreNull: yyS[yypt-1].item.(bool), Spec: yyS[yypt-0].item.(ast.WindowSpec)}
}
case 1851:
{
parser.yyVAL.item = nil
}
case 1852:
{
args := []ast.ExprNode{ast.NewValueExpr(yyS[yypt-1].item, parser.charset, parser.collation)}
if yyS[yypt-0].item != nil {
args = append(args, yyS[yypt-0].item.(ast.ExprNode))
}
parser.yyVAL.item = args
}
case 1853:
{
args := []ast.ExprNode{ast.NewParamMarkerExpr(yyS[yypt-1].offset)}
if yyS[yypt-0].item != nil {
args = append(args, yyS[yypt-0].item.(ast.ExprNode))
}
parser.yyVAL.item = args
}
case 1854:
{
parser.yyVAL.item = nil
}
case 1855:
{
parser.yyVAL.item = yyS[yypt-0].expr
}
case 1856:
{
parser.yyVAL.item = false
}
case 1857:
{
parser.yyVAL.item = false
}
case 1858:
{
parser.yyVAL.item = true
}
case 1859:
{
parser.yyVAL.item = false
}
case 1860:
{
parser.yyVAL.item = false
}
case 1861:
{
parser.yyVAL.item = true
}
case 1862:
{
parser.yyVAL.item = &ast.TableRefsClause{TableRefs: yyS[yypt-0].item.(*ast.Join)}
}
case 1863:
{
if j, ok := yyS[yypt-0].item.(*ast.Join); ok {
// if $1 is Join, use it directly
parser.yyVAL.item = j
} else {
parser.yyVAL.item = &ast.Join{Left: yyS[yypt-0].item.(ast.ResultSetNode), Right: nil}
}
}
case 1864:
{
/* from a, b is default cross join */
parser.yyVAL.item = &ast.Join{Left: yyS[yypt-2].item.(ast.ResultSetNode), Right: yyS[yypt-0].item.(ast.ResultSetNode), Tp: ast.CrossJoin}
}
case 1866:
{
/*
* ODBC escape syntax for outer join is { OJ join_table }
* Use an Identifier for OJ
*/
parser.yyVAL.item = yyS[yypt-1].item
}
case 1869:
{
tn := yyS[yypt-5].item.(*ast.TableName)
tn.PartitionNames = yyS[yypt-4].item.([]ast.CIStr)
tn.IndexHints = yyS[yypt-1].item.([]*ast.IndexHint)
if yyS[yypt-0].item != nil {
tn.TableSample = yyS[yypt-0].item.(*ast.TableSample)
}
if yyS[yypt-2].item != nil {
tn.AsOf = yyS[yypt-2].item.(*ast.AsOfClause)
}
parser.yyVAL.item = &ast.TableSource{Source: tn, AsName: yyS[yypt-3].item.(ast.CIStr)}
}
case 1870:
{
resultNode := yyS[yypt-1].expr.(*ast.SubqueryExpr).Query
parser.yyVAL.item = &ast.TableSource{Source: resultNode, AsName: yyS[yypt-0].item.(ast.CIStr)}
}
case 1871:
{
resultNode := yyS[yypt-2].expr.(*ast.SubqueryExpr).Query
ts := &ast.TableSource{Source: resultNode, AsName: yyS[yypt-1].item.(ast.CIStr)}
ts.Lateral = true
ts.ColumnNames = yyS[yypt-0].item.([]ast.CIStr)
parser.yyVAL.item = ts
}
case 1872:
{
j := yyS[yypt-1].item.(*ast.Join)
j.ExplicitParens = true
parser.yyVAL.item = yyS[yypt-1].item
}
case 1873:
{
parser.yyVAL.item = []ast.CIStr{}
}
case 1874:
{
parser.yyVAL.item = yyS[yypt-1].item
}
case 1875:
{
parser.yyVAL.item = ast.CIStr{}
}
case 1877:
{
parser.yyVAL.item = ast.CIStr{}
}
case 1879:
{
parser.yyVAL.item = ast.NewCIStr(yyS[yypt-0].ident)
}
case 1880:
{
parser.yyVAL.item = ast.NewCIStr(yyS[yypt-0].ident)
}
case 1881:
{
parser.yyVAL.item = ast.HintUse
}
case 1882:
{
parser.yyVAL.item = ast.HintIgnore
}
case 1883:
{
parser.yyVAL.item = ast.HintForce
}
case 1884:
{
parser.yyVAL.item = ast.HintForScan
}
case 1885:
{
parser.yyVAL.item = ast.HintForJoin
}
case 1886:
{
parser.yyVAL.item = ast.HintForOrderBy
}
case 1887:
{
parser.yyVAL.item = ast.HintForGroupBy
}
case 1888:
{
parser.yyVAL.item = &ast.IndexHint{
IndexNames: yyS[yypt-1].item.([]ast.CIStr),
HintType: yyS[yypt-4].item.(ast.IndexHintType),
HintScope: yyS[yypt-3].item.(ast.IndexHintScope),
}
}
case 1889:
{
var nameList []ast.CIStr
parser.yyVAL.item = nameList
}
case 1890:
{
parser.yyVAL.item = []ast.CIStr{ast.NewCIStr(yyS[yypt-0].ident)}
}
case 1891:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.CIStr), ast.NewCIStr(yyS[yypt-0].ident))
}
case 1892:
{
parser.yyVAL.item = []ast.CIStr{ast.NewCIStr(yyS[yypt-0].ident)}
}
case 1893:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.CIStr), ast.NewCIStr(yyS[yypt-0].ident))
}
case 1894:
{
parser.yyVAL.item = []*ast.IndexHint{yyS[yypt-0].item.(*ast.IndexHint)}
}
case 1895:
{
parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.IndexHint), yyS[yypt-0].item.(*ast.IndexHint))
}
case 1896:
{
parser.yyVAL.item = []*ast.IndexHint{}
}
case 1898:
{
parser.yyVAL.item = ast.NewCrossJoin(yyS[yypt-2].item.(ast.ResultSetNode), yyS[yypt-0].item.(ast.ResultSetNode))
}
case 1899:
{
on := &ast.OnCondition{Expr: yyS[yypt-0].expr}
parser.yyVAL.item = &ast.Join{Left: yyS[yypt-4].item.(ast.ResultSetNode), Right: yyS[yypt-2].item.(ast.ResultSetNode), Tp: ast.CrossJoin, On: on}
}
case 1900:
{
parser.yyVAL.item = &ast.Join{Left: yyS[yypt-6].item.(ast.ResultSetNode), Right: yyS[yypt-4].item.(ast.ResultSetNode), Tp: ast.CrossJoin, Using: yyS[yypt-1].item.([]*ast.ColumnName)}
}
case 1901:
{
on := &ast.OnCondition{Expr: yyS[yypt-0].expr}
parser.yyVAL.item = &ast.Join{Left: yyS[yypt-6].item.(ast.ResultSetNode), Right: yyS[yypt-2].item.(ast.ResultSetNode), Tp: yyS[yypt-5].item.(ast.JoinType), On: on}
}
case 1902:
{
parser.yyVAL.item = &ast.Join{Left: yyS[yypt-8].item.(ast.ResultSetNode), Right: yyS[yypt-4].item.(ast.ResultSetNode), Tp: yyS[yypt-7].item.(ast.JoinType), Using: yyS[yypt-1].item.([]*ast.ColumnName)}
}
case 1903:
{
parser.yyVAL.item = &ast.Join{Left: yyS[yypt-3].item.(ast.ResultSetNode), Right: yyS[yypt-0].item.(ast.ResultSetNode), NaturalJoin: true}
}
case 1904:
{
parser.yyVAL.item = &ast.Join{Left: yyS[yypt-5].item.(ast.ResultSetNode), Right: yyS[yypt-0].item.(ast.ResultSetNode), Tp: yyS[yypt-3].item.(ast.JoinType), NaturalJoin: true}
}
case 1905:
{
parser.yyVAL.item = &ast.Join{Left: yyS[yypt-2].item.(ast.ResultSetNode), Right: yyS[yypt-0].item.(ast.ResultSetNode), StraightJoin: true}
}
case 1906:
{
on := &ast.OnCondition{Expr: yyS[yypt-0].expr}
parser.yyVAL.item = &ast.Join{Left: yyS[yypt-4].item.(ast.ResultSetNode), Right: yyS[yypt-2].item.(ast.ResultSetNode), StraightJoin: true, On: on}
}
case 1907:
{
parser.yyVAL.item = &ast.Join{Left: yyS[yypt-6].item.(ast.ResultSetNode), Right: yyS[yypt-4].item.(ast.ResultSetNode), StraightJoin: true, Using: yyS[yypt-1].item.([]*ast.ColumnName)}
}
case 1908:
{
parser.yyVAL.item = ast.LeftJoin
}
case 1909:
{
parser.yyVAL.item = ast.RightJoin
}
case 1915:
{
parser.yyVAL.item = nil
}
case 1916:
{
parser.yyVAL.item = &ast.Limit{Count: yyS[yypt-0].item.(ast.ValueExpr)}
}
case 1917:
{
parser.yyVAL.item = ast.NewValueExpr(yyS[yypt-0].item, parser.charset, parser.collation)
}
case 1918:
{
parser.yyVAL.item = ast.NewParamMarkerExpr(yyS[yypt].offset)
}
case 1923:
{
parser.yyVAL.item = ast.NewValueExpr(uint64(1), parser.charset, parser.collation)
}
case 1925:
{
parser.yyVAL.item = &ast.Limit{Count: yyS[yypt-0].item.(ast.ExprNode)}
}
case 1926:
{
parser.yyVAL.item = &ast.Limit{Offset: yyS[yypt-2].item.(ast.ExprNode), Count: yyS[yypt-0].item.(ast.ExprNode)}
}
case 1927:
{
parser.yyVAL.item = &ast.Limit{Offset: yyS[yypt-0].item.(ast.ExprNode), Count: yyS[yypt-2].item.(ast.ExprNode)}
}
case 1928:
{
parser.yyVAL.item = &ast.Limit{Count: yyS[yypt-2].item.(ast.ExprNode)}
}
case 1929:
{
parser.yyVAL.item = nil
}
case 1931:
{
opt := &ast.SelectStmtOpts{}
opt.SQLCache = true
opt.TableHints = yyS[yypt-0].item.([]*ast.TableOptimizerHint)
parser.yyVAL.item = opt
}
case 1932:
{
opt := &ast.SelectStmtOpts{}
opt.SQLCache = true
if yyS[yypt-0].item.(bool) {
opt.Distinct = true
} else {
opt.Distinct = false
opt.ExplicitAll = true
}
parser.yyVAL.item = opt
}
case 1933:
{
opt := &ast.SelectStmtOpts{}
opt.SQLCache = true
opt.Priority = yyS[yypt-0].item.(mysql.PriorityEnum)
parser.yyVAL.item = opt
}
case 1934:
{
opt := &ast.SelectStmtOpts{}
opt.SQLCache = true
opt.SQLSmallResult = true
parser.yyVAL.item = opt
}
case 1935:
{
opt := &ast.SelectStmtOpts{}
opt.SQLCache = true
opt.SQLBigResult = true
parser.yyVAL.item = opt
}
case 1936:
{
opt := &ast.SelectStmtOpts{}
opt.SQLCache = true
opt.SQLBufferResult = true
parser.yyVAL.item = opt
}
case 1937:
{
opt := &ast.SelectStmtOpts{}
opt.SQLCache = yyS[yypt-0].item.(bool)
parser.yyVAL.item = opt
}
case 1938:
{
opt := &ast.SelectStmtOpts{}
opt.SQLCache = true
opt.CalcFoundRows = true
parser.yyVAL.item = opt
}
case 1939:
{
opt := &ast.SelectStmtOpts{}
opt.SQLCache = true
opt.StraightJoin = true
parser.yyVAL.item = opt
}
case 1940:
{
opt := &ast.SelectStmtOpts{}
opt.SQLCache = true
parser.yyVAL.item = opt
}
case 1942:
{
opts := yyS[yypt-1].item.(*ast.SelectStmtOpts)
opt := yyS[yypt-0].item.(*ast.SelectStmtOpts)
// Merge options.
// Always use the first hint.
if opt.TableHints != nil && opts.TableHints == nil {
opts.TableHints = opt.TableHints
}
if opt.Distinct {
opts.Distinct = true
}
if opt.Priority != mysql.NoPriority {
opts.Priority = opt.Priority
}
if opt.SQLSmallResult {
opts.SQLSmallResult = true
}
if opt.SQLBigResult {
opts.SQLBigResult = true
}
if opt.SQLBufferResult {
opts.SQLBufferResult = true
}
if !opt.SQLCache {
opts.SQLCache = false
}
if opt.CalcFoundRows {
opts.CalcFoundRows = true
}
if opt.StraightJoin {
opts.StraightJoin = true
}
if opt.ExplicitAll {
opts.ExplicitAll = true
}
if opts.Distinct && opts.ExplicitAll {
yylex.AppendError(ErrWrongUsage.GenWithStackByArgs("ALL", "DISTINCT"))
return 1
}
parser.yyVAL.item = opts
}
case 1944:
{
hints, warns := parser.parseHint(yyS[yypt-0].ident)
for _, w := range warns {
yylex.AppendError(w)
parser.lastErrorAsWarn()
}
parser.yyVAL.item = hints
}
case 1945:
{
parser.yyVAL.item = nil
}
case 1947:
{
parser.yyVAL.item = true
}
case 1948:
{
parser.yyVAL.item = false
}
case 1949:
{
parser.yyVAL.item = &ast.FieldList{Fields: yyS[yypt-0].item.([]*ast.SelectField)}
}
case 1950:
{
parser.yyVAL.item = nil
}
case 1952:
{
parser.yyVAL.item = nil
}
case 1953:
{
x := &ast.SelectIntoOption{
Tp: ast.SelectIntoOutfile,
FileName: yyS[yypt-2].ident,
}
if yyS[yypt-1].item != nil {
x.FieldsInfo = yyS[yypt-1].item.(*ast.FieldsClause)
}
if yyS[yypt-0].item != nil {
x.LinesInfo = yyS[yypt-0].item.(*ast.LinesClause)
}
parser.yyVAL.item = x
}
case 1954:
{
rs := yyS[yypt-1].statement.(*ast.SelectStmt)
endOffset := parser.endOffset(&yyS[yypt])
parser.setLastSelectFieldText(rs, endOffset)
src := parser.src
// See the implementation of yyParse function
parser.setNodeText(rs, src[yyS[yypt-1].offset:yyS[yypt].offset])
parser.yyVAL.expr = &ast.SubqueryExpr{Query: rs}
}
case 1955:
{
rs := yyS[yypt-1].statement.(*ast.SetOprStmt)
src := parser.src
parser.setNodeText(rs, src[yyS[yypt-1].offset:yyS[yypt].offset])
parser.yyVAL.expr = &ast.SubqueryExpr{Query: rs}
}
case 1956:
{
switch rs := yyS[yypt-1].statement.(type) {
case *ast.SelectStmt:
endOffset := parser.endOffset(&yyS[yypt])
parser.setLastSelectFieldText(rs, endOffset)
src := parser.src
// See the implementation of yyParse function
parser.setNodeText(rs, src[yyS[yypt-1].offset:yyS[yypt].offset])
parser.yyVAL.expr = &ast.SubqueryExpr{Query: rs}
case *ast.SetOprStmt:
src := parser.src
parser.setNodeText(rs, src[yyS[yypt-1].offset:yyS[yypt].offset])
parser.yyVAL.expr = &ast.SubqueryExpr{Query: rs}
}
}
case 1957:
{
subQuery := yyS[yypt-1].expr.(*ast.SubqueryExpr).Query
isRecursive := true
// remove redundant brackets like '((select 1))'
for isRecursive {
if _, isRecursive = subQuery.(*ast.SubqueryExpr); isRecursive {
subQuery = subQuery.(*ast.SubqueryExpr).Query
}
}
switch rs := subQuery.(type) {
case *ast.SelectStmt:
endOffset := parser.endOffset(&yyS[yypt])
parser.setLastSelectFieldText(rs, endOffset)
src := parser.src
parser.setNodeText(rs, src[yyS[yypt-1].offset:yyS[yypt].offset])
parser.yyVAL.expr = &ast.SubqueryExpr{Query: rs}
case *ast.SetOprStmt:
src := parser.src
parser.setNodeText(rs, src[yyS[yypt-1].offset:yyS[yypt].offset])
parser.yyVAL.expr = &ast.SubqueryExpr{Query: rs}
}
}
case 1958:
{
parser.yyVAL.item = nil
}
case 1959:
{
parser.yyVAL.item = &ast.SelectLockInfo{
LockType: ast.SelectLockForUpdate,
Tables: yyS[yypt-0].item.([]*ast.TableName),
}
}
case 1960:
{
parser.yyVAL.item = &ast.SelectLockInfo{
LockType: ast.SelectLockForShare,
Tables: yyS[yypt-0].item.([]*ast.TableName),
}
}
case 1961:
{
parser.yyVAL.item = &ast.SelectLockInfo{
LockType: ast.SelectLockForUpdateNoWait,
Tables: yyS[yypt-1].item.([]*ast.TableName),
}
}
case 1962:
{
parser.yyVAL.item = &ast.SelectLockInfo{
LockType: ast.SelectLockForUpdateWaitN,
WaitSec: getUint64FromNUM(yyS[yypt-0].item),
Tables: yyS[yypt-2].item.([]*ast.TableName),
}
}
case 1963:
{
parser.yyVAL.item = &ast.SelectLockInfo{
LockType: ast.SelectLockForShareNoWait,
Tables: yyS[yypt-1].item.([]*ast.TableName),
}
}
case 1964:
{
parser.yyVAL.item = &ast.SelectLockInfo{
LockType: ast.SelectLockForUpdateSkipLocked,
Tables: yyS[yypt-2].item.([]*ast.TableName),
}
}
case 1965:
{
parser.yyVAL.item = &ast.SelectLockInfo{
LockType: ast.SelectLockForShareSkipLocked,
Tables: yyS[yypt-2].item.([]*ast.TableName),
}
}
case 1966:
{
parser.yyVAL.item = &ast.SelectLockInfo{
LockType: ast.SelectLockForShare,
Tables: []*ast.TableName{},
}
}
case 1967:
{
parser.yyVAL.item = []*ast.TableName{}
}
case 1968:
{
parser.yyVAL.item = yyS[yypt-0].item.([]*ast.TableName)
}
case 1971:
{
setOpr := yyS[yypt-0].statement.(*ast.SetOprStmt)
setOpr.With = yyS[yypt-1].item.(*ast.WithClause)
parser.yyVAL.statement = setOpr
}
case 1972:
{
setOpr := yyS[yypt-0].statement.(*ast.SetOprStmt)
setOpr.With = yyS[yypt-1].item.(*ast.WithClause)
parser.yyVAL.statement = setOpr
}
case 1973:
{
setOprList1 := yyS[yypt-2].item.([]ast.Node)
if sel, isSelect := setOprList1[len(setOprList1)-1].(*ast.SelectStmt); isSelect && !sel.IsInBraces {
endOffset := parser.endOffset(&yyS[yypt-1])
parser.setLastSelectFieldText(sel, endOffset)
}
setOpr := &ast.SetOprStmt{SelectList: &ast.SetOprSelectList{Selects: yyS[yypt-2].item.([]ast.Node)}}
st := yyS[yypt-0].statement.(*ast.SelectStmt)
setOpr.Limit = st.Limit
setOpr.OrderBy = st.OrderBy
st.Limit = nil
st.OrderBy = nil
st.AfterSetOperator = yyS[yypt-1].item.(*ast.SetOprType)
setOpr.SelectList.Selects = append(setOpr.SelectList.Selects, st)
parser.yyVAL.statement = setOpr
}
case 1974:
{
setOprList1 := yyS[yypt-2].item.([]ast.Node)
if sel, isSelect := setOprList1[len(setOprList1)-1].(*ast.SelectStmt); isSelect && !sel.IsInBraces {
endOffset := parser.endOffset(&yyS[yypt-1])
parser.setLastSelectFieldText(sel, endOffset)
}
var setOprList2 []ast.Node
var with2 *ast.WithClause
var limit2 *ast.Limit
var orderBy2 *ast.OrderByClause
switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) {
case *ast.SelectStmt:
setOprList2 = []ast.Node{x}
with2 = x.With
case *ast.SetOprStmt:
// child setOprStmt's limit and order should also make sense
// we should separate it out from other normal SetOprSelectList.
setOprList2 = x.SelectList.Selects
with2 = x.With
limit2 = x.Limit
orderBy2 = x.OrderBy
}
nextSetOprList := &ast.SetOprSelectList{Selects: setOprList2, With: with2, Limit: limit2, OrderBy: orderBy2}
nextSetOprList.AfterSetOperator = yyS[yypt-1].item.(*ast.SetOprType)
setOprList := append(setOprList1, nextSetOprList)
setOpr := &ast.SetOprStmt{SelectList: &ast.SetOprSelectList{Selects: setOprList}}
parser.yyVAL.statement = setOpr
}
case 1975:
{
setOprList1 := yyS[yypt-3].item.([]ast.Node)
if sel, isSelect := setOprList1[len(setOprList1)-1].(*ast.SelectStmt); isSelect && !sel.IsInBraces {
endOffset := parser.endOffset(&yyS[yypt-2])
parser.setLastSelectFieldText(sel, endOffset)
}
var setOprList2 []ast.Node
var with2 *ast.WithClause
var limit2 *ast.Limit
var orderBy2 *ast.OrderByClause
switch x := yyS[yypt-1].expr.(*ast.SubqueryExpr).Query.(type) {
case *ast.SelectStmt:
setOprList2 = []ast.Node{x}
with2 = x.With
case *ast.SetOprStmt:
setOprList2 = x.SelectList.Selects
with2 = x.With
limit2 = x.Limit
orderBy2 = x.OrderBy
}
nextSetOprList := &ast.SetOprSelectList{Selects: setOprList2, With: with2, Limit: limit2, OrderBy: orderBy2}
nextSetOprList.AfterSetOperator = yyS[yypt-2].item.(*ast.SetOprType)
setOprList := append(setOprList1, nextSetOprList)
setOpr := &ast.SetOprStmt{SelectList: &ast.SetOprSelectList{Selects: setOprList}}
setOpr.OrderBy = yyS[yypt-0].item.(*ast.OrderByClause)
parser.yyVAL.statement = setOpr
}
case 1976:
{
setOprList1 := yyS[yypt-3].item.([]ast.Node)
if sel, isSelect := setOprList1[len(setOprList1)-1].(*ast.SelectStmt); isSelect && !sel.IsInBraces {
endOffset := parser.endOffset(&yyS[yypt-2])
parser.setLastSelectFieldText(sel, endOffset)
}
var setOprList2 []ast.Node
var with2 *ast.WithClause
var limit2 *ast.Limit
var orderBy2 *ast.OrderByClause
switch x := yyS[yypt-1].expr.(*ast.SubqueryExpr).Query.(type) {
case *ast.SelectStmt:
setOprList2 = []ast.Node{x}
with2 = x.With
case *ast.SetOprStmt:
setOprList2 = x.SelectList.Selects
with2 = x.With
limit2 = x.Limit
orderBy2 = x.OrderBy
}
nextSetOprList := &ast.SetOprSelectList{Selects: setOprList2, With: with2, Limit: limit2, OrderBy: orderBy2}
nextSetOprList.AfterSetOperator = yyS[yypt-2].item.(*ast.SetOprType)
setOprList := append(setOprList1, nextSetOprList)
setOpr := &ast.SetOprStmt{SelectList: &ast.SetOprSelectList{Selects: setOprList}}
setOpr.Limit = yyS[yypt-0].item.(*ast.Limit)
parser.yyVAL.statement = setOpr
}
case 1977:
{
setOprList1 := yyS[yypt-4].item.([]ast.Node)
if sel, isSelect := setOprList1[len(setOprList1)-1].(*ast.SelectStmt); isSelect && !sel.IsInBraces {
endOffset := parser.endOffset(&yyS[yypt-3])
parser.setLastSelectFieldText(sel, endOffset)
}
var setOprList2 []ast.Node
var with2 *ast.WithClause
var limit2 *ast.Limit
var orderBy2 *ast.OrderByClause
switch x := yyS[yypt-2].expr.(*ast.SubqueryExpr).Query.(type) {
case *ast.SelectStmt:
setOprList2 = []ast.Node{x}
with2 = x.With
case *ast.SetOprStmt:
setOprList2 = x.SelectList.Selects
with2 = x.With
limit2 = x.Limit
orderBy2 = x.OrderBy
}
nextSetOprList := &ast.SetOprSelectList{Selects: setOprList2, With: with2, Limit: limit2, OrderBy: orderBy2}
nextSetOprList.AfterSetOperator = yyS[yypt-3].item.(*ast.SetOprType)
setOprList := append(setOprList1, nextSetOprList)
setOpr := &ast.SetOprStmt{SelectList: &ast.SetOprSelectList{Selects: setOprList}}
setOpr.OrderBy = yyS[yypt-1].item.(*ast.OrderByClause)
setOpr.Limit = yyS[yypt-0].item.(*ast.Limit)
parser.yyVAL.statement = setOpr
}
case 1978:
{
var setOprList []ast.Node
switch x := yyS[yypt-1].expr.(*ast.SubqueryExpr).Query.(type) {
case *ast.SelectStmt:
setOprList = []ast.Node{&ast.SetOprSelectList{Selects: []ast.Node{x}, With: x.With}}
case *ast.SetOprStmt:
setOprList = []ast.Node{&ast.SetOprSelectList{Selects: x.SelectList.Selects, With: x.With, Limit: x.Limit, OrderBy: x.OrderBy}}
}
setOpr := &ast.SetOprStmt{SelectList: &ast.SetOprSelectList{Selects: setOprList}}
setOpr.OrderBy = yyS[yypt-0].item.(*ast.OrderByClause)
parser.yyVAL.statement = setOpr
}
case 1979:
{
var setOprList []ast.Node
switch x := yyS[yypt-1].expr.(*ast.SubqueryExpr).Query.(type) {
case *ast.SelectStmt:
setOprList = []ast.Node{&ast.SetOprSelectList{Selects: []ast.Node{x}, With: x.With}}
case *ast.SetOprStmt:
setOprList = []ast.Node{&ast.SetOprSelectList{Selects: x.SelectList.Selects, With: x.With, Limit: x.Limit, OrderBy: x.OrderBy}}
}
setOpr := &ast.SetOprStmt{SelectList: &ast.SetOprSelectList{Selects: setOprList}}
setOpr.Limit = yyS[yypt-0].item.(*ast.Limit)
parser.yyVAL.statement = setOpr
}
case 1980:
{
var setOprList []ast.Node
switch x := yyS[yypt-2].expr.(*ast.SubqueryExpr).Query.(type) {
case *ast.SelectStmt:
setOprList = []ast.Node{&ast.SetOprSelectList{Selects: []ast.Node{x}, With: x.With}}
case *ast.SetOprStmt:
setOprList = []ast.Node{&ast.SetOprSelectList{Selects: x.SelectList.Selects, With: x.With, Limit: x.Limit, OrderBy: x.OrderBy}}
}
setOpr := &ast.SetOprStmt{SelectList: &ast.SetOprSelectList{Selects: setOprList}}
setOpr.OrderBy = yyS[yypt-1].item.(*ast.OrderByClause)
setOpr.Limit = yyS[yypt-0].item.(*ast.Limit)
parser.yyVAL.statement = setOpr
}
case 1982:
{
setOprList1 := yyS[yypt-2].item.([]ast.Node)
setOprList2 := yyS[yypt-0].item.([]ast.Node)
if sel, isSelect := setOprList1[len(setOprList1)-1].(*ast.SelectStmt); isSelect && !sel.IsInBraces {
endOffset := parser.endOffset(&yyS[yypt-1])
parser.setLastSelectFieldText(sel, endOffset)
}
switch x := setOprList2[0].(type) {
case *ast.SelectStmt:
x.AfterSetOperator = yyS[yypt-1].item.(*ast.SetOprType)
case *ast.SetOprSelectList:
x.AfterSetOperator = yyS[yypt-1].item.(*ast.SetOprType)
}
parser.yyVAL.item = append(setOprList1, setOprList2...)
}
case 1983:
{
parser.yyVAL.item = []ast.Node{yyS[yypt-0].statement.(*ast.SelectStmt)}
}
case 1984:
{
var setOprList []ast.Node
switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) {
case *ast.SelectStmt:
setOprList = []ast.Node{&ast.SetOprSelectList{Selects: []ast.Node{x}}}
case *ast.SetOprStmt:
setOprList = []ast.Node{&ast.SetOprSelectList{Selects: x.SelectList.Selects, With: x.With, Limit: x.Limit, OrderBy: x.OrderBy}}
}
parser.yyVAL.item = setOprList
}
case 1985:
{
var tp ast.SetOprType
tp = ast.Union
if yyS[yypt-0].item == false {
tp = ast.UnionAll
}
parser.yyVAL.item = &tp
}
case 1986:
{
var tp ast.SetOprType
tp = ast.Except
if yyS[yypt-0].item == false {
tp = ast.ExceptAll
}
parser.yyVAL.item = &tp
}
case 1987:
{
var tp ast.SetOprType
tp = ast.Intersect
if yyS[yypt-0].item == false {
tp = ast.IntersectAll
}
parser.yyVAL.item = &tp
}
case 1989:
{
parser.yyVAL.statement = &ast.SetStmt{Variables: yyS[yypt-0].item.([]*ast.VariableAssignment)}
}
case 1990:
{
parser.yyVAL.statement = &ast.SetPwdStmt{Password: yyS[yypt-0].ident}
}
case 1991:
{
parser.yyVAL.statement = &ast.SetPwdStmt{User: yyS[yypt-2].item.(*auth.UserIdentity), Password: yyS[yypt-0].ident}
}
case 1992:
{
vars := yyS[yypt-0].item.([]*ast.VariableAssignment)
for _, v := range vars {
v.IsGlobal = true
}
parser.yyVAL.statement = &ast.SetStmt{Variables: vars}
}
case 1993:
{
parser.yyVAL.statement = &ast.SetStmt{Variables: yyS[yypt-0].item.([]*ast.VariableAssignment)}
}
case 1994:
{
assigns := yyS[yypt-0].item.([]*ast.VariableAssignment)
for i := 0; i < len(assigns); i++ {
if assigns[i].Name == "tx_isolation" {
// A special session variable that make setting tx_isolation take effect one time.
assigns[i].Name = "tx_isolation_one_shot"
}
}
parser.yyVAL.statement = &ast.SetStmt{Variables: assigns}
}
case 1995:
{
parser.yyVAL.statement = &ast.SetConfigStmt{Type: strings.ToLower(yyS[yypt-3].ident), Name: yyS[yypt-2].ident, Value: yyS[yypt-0].expr}
}
case 1996:
{
parser.yyVAL.statement = &ast.SetConfigStmt{Instance: yyS[yypt-3].ident, Name: yyS[yypt-2].ident, Value: yyS[yypt-0].expr}
}
case 1997:
{
parser.yyVAL.statement = &ast.SetSessionStatesStmt{SessionStates: yyS[yypt-0].ident}
}
case 1998:
{
parser.yyVAL.statement = &ast.SetResourceGroupStmt{Name: ast.NewCIStr(yyS[yypt-0].ident)}
}
case 1999:
{
parser.yyVAL.statement = yyS[yypt-0].item.(*ast.SetRoleStmt)
}
case 2000:
{
tmp := yyS[yypt-2].item.(*ast.SetRoleStmt)
parser.yyVAL.statement = &ast.SetDefaultRoleStmt{
SetRoleOpt: tmp.SetRoleOpt,
RoleList: tmp.RoleList,
UserList: yyS[yypt-0].item.([]*auth.UserIdentity),
}
}
case 2001:
{
parser.yyVAL.item = &ast.SetRoleStmt{SetRoleOpt: ast.SetRoleNone, RoleList: nil}
}
case 2002:
{
parser.yyVAL.item = &ast.SetRoleStmt{SetRoleOpt: ast.SetRoleAll, RoleList: nil}
}
case 2003:
{
parser.yyVAL.item = &ast.SetRoleStmt{SetRoleOpt: ast.SetRoleRegular, RoleList: yyS[yypt-0].item.([]*auth.RoleIdentity)}
}
case 2004:
{
parser.yyVAL.item = &ast.SetRoleStmt{SetRoleOpt: ast.SetRoleAllExcept, RoleList: yyS[yypt-0].item.([]*auth.RoleIdentity)}
}
case 2006:
{
parser.yyVAL.item = &ast.SetRoleStmt{SetRoleOpt: ast.SetRoleDefault, RoleList: nil}
}
case 2007:
{
if yyS[yypt-0].item != nil {
parser.yyVAL.item = yyS[yypt-0].item
} else {
parser.yyVAL.item = []*ast.VariableAssignment{}
}
}
case 2008:
{
if yyS[yypt-0].item != nil {
varAssigns := yyS[yypt-0].item.([]*ast.VariableAssignment)
parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.VariableAssignment), varAssigns...)
} else {
parser.yyVAL.item = yyS[yypt-2].item
}
}
case 2009:
{
varAssigns := []*ast.VariableAssignment{}
expr := ast.NewValueExpr(yyS[yypt-0].ident, parser.charset, parser.collation)
varAssigns = append(varAssigns, &ast.VariableAssignment{Name: "tx_isolation", Value: expr, IsSystem: true})
parser.yyVAL.item = varAssigns
}
case 2010:
{
varAssigns := []*ast.VariableAssignment{}
expr := ast.NewValueExpr("0", parser.charset, parser.collation)
varAssigns = append(varAssigns, &ast.VariableAssignment{Name: "tx_read_only", Value: expr, IsSystem: true})
parser.yyVAL.item = varAssigns
}
case 2011:
{
varAssigns := []*ast.VariableAssignment{}
expr := ast.NewValueExpr("1", parser.charset, parser.collation)
varAssigns = append(varAssigns, &ast.VariableAssignment{Name: "tx_read_only", Value: expr, IsSystem: true})
parser.yyVAL.item = varAssigns
}
case 2012:
{
varAssigns := []*ast.VariableAssignment{}
asof := yyS[yypt-0].item.(*ast.AsOfClause)
if asof != nil {
varAssigns = append(varAssigns, &ast.VariableAssignment{Name: "tx_read_ts", Value: asof.TsExpr, IsSystem: true})
}
parser.yyVAL.item = varAssigns
}
case 2013:
{
parser.yyVAL.ident = ast.RepeatableRead
}
case 2014:
{
parser.yyVAL.ident = ast.ReadCommitted
}
case 2015:
{
parser.yyVAL.ident = ast.ReadUncommitted
}
case 2016:
{
parser.yyVAL.ident = ast.Serializable
}
case 2017:
{
parser.yyVAL.expr = ast.NewValueExpr("ON", parser.charset, parser.collation)
}
case 2018:
{
parser.yyVAL.expr = ast.NewValueExpr("BINARY", parser.charset, parser.collation)
}
case 2023:
{
parser.yyVAL.ident = yyS[yypt-2].ident + "." + yyS[yypt-0].ident
}
case 2025:
{
parser.yyVAL.ident = yyS[yypt-2].ident + "." + yyS[yypt-0].ident
}
case 2026:
{
parser.yyVAL.ident = yyS[yypt-2].ident + "-" + yyS[yypt-0].ident
}
case 2027:
{
parser.yyVAL.item = &ast.VariableAssignment{Name: yyS[yypt-2].ident, Value: yyS[yypt-0].expr, IsSystem: true}
}
case 2028:
{
parser.yyVAL.item = &ast.VariableAssignment{Name: yyS[yypt-2].ident, Value: yyS[yypt-0].expr, IsGlobal: true, IsSystem: true}
}
case 2029:
{
parser.yyVAL.item = &ast.VariableAssignment{Name: yyS[yypt-2].ident, Value: yyS[yypt-0].expr, IsInstance: true, IsSystem: true}
}
case 2030:
{
parser.yyVAL.item = &ast.VariableAssignment{Name: yyS[yypt-2].ident, Value: yyS[yypt-0].expr, IsSystem: true}
}
case 2031:
{
parser.yyVAL.item = &ast.VariableAssignment{Name: yyS[yypt-2].ident, Value: yyS[yypt-0].expr, IsSystem: true}
}
case 2032:
{
v := strings.ToLower(yyS[yypt-2].ident)
var isGlobal bool
var isInstance bool
if strings.HasPrefix(v, "@@global.") {
isGlobal = true
v = strings.TrimPrefix(v, "@@global.")
} else if strings.HasPrefix(v, "@@instance.") {
isInstance = true
v = strings.TrimPrefix(v, "@@instance.")
} else if strings.HasPrefix(v, "@@session.") {
v = strings.TrimPrefix(v, "@@session.")
} else if strings.HasPrefix(v, "@@local.") {
v = strings.TrimPrefix(v, "@@local.")
} else if strings.HasPrefix(v, "@@") {
v = strings.TrimPrefix(v, "@@")
}
parser.yyVAL.item = &ast.VariableAssignment{Name: v, Value: yyS[yypt-0].expr, IsGlobal: isGlobal, IsInstance: isInstance, IsSystem: true}
}
case 2033:
{
v := yyS[yypt-2].ident
v = strings.TrimPrefix(v, "@")
parser.yyVAL.item = &ast.VariableAssignment{Name: v, Value: yyS[yypt-0].expr}
}
case 2034:
{
parser.yyVAL.item = &ast.VariableAssignment{
Name: ast.SetNames,
Value: ast.NewValueExpr(yyS[yypt-0].ident, "", ""),
}
}
case 2035:
{
parser.yyVAL.item = &ast.VariableAssignment{
Name: ast.SetNames,
Value: ast.NewValueExpr(yyS[yypt-2].ident, "", ""),
}
}
case 2036:
{
parser.yyVAL.item = &ast.VariableAssignment{
Name: ast.SetNames,
Value: ast.NewValueExpr(yyS[yypt-2].ident, "", ""),
ExtendValue: ast.NewValueExpr(yyS[yypt-0].ident, "", ""),
}
}
case 2037:
{
v := &ast.DefaultExpr{}
parser.yyVAL.item = &ast.VariableAssignment{Name: ast.SetNames, Value: v}
}
case 2038:
{
parser.yyVAL.item = &ast.VariableAssignment{Name: ast.SetCharset, Value: yyS[yypt-0].expr}
}
case 2039:
{
parser.yyVAL.expr = ast.NewValueExpr(yyS[yypt-0].ident, "", "")
}
case 2040:
{
parser.yyVAL.expr = &ast.DefaultExpr{}
}
case 2041:
{
// Validate input charset name to keep the same behavior as parser of MySQL.
cs, err := charset.GetCharsetInfo(yyS[yypt-0].ident)
if err != nil {
yylex.AppendError(ErrUnknownCharacterSet.GenWithStackByArgs(yyS[yypt-0].ident))
return 1
}
// Use charset name returned from charset.GetCharsetInfo(),
// to keep lower case of input for generated column restore.
parser.yyVAL.ident = cs.Name
}
case 2042:
{
parser.yyVAL.ident = charset.CharsetBin
}
case 2043:
{
info, err := charset.GetCollationByName(yyS[yypt-0].ident)
if err != nil {
yylex.AppendError(err)
return 1
}
parser.yyVAL.ident = info.Name
}
case 2044:
{
parser.yyVAL.ident = charset.CollationBin
}
case 2045:
{
parser.yyVAL.item = []*ast.VariableAssignment{yyS[yypt-0].item.(*ast.VariableAssignment)}
}
case 2046:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.VariableAssignment), yyS[yypt-0].item.(*ast.VariableAssignment))
}
case 2049:
{
v := strings.ToLower(yyS[yypt-0].ident)
var isGlobal bool
var isInstance bool
explicitScope := true
if strings.HasPrefix(v, "@@global.") {
isGlobal = true
v = strings.TrimPrefix(v, "@@global.")
} else if strings.HasPrefix(v, "@@instance.") {
isInstance = true
v = strings.TrimPrefix(v, "@@instance.")
} else if strings.HasPrefix(v, "@@session.") {
v = strings.TrimPrefix(v, "@@session.")
} else if strings.HasPrefix(v, "@@local.") {
v = strings.TrimPrefix(v, "@@local.")
} else if strings.HasPrefix(v, "@@") {
v, explicitScope = strings.TrimPrefix(v, "@@"), false
}
parser.yyVAL.expr = &ast.VariableExpr{Name: v, IsGlobal: isGlobal, IsInstance: isInstance, IsSystem: true, ExplicitScope: explicitScope}
}
case 2050:
{
v := yyS[yypt-0].ident
v = strings.TrimPrefix(v, "@")
parser.yyVAL.expr = &ast.VariableExpr{Name: v, IsGlobal: false, IsSystem: false}
}
case 2051:
{
parser.yyVAL.item = &auth.UserIdentity{Username: yyS[yypt-0].ident, Hostname: "%"}
}
case 2052:
{
parser.yyVAL.item = &auth.UserIdentity{Username: yyS[yypt-2].ident, Hostname: strings.ToLower(yyS[yypt-0].ident)}
}
case 2053:
{
parser.yyVAL.item = &auth.UserIdentity{Username: yyS[yypt-1].ident, Hostname: strings.ToLower(strings.TrimPrefix(yyS[yypt-0].ident, "@"))}
}
case 2054:
{
parser.yyVAL.item = &auth.UserIdentity{CurrentUser: true}
}
case 2055:
{
parser.yyVAL.item = []*auth.UserIdentity{yyS[yypt-0].item.(*auth.UserIdentity)}
}
case 2056:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]*auth.UserIdentity), yyS[yypt-0].item.(*auth.UserIdentity))
}
case 2058:
{
parser.yyVAL.ident = yyS[yypt-1].ident
}
case 2062:
{
parser.yyVAL.item = &auth.RoleIdentity{Username: yyS[yypt-2].ident, Hostname: strings.ToLower(yyS[yypt-0].ident)}
}
case 2063:
{
parser.yyVAL.item = &auth.RoleIdentity{Username: yyS[yypt-1].ident, Hostname: strings.ToLower(strings.TrimPrefix(yyS[yypt-0].ident, "@"))}
}
case 2064:
{
parser.yyVAL.item = &auth.RoleIdentity{Username: yyS[yypt-0].ident, Hostname: "%"}
}
case 2065:
{
parser.yyVAL.item = yyS[yypt-0].item
}
case 2066:
{
parser.yyVAL.item = &auth.RoleIdentity{Username: yyS[yypt-0].ident, Hostname: "%"}
}
case 2067:
{
parser.yyVAL.item = yyS[yypt-0].item
}
case 2068:
{
parser.yyVAL.item = []*auth.RoleIdentity{yyS[yypt-0].item.(*auth.RoleIdentity)}
}
case 2069:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]*auth.RoleIdentity), yyS[yypt-0].item.(*auth.RoleIdentity))
}
case 2070:
{
parser.yyVAL.item = &ast.LimitSimple{Offset: 0, Count: yyS[yypt-0].item.(uint64)}
}
case 2071:
{
parser.yyVAL.item = &ast.LimitSimple{Offset: yyS[yypt-2].item.(uint64), Count: yyS[yypt-0].item.(uint64)}
}
case 2072:
{
parser.yyVAL.item = &ast.LimitSimple{Offset: yyS[yypt-0].item.(uint64), Count: yyS[yypt-2].item.(uint64)}
}
case 2073:
{
parser.yyVAL.item = ast.BDRRolePrimary
}
case 2074:
{
parser.yyVAL.item = ast.BDRRoleSecondary
}
case 2075:
{
parser.yyVAL.statement = &ast.AdminStmt{Tp: ast.AdminShowDDL}
}
case 2076:
{
stmt := &ast.AdminStmt{Tp: ast.AdminShowDDLJobs}
if yyS[yypt-0].item != nil {
stmt.Where = yyS[yypt-0].item.(ast.ExprNode)
}
parser.yyVAL.statement = stmt
}
case 2077:
{
stmt := &ast.AdminStmt{
Tp: ast.AdminShowDDLJobs,
JobNumber: yyS[yypt-1].item.(int64),
}
if yyS[yypt-0].item != nil {
stmt.Where = yyS[yypt-0].item.(ast.ExprNode)
}
parser.yyVAL.statement = stmt
}
case 2078:
{
parser.yyVAL.statement = &ast.AdminStmt{
Tp: ast.AdminShowNextRowID,
Tables: []*ast.TableName{yyS[yypt-1].item.(*ast.TableName)},
}
}
case 2079:
{
parser.yyVAL.statement = &ast.AdminStmt{
Tp: ast.AdminCheckTable,
Tables: yyS[yypt-0].item.([]*ast.TableName),
}
}
case 2080:
{
parser.yyVAL.statement = &ast.AdminStmt{
Tp: ast.AdminCheckIndex,
Tables: []*ast.TableName{yyS[yypt-1].item.(*ast.TableName)},
Index: string(yyS[yypt-0].ident),
}
}
case 2081:
{
parser.yyVAL.statement = &ast.AdminStmt{
Tp: ast.AdminRecoverIndex,
Tables: []*ast.TableName{yyS[yypt-1].item.(*ast.TableName)},
Index: string(yyS[yypt-0].ident),
}
}
case 2082:
{
parser.yyVAL.statement = &ast.AdminStmt{Tp: ast.AdminWorkloadRepoCreate}
}
case 2083:
{
parser.yyVAL.statement = &ast.AdminStmt{
Tp: ast.AdminCleanupIndex,
Tables: []*ast.TableName{yyS[yypt-1].item.(*ast.TableName)},
Index: string(yyS[yypt-0].ident),
}
}
case 2084:
{
parser.yyVAL.statement = &ast.AdminStmt{
Tp: ast.AdminCheckIndexRange,
Tables: []*ast.TableName{yyS[yypt-2].item.(*ast.TableName)},
Index: string(yyS[yypt-1].ident),
HandleRanges: yyS[yypt-0].item.([]ast.HandleRange),
}
}
case 2085:
{
parser.yyVAL.statement = &ast.AdminStmt{
Tp: ast.AdminChecksumTable,
Tables: yyS[yypt-0].item.([]*ast.TableName),
}
}
case 2086:
{
parser.yyVAL.statement = &ast.AdminStmt{
Tp: ast.AdminCancelDDLJobs,
JobIDs: yyS[yypt-0].item.([]int64),
}
}
case 2087:
{
parser.yyVAL.statement = &ast.AdminStmt{
Tp: ast.AdminPauseDDLJobs,
JobIDs: yyS[yypt-0].item.([]int64),
}
}
case 2088:
{
parser.yyVAL.statement = &ast.AdminStmt{
Tp: ast.AdminResumeDDLJobs,
JobIDs: yyS[yypt-0].item.([]int64),
}
}
case 2089:
{
parser.yyVAL.statement = &ast.AdminStmt{
Tp: ast.AdminShowDDLJobQueries,
JobIDs: yyS[yypt-0].item.([]int64),
}
}
case 2090:
{
ret := &ast.AdminStmt{
Tp: ast.AdminShowDDLJobQueriesWithRange,
}
ret.LimitSimple.Count = yyS[yypt-0].item.(*ast.LimitSimple).Count
ret.LimitSimple.Offset = yyS[yypt-0].item.(*ast.LimitSimple).Offset
parser.yyVAL.statement = ret
}
case 2091:
{
parser.yyVAL.statement = &ast.AdminStmt{
Tp: ast.AdminShowSlow,
ShowSlow: yyS[yypt-0].item.(*ast.ShowSlow),
}
}
case 2092:
{
parser.yyVAL.statement = &ast.AdminStmt{
Tp: ast.AdminReloadExprPushdownBlacklist,
}
}
case 2093:
{
parser.yyVAL.statement = &ast.AdminStmt{
Tp: ast.AdminReloadOptRuleBlacklist,
}
}
case 2094:
{
parser.yyVAL.statement = &ast.AdminStmt{
Tp: ast.AdminPluginEnable,
Plugins: yyS[yypt-0].item.([]string),
}
}
case 2095:
{
parser.yyVAL.statement = &ast.AdminStmt{
Tp: ast.AdminPluginDisable,
Plugins: yyS[yypt-0].item.([]string),
}
}
case 2096:
{
parser.yyVAL.statement = &ast.CleanupTableLockStmt{
Tables: yyS[yypt-0].item.([]*ast.TableName),
}
}
case 2097:
{
parser.yyVAL.statement = &ast.RepairTableStmt{
Table: yyS[yypt-1].item.(*ast.TableName),
CreateStmt: yyS[yypt-0].statement.(*ast.CreateTableStmt),
}
}
case 2098:
{
parser.yyVAL.statement = &ast.AdminStmt{
Tp: ast.AdminFlushBindings,
}
}
case 2099:
{
parser.yyVAL.statement = &ast.AdminStmt{
Tp: ast.AdminCaptureBindings,
}
}
case 2100:
{
parser.yyVAL.statement = &ast.AdminStmt{
Tp: ast.AdminEvolveBindings,
}
}
case 2101:
{
parser.yyVAL.statement = &ast.AdminStmt{
Tp: ast.AdminReloadBindings,
}
}
case 2102:
{
parser.yyVAL.statement = &ast.AdminStmt{
Tp: ast.AdminReloadClusterBindings,
}
}
case 2103:
{
parser.yyVAL.statement = &ast.AdminStmt{
Tp: ast.AdminReloadStatistics,
}
}
case 2104:
{
parser.yyVAL.statement = &ast.AdminStmt{
Tp: ast.AdminReloadStatistics,
}
}
case 2105:
{
parser.yyVAL.statement = &ast.AdminStmt{
Tp: ast.AdminFlushPlanCache,
StatementScope: yyS[yypt-1].item.(ast.StatementScope),
}
}
case 2106:
{
parser.yyVAL.statement = &ast.AdminStmt{
Tp: ast.AdminSetBDRRole,
BDRRole: yyS[yypt-0].item.(ast.BDRRole),
}
}
case 2107:
{
parser.yyVAL.statement = &ast.AdminStmt{
Tp: ast.AdminShowBDRRole,
}
}
case 2108:
{
parser.yyVAL.statement = &ast.AdminStmt{
Tp: ast.AdminUnsetBDRRole,
}
}
case 2109:
{
parser.yyVAL.statement = &ast.AdminStmt{
Tp: ast.AdminAlterDDLJob,
JobNumber: yyS[yypt-1].item.(int64),
AlterJobOptions: yyS[yypt-0].item.([]*ast.AlterJobOption),
}
}
case 2110:
{
parser.yyVAL.item = []*ast.AlterJobOption{yyS[yypt-0].item.(*ast.AlterJobOption)}
}
case 2111:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.AlterJobOption), yyS[yypt-0].item.(*ast.AlterJobOption))
}
case 2112:
{
parser.yyVAL.item = &ast.AlterJobOption{
Name: strings.ToLower(yyS[yypt-2].ident),
Value: yyS[yypt-0].expr.(ast.ExprNode),
}
}
case 2113:
{
parser.yyVAL.item = &ast.ShowSlow{
Tp: ast.ShowSlowRecent,
Count: getUint64FromNUM(yyS[yypt-0].item),
}
}
case 2114:
{
parser.yyVAL.item = &ast.ShowSlow{
Tp: ast.ShowSlowTop,
Kind: ast.ShowSlowKindDefault,
Count: getUint64FromNUM(yyS[yypt-0].item),
}
}
case 2115:
{
parser.yyVAL.item = &ast.ShowSlow{
Tp: ast.ShowSlowTop,
Kind: ast.ShowSlowKindInternal,
Count: getUint64FromNUM(yyS[yypt-0].item),
}
}
case 2116:
{
parser.yyVAL.item = &ast.ShowSlow{
Tp: ast.ShowSlowTop,
Kind: ast.ShowSlowKindAll,
Count: getUint64FromNUM(yyS[yypt-0].item),
}
}
case 2117:
{
parser.yyVAL.item = []ast.HandleRange{yyS[yypt-0].item.(ast.HandleRange)}
}
case 2118:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.HandleRange), yyS[yypt-0].item.(ast.HandleRange))
}
case 2119:
{
parser.yyVAL.item = ast.HandleRange{Begin: yyS[yypt-3].item.(int64), End: yyS[yypt-1].item.(int64)}
}
case 2120:
{
parser.yyVAL.item = []int64{yyS[yypt-0].item.(int64)}
}
case 2121:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]int64), yyS[yypt-0].item.(int64))
}
case 2122:
{
stmt := yyS[yypt-1].item.(*ast.ShowStmt)
if yyS[yypt-0].item != nil {
if x, ok := yyS[yypt-0].item.(*ast.PatternLikeOrIlikeExpr); ok && x.Expr == nil {
stmt.Pattern = x
} else {
stmt.Where = yyS[yypt-0].item.(ast.ExprNode)
}
}
parser.yyVAL.statement = stmt
}
case 2123:
{
parser.yyVAL.statement = &ast.ShowStmt{
Tp: ast.ShowCreateTable,
Table: yyS[yypt-0].item.(*ast.TableName),
}
}
case 2124:
{
parser.yyVAL.statement = &ast.ShowStmt{
Tp: ast.ShowCreateView,
Table: yyS[yypt-0].item.(*ast.TableName),
}
}
case 2125:
{
parser.yyVAL.statement = &ast.ShowStmt{
Tp: ast.ShowCreateDatabase,
IfNotExists: yyS[yypt-1].item.(bool),
DBName: yyS[yypt-0].ident,
}
}
case 2126:
{
parser.yyVAL.statement = &ast.ShowStmt{
Tp: ast.ShowCreateSequence,
Table: yyS[yypt-0].item.(*ast.TableName),
}
}
case 2127:
{
parser.yyVAL.statement = &ast.ShowStmt{
Tp: ast.ShowCreatePlacementPolicy,
DBName: yyS[yypt-0].ident,
}
}
case 2128:
{
parser.yyVAL.statement = &ast.ShowStmt{
Tp: ast.ShowCreateResourceGroup,
ResourceGroupName: yyS[yypt-0].ident,
}
}
case 2129:
{
// See https://dev.mysql.com/doc/refman/5.7/en/show-create-user.html
parser.yyVAL.statement = &ast.ShowStmt{
Tp: ast.ShowCreateUser,
User: yyS[yypt-0].item.(*auth.UserIdentity),
}
}
case 2130:
{
stmt := &ast.ShowStmt{
Tp: ast.ShowMaskingPolicies,
Table: yyS[yypt-1].item.(*ast.TableName),
}
if yyS[yypt-0].item != nil {
stmt.Where = yyS[yypt-0].item.(ast.ExprNode)
}
parser.yyVAL.statement = stmt
}
case 2131:
{
stmt := &ast.ShowStmt{
Tp: ast.ShowRegions,
Table: yyS[yypt-3].item.(*ast.TableName),
}
stmt.Table.PartitionNames = yyS[yypt-2].item.([]ast.CIStr)
if yyS[yypt-0].item != nil {
stmt.Where = yyS[yypt-0].item.(ast.ExprNode)
}
parser.yyVAL.statement = stmt
}
case 2132:
{
parser.yyVAL.statement = &ast.ShowStmt{
Tp: ast.ShowTableNextRowId,
Table: yyS[yypt-1].item.(*ast.TableName),
}
}
case 2133:
{
stmt := &ast.ShowStmt{
Tp: ast.ShowRegions,
Table: yyS[yypt-5].item.(*ast.TableName),
IndexName: ast.NewCIStr(yyS[yypt-2].ident),
}
stmt.Table.PartitionNames = yyS[yypt-4].item.([]ast.CIStr)
if yyS[yypt-0].item != nil {
stmt.Where = yyS[yypt-0].item.(ast.ExprNode)
}
parser.yyVAL.statement = stmt
}
case 2134:
{
// See https://dev.mysql.com/doc/refman/5.7/en/show-grants.html
parser.yyVAL.statement = &ast.ShowStmt{Tp: ast.ShowGrants}
}
case 2135:
{
// See https://dev.mysql.com/doc/refman/5.7/en/show-grants.html
if yyS[yypt-0].item != nil {
parser.yyVAL.statement = &ast.ShowStmt{
Tp: ast.ShowGrants,
User: yyS[yypt-1].item.(*auth.UserIdentity),
Roles: yyS[yypt-0].item.([]*auth.RoleIdentity),
}
} else {
parser.yyVAL.statement = &ast.ShowStmt{
Tp: ast.ShowGrants,
User: yyS[yypt-1].item.(*auth.UserIdentity),
Roles: nil,
}
}
}
case 2136:
{
parser.yyVAL.statement = &ast.ShowStmt{
Tp: ast.ShowMasterStatus,
}
}
case 2137:
{
parser.yyVAL.statement = &ast.ShowStmt{
Tp: ast.ShowBinlogStatus,
}
}
case 2138:
{
parser.yyVAL.statement = &ast.ShowStmt{
Tp: ast.ShowReplicaStatus,
}
}
case 2139:
{
parser.yyVAL.statement = &ast.ShowStmt{
Tp: ast.ShowProcessList,
Full: yyS[yypt-1].item.(bool),
}
}
case 2140:
{
parser.yyVAL.statement = &ast.ShowStmt{
Tp: ast.ShowProfiles,
}
}
case 2141:
{
v := &ast.ShowStmt{
Tp: ast.ShowProfile,
}
if yyS[yypt-2].item != nil {
v.ShowProfileTypes = yyS[yypt-2].item.([]int)
}
if yyS[yypt-1].item != nil {
v.ShowProfileArgs = yyS[yypt-1].item.(*int64)
}
if yyS[yypt-0].item != nil {
v.ShowProfileLimit = yyS[yypt-0].item.(*ast.Limit)
}
parser.yyVAL.statement = v
}
case 2142:
{
parser.yyVAL.statement = &ast.ShowStmt{
Tp: ast.ShowPrivileges,
}
}
case 2143:
{
parser.yyVAL.statement = &ast.ShowStmt{
Tp: ast.ShowBuiltins,
}
}
case 2144:
{
parser.yyVAL.statement = yyS[yypt-0].item.(*ast.ShowStmt)
}
case 2145:
{
v := yyS[yypt-0].item.(int64)
parser.yyVAL.statement = &ast.ShowStmt{
Tp: ast.ShowImportJobs,
ImportJobID: &v,
ImportJobRaw: yyS[yypt-1].item.(bool),
}
}
case 2146:
{
v := yyS[yypt-0].item.(int64)
parser.yyVAL.statement = &ast.ShowStmt{Tp: ast.ShowDistributionJobs, DistributionJobID: &v}
}
case 2147:
{
parser.yyVAL.statement = &ast.ShowStmt{
Tp: ast.ShowCreateProcedure,
Procedure: yyS[yypt-0].item.(*ast.TableName),
}
}
case 2148:
{
stmt := &ast.ShowStmt{
Tp: ast.ShowDistributions,
Table: yyS[yypt-3].item.(*ast.TableName),
}
stmt.Table.PartitionNames = yyS[yypt-2].item.([]ast.CIStr)
if yyS[yypt-0].item != nil {
stmt.Where = yyS[yypt-0].item.(ast.ExprNode)
}
parser.yyVAL.statement = stmt
}
case 2149:
{
parser.yyVAL.item = &ast.ShowStmt{
Tp: ast.ShowPlacementForDatabase,
DBName: yyS[yypt-0].ident,
}
}
case 2150:
{
parser.yyVAL.item = &ast.ShowStmt{
Tp: ast.ShowPlacementForTable,
Table: yyS[yypt-0].item.(*ast.TableName),
}
}
case 2151:
{
parser.yyVAL.item = &ast.ShowStmt{
Tp: ast.ShowPlacementForPartition,
Table: yyS[yypt-2].item.(*ast.TableName),
Partition: ast.NewCIStr(yyS[yypt-0].ident),
}
}
case 2152:
{
parser.yyVAL.item = nil
}
case 2154:
{
parser.yyVAL.item = []int{yyS[yypt-0].item.(int)}
}
case 2155:
{
l := yyS[yypt-2].item.([]int)
l = append(l, yyS[yypt-0].item.(int))
parser.yyVAL.item = l
}
case 2156:
{
parser.yyVAL.item = ast.ProfileTypeCPU
}
case 2157:
{
parser.yyVAL.item = ast.ProfileTypeMemory
}
case 2158:
{
parser.yyVAL.item = ast.ProfileTypeBlockIo
}
case 2159:
{
parser.yyVAL.item = ast.ProfileTypeContextSwitch
}
case 2160:
{
parser.yyVAL.item = ast.ProfileTypePageFaults
}
case 2161:
{
parser.yyVAL.item = ast.ProfileTypeIpc
}
case 2162:
{
parser.yyVAL.item = ast.ProfileTypeSwaps
}
case 2163:
{
parser.yyVAL.item = ast.ProfileTypeSource
}
case 2164:
{
parser.yyVAL.item = ast.ProfileTypeAll
}
case 2165:
{
parser.yyVAL.item = nil
}
case 2166:
{
v := yyS[yypt-0].item.(int64)
parser.yyVAL.item = &v
}
case 2167:
{
parser.yyVAL.item = nil
}
case 2168:
{
parser.yyVAL.item = yyS[yypt-0].item.([]*auth.RoleIdentity)
}
case 2174:
{
parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowEngines}
}
case 2175:
{
parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowDatabases}
}
case 2176:
{
parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowConfig}
}
case 2177:
{
parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowCharset}
}
case 2178:
{
parser.yyVAL.item = &ast.ShowStmt{
Tp: ast.ShowTables,
DBName: yyS[yypt-0].ident,
Full: yyS[yypt-2].item.(bool),
}
}
case 2179:
{
parser.yyVAL.item = &ast.ShowStmt{
Tp: ast.ShowOpenTables,
DBName: yyS[yypt-0].ident,
}
}
case 2180:
{
parser.yyVAL.item = &ast.ShowStmt{
Tp: ast.ShowTableStatus,
DBName: yyS[yypt-0].ident,
}
}
case 2181:
{
parser.yyVAL.item = &ast.ShowStmt{
Tp: ast.ShowIndex,
Table: yyS[yypt-0].item.(*ast.TableName),
}
}
case 2182:
{
show := &ast.ShowStmt{
Tp: ast.ShowIndex,
Table: &ast.TableName{Name: ast.NewCIStr(yyS[yypt-2].ident), Schema: ast.NewCIStr(yyS[yypt-0].ident)},
}
parser.yyVAL.item = show
}
case 2183:
{
parser.yyVAL.item = &ast.ShowStmt{
Tp: ast.ShowColumns,
Table: yyS[yypt-1].item.(*ast.TableName),
DBName: yyS[yypt-0].ident,
Full: yyS[yypt-3].item.(bool),
}
}
case 2184:
{
parser.yyVAL.item = &ast.ShowStmt{
Tp: ast.ShowColumns,
Table: yyS[yypt-1].item.(*ast.TableName),
DBName: yyS[yypt-0].ident,
Full: yyS[yypt-3].item.(bool),
Extended: true,
}
}
case 2185:
{
parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowWarnings, CountWarningsOrErrors: true}
}
case 2186:
{
parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowWarnings}
}
case 2187:
{
parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowErrors, CountWarningsOrErrors: true}
}
case 2188:
{
parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowErrors}
}
case 2189:
{
parser.yyVAL.item = &ast.ShowStmt{
Tp: ast.ShowVariables,
GlobalScope: yyS[yypt-1].item.(bool),
}
}
case 2190:
{
parser.yyVAL.item = &ast.ShowStmt{
Tp: ast.ShowStatus,
GlobalScope: yyS[yypt-1].item.(bool),
}
}
case 2191:
{
parser.yyVAL.item = &ast.ShowStmt{
Tp: ast.ShowBindings,
GlobalScope: yyS[yypt-1].item.(bool),
}
}
case 2192:
{
parser.yyVAL.item = &ast.ShowStmt{
Tp: ast.ShowCollation,
}
}
case 2193:
{
parser.yyVAL.item = &ast.ShowStmt{
Tp: ast.ShowTriggers,
DBName: yyS[yypt-0].ident,
}
}
case 2194:
{
parser.yyVAL.item = &ast.ShowStmt{
Tp: ast.ShowBindingCacheStatus,
}
}
case 2195:
{
parser.yyVAL.item = &ast.ShowStmt{
Tp: ast.ShowProcedureStatus,
}
}
case 2196:
{
// This statement is similar to SHOW PROCEDURE STATUS but for stored functions.
// See http://dev.mysql.com/doc/refman/5.7/en/show-function-status.html
// We do not support neither stored functions nor stored procedures.
// So we reuse show procedure status process logic.
parser.yyVAL.item = &ast.ShowStmt{
Tp: ast.ShowFunctionStatus,
}
}
case 2197:
{
parser.yyVAL.item = &ast.ShowStmt{
Tp: ast.ShowEvents,
DBName: yyS[yypt-0].ident,
}
}
case 2198:
{
parser.yyVAL.item = &ast.ShowStmt{
Tp: ast.ShowPlugins,
}
}
case 2199:
{
parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowSessionStates}
}
case 2200:
{
parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowStatsExtended}
}
case 2201:
{
parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowStatsMeta, Table: &ast.TableName{Name: ast.NewCIStr("STATS_META"), Schema: ast.NewCIStr(mysql.SystemDB)}}
}
case 2202:
{
parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowStatsHistograms, Table: &ast.TableName{Name: ast.NewCIStr("STATS_HISTOGRAMS"), Schema: ast.NewCIStr(mysql.SystemDB)}}
}
case 2203:
{
parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowStatsTopN}
}
case 2204:
{
parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowStatsBuckets, Table: &ast.TableName{Name: ast.NewCIStr("STATS_BUCKETS"), Schema: ast.NewCIStr(mysql.SystemDB)}}
}
case 2205:
{
parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowStatsHealthy}
}
case 2206:
{
parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowStatsLocked, Table: &ast.TableName{Name: ast.NewCIStr("STATS_TABLE_LOCKED"), Schema: ast.NewCIStr(mysql.SystemDB)}}
}
case 2207:
{
parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowHistogramsInFlight}
}
case 2208:
{
parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowColumnStatsUsage}
}
case 2209:
{
parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowAffinity}
}
case 2210:
{
parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowAnalyzeStatus}
}
case 2211:
{
parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowBackups}
}
case 2212:
{
parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowRestores}
}
case 2213:
{
parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowPlacement}
}
case 2214:
{
parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowPlacementLabels}
}
case 2215:
{
parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowImportGroups}
}
case 2216:
{
parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowImportGroups, ShowGroupKey: yyS[yypt-0].ident}
}
case 2217:
{
parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowImportJobs, ImportJobRaw: yyS[yypt-0].item.(bool)}
}
case 2218:
{
parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowDistributionJobs}
}
case 2219:
{
parser.yyVAL.item = nil
}
case 2220:
{
parser.yyVAL.item = &ast.PatternLikeOrIlikeExpr{
Pattern: yyS[yypt-0].expr,
Escape: '\\',
EscapeExplicit: false,
IsLike: true,
}
}
case 2221:
{
parser.yyVAL.item = yyS[yypt-0].expr
}
case 2222:
{
parser.yyVAL.item = false
}
case 2223:
{
parser.yyVAL.item = true
}
case 2224:
{
parser.yyVAL.item = false
}
case 2225:
{
parser.yyVAL.item = true
}
case 2226:
{
parser.yyVAL.item = false
}
case 2227:
{
parser.yyVAL.item = true
}
case 2228:
{
parser.yyVAL.item = false
}
case 2229:
{
parser.yyVAL.item = ast.StatementScopeSession
}
case 2230:
{
parser.yyVAL.item = ast.StatementScopeGlobal
}
case 2231:
{
parser.yyVAL.item = ast.StatementScopeInstance
}
case 2232:
{
parser.yyVAL.item = ast.StatementScopeSession
}
case 2233:
{
parser.yyVAL.item = false
}
case 2234:
{
parser.yyVAL.item = true
}
case 2235:
{
parser.yyVAL.ident = ""
}
case 2236:
{
parser.yyVAL.ident = yyS[yypt-0].ident
}
case 2237:
{
parser.yyVAL.item = yyS[yypt-0].item.(*ast.TableName)
}
case 2240:
{
tmp := yyS[yypt-0].item.(*ast.FlushStmt)
tmp.NoWriteToBinLog = yyS[yypt-1].item.(bool)
parser.yyVAL.statement = tmp
}
case 2241:
{
parser.yyVAL.item = []string{yyS[yypt-0].ident}
}
case 2242:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]string), yyS[yypt-0].ident)
}
case 2243:
{
parser.yyVAL.item = &ast.FlushStmt{
Tp: ast.FlushPrivileges,
}
}
case 2244:
{
parser.yyVAL.item = &ast.FlushStmt{
Tp: ast.FlushStatus,
}
}
case 2245:
{
parser.yyVAL.item = &ast.FlushStmt{
Tp: ast.FlushTiDBPlugin,
Plugins: yyS[yypt-0].item.([]string),
}
}
case 2246:
{
parser.yyVAL.item = &ast.FlushStmt{
Tp: ast.FlushHosts,
}
}
case 2247:
{
parser.yyVAL.item = &ast.FlushStmt{
Tp: ast.FlushLogs,
LogType: yyS[yypt-1].item.(ast.LogType),
}
}
case 2248:
{
parser.yyVAL.item = &ast.FlushStmt{
Tp: ast.FlushTables,
Tables: yyS[yypt-1].item.([]*ast.TableName),
ReadLock: yyS[yypt-0].item.(bool),
}
}
case 2249:
{
parser.yyVAL.item = &ast.FlushStmt{
Tp: ast.FlushClientErrorsSummary,
}
}
case 2250:
{
parser.yyVAL.item = &ast.FlushStmt{
Tp: ast.FlushStatsDelta,
FlushObjects: yyS[yypt-1].item.([]*ast.StatsObject),
IsCluster: yyS[yypt-0].item.(bool),
}
}
case 2251:
{
parser.yyVAL.item = ast.LogTypeDefault
}
case 2252:
{
parser.yyVAL.item = ast.LogTypeBinary
}
case 2253:
{
parser.yyVAL.item = ast.LogTypeEngine
}
case 2254:
{
parser.yyVAL.item = ast.LogTypeError
}
case 2255:
{
parser.yyVAL.item = ast.LogTypeGeneral
}
case 2256:
{
parser.yyVAL.item = ast.LogTypeSlow
}
case 2257:
{
parser.yyVAL.item = false
}
case 2258:
{
parser.yyVAL.item = true
}
case 2259:
{
parser.yyVAL.item = false
}
case 2260:
{
parser.yyVAL.item = true
}
case 2261:
{
parser.yyVAL.item = true
}
case 2262:
{
parser.yyVAL.item = []*ast.TableName{}
}
case 2264:
{
parser.yyVAL.item = false
}
case 2265:
{
parser.yyVAL.item = true
}
case 2347:
{
var sel ast.StmtNode
switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) {
case *ast.SelectStmt:
x.IsInBraces = true
sel = x
case *ast.SetOprStmt:
x.IsInBraces = true
sel = x
}
parser.yyVAL.statement = sel
}
case 2375:
{
var sel ast.StmtNode
switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) {
case *ast.SelectStmt:
x.IsInBraces = true
sel = x
case *ast.SetOprStmt:
x.IsInBraces = true
sel = x
}
parser.yyVAL.statement = sel
}
case 2391:
{
var sel ast.StmtNode
switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) {
case *ast.SelectStmt:
x.IsInBraces = true
sel = x
case *ast.SetOprStmt:
x.IsInBraces = true
sel = x
}
parser.yyVAL.statement = sel
}
case 2394:
{
if yyS[yypt-0].statement != nil {
s := yyS[yypt-0].statement
if lexer, ok := yylex.(stmtTexter); ok {
parser.setNodeText(s, lexer.stmtText())
}
parser.result = append(parser.result, s)
}
}
case 2395:
{
if yyS[yypt-0].statement != nil {
s := yyS[yypt-0].statement
if lexer, ok := yylex.(stmtTexter); ok {
parser.setNodeText(s, lexer.stmtText())
}
parser.result = append(parser.result, s)
}
}
case 2396:
{
cst := yyS[yypt-0].item.(*ast.Constraint)
if yyS[yypt-1].item != nil {
cst.Name = yyS[yypt-1].item.(string)
cst.IsEmptyIndex = len(cst.Name) == 0
}
parser.yyVAL.item = cst
}
case 2397:
{
c := &ast.Constraint{
IfNotExists: yyS[yypt-5].item.(bool),
Tp: ast.ConstraintVector,
Keys: yyS[yypt-2].item.([]*ast.IndexPartSpecification),
Name: yyS[yypt-4].item.([]interface{})[0].(*ast.NullString).String,
IsEmptyIndex: yyS[yypt-4].item.([]interface{})[0].(*ast.NullString).Empty,
}
if yyS[yypt-0].item != nil {
c.Option = yyS[yypt-0].item.(*ast.IndexOption)
} else {
c.Option = &ast.IndexOption{}
}
if indexType := yyS[yypt-4].item.([]interface{})[1]; indexType != nil {
c.Option.Tp = indexType.(ast.IndexType)
}
parser.yyVAL.item = c
}
case 2398:
{
c := &ast.Constraint{
IfNotExists: yyS[yypt-5].item.(bool),
Tp: ast.ConstraintColumnar,
Keys: yyS[yypt-2].item.([]*ast.IndexPartSpecification),
Name: yyS[yypt-4].item.([]interface{})[0].(*ast.NullString).String,
IsEmptyIndex: yyS[yypt-4].item.([]interface{})[0].(*ast.NullString).Empty,
}
if yyS[yypt-0].item != nil {
c.Option = yyS[yypt-0].item.(*ast.IndexOption)
} else {
c.Option = &ast.IndexOption{}
}
if indexType := yyS[yypt-4].item.([]interface{})[1]; indexType != nil {
c.Option.Tp = indexType.(ast.IndexType)
}
parser.yyVAL.item = c
}
case 2401:
{
parser.yyVAL.item = yyS[yypt-0].item.(*ast.Constraint)
}
case 2406:
{
if yyS[yypt-0].item != nil {
parser.yyVAL.item = []interface{}{yyS[yypt-0].item.(interface{})}
} else {
parser.yyVAL.item = []interface{}{}
}
}
case 2407:
{
if yyS[yypt-0].item != nil {
parser.yyVAL.item = append(yyS[yypt-2].item.([]interface{}), yyS[yypt-0].item)
} else {
parser.yyVAL.item = yyS[yypt-2].item
}
}
case 2408:
{
var columnDefs []*ast.ColumnDef
var constraints []*ast.Constraint
parser.yyVAL.item = &ast.CreateTableStmt{
Cols: columnDefs,
Constraints: constraints,
}
}
case 2409:
{
tes := yyS[yypt-1].item.([]interface{})
var columnDefs []*ast.ColumnDef
var constraints []*ast.Constraint
for _, te := range tes {
switch te := te.(type) {
case *ast.ColumnDef:
columnDefs = append(columnDefs, te)
case *ast.Constraint:
constraints = append(constraints, te)
}
}
parser.yyVAL.item = &ast.CreateTableStmt{
Cols: columnDefs,
Constraints: constraints,
}
}
case 2411:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionCharset, StrValue: yyS[yypt-0].ident,
UintValue: ast.TableOptionCharsetWithoutConvertTo}
}
case 2412:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionCollate, StrValue: yyS[yypt-0].ident,
UintValue: ast.TableOptionCharsetWithoutConvertTo}
}
case 2413:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionAutoIncrement, UintValue: yyS[yypt-0].item.(uint64), BoolValue: yyS[yypt-3].item.(bool)}
}
case 2414:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionAutoIdCache, UintValue: yyS[yypt-0].item.(uint64)}
}
case 2415:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionAutoRandomBase, UintValue: yyS[yypt-0].item.(uint64), BoolValue: yyS[yypt-3].item.(bool)}
}
case 2416:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionAvgRowLength, UintValue: yyS[yypt-0].item.(uint64)}
}
case 2417:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionConnection, StrValue: yyS[yypt-0].ident}
}
case 2418:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionCheckSum, UintValue: yyS[yypt-0].item.(uint64)}
}
case 2419:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionTableCheckSum, UintValue: yyS[yypt-0].item.(uint64)}
}
case 2420:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionPassword, StrValue: yyS[yypt-0].ident}
yylex.AppendError(yylex.Errorf("The PASSWORD option is parsed but ignored by all storage engines."))
parser.lastErrorAsWarn()
}
case 2421:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionCompression, StrValue: yyS[yypt-0].ident}
}
case 2422:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionKeyBlockSize, UintValue: yyS[yypt-0].item.(uint64)}
}
case 2423:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionDelayKeyWrite, UintValue: yyS[yypt-0].item.(uint64)}
}
case 2424:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionRowFormat, UintValue: yyS[yypt-0].item.(uint64)}
}
case 2425:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionStatsPersistent}
}
case 2426:
{
n := yyS[yypt-0].item.(uint64)
if n != 0 && n != 1 {
yylex.AppendError(yylex.Errorf("The value of STATS_AUTO_RECALC must be one of [0|1|DEFAULT]."))
return 1
}
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionStatsAutoRecalc, UintValue: n}
yylex.AppendError(yylex.Errorf("The STATS_AUTO_RECALC is parsed but ignored by all storage engines."))
parser.lastErrorAsWarn()
}
case 2427:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionStatsAutoRecalc, Default: true}
yylex.AppendError(yylex.Errorf("The STATS_AUTO_RECALC is parsed but ignored by all storage engines."))
parser.lastErrorAsWarn()
}
case 2428:
{
// Parse it but will ignore it.
// In MySQL, STATS_SAMPLE_PAGES=N(Where 0<N<=65535) or STAS_SAMPLE_PAGES=DEFAULT.
// Cause we don't support it, so we don't check range of the value.
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionStatsSamplePages, UintValue: yyS[yypt-0].item.(uint64)}
yylex.AppendError(yylex.Errorf("The STATS_SAMPLE_PAGES is parsed but ignored by all storage engines."))
parser.lastErrorAsWarn()
}
case 2429:
{
// Parse it but will ignore it.
// In MySQL, default value of STATS_SAMPLE_PAGES is 0.
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionStatsSamplePages, Default: true}
yylex.AppendError(yylex.Errorf("The STATS_SAMPLE_PAGES is parsed but ignored by all storage engines."))
parser.lastErrorAsWarn()
}
case 2430:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionStatsBuckets, UintValue: yyS[yypt-0].item.(uint64)}
}
case 2431:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionStatsTopN, UintValue: yyS[yypt-0].item.(uint64)}
}
case 2432:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionStatsSampleRate, Value: ast.NewValueExpr(yyS[yypt-0].item, "", "")}
}
case 2433:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionStatsColsChoice, StrValue: yyS[yypt-0].ident}
}
case 2434:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionStatsColList, StrValue: yyS[yypt-0].ident}
}
case 2435:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionShardRowID, UintValue: yyS[yypt-0].item.(uint64)}
}
case 2436:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionPreSplitRegion, UintValue: yyS[yypt-0].item.(uint64)}
}
case 2437:
{
// Parse it but will ignore it.
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionPackKeys}
}
case 2438:
{
// Parse it but will ignore it.
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionStorageMedia, StrValue: "MEMORY"}
yylex.AppendError(yylex.Errorf("The STORAGE clause is parsed but ignored by all storage engines."))
parser.lastErrorAsWarn()
}
case 2439:
{
// Parse it but will ignore it.
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionStorageMedia, StrValue: "DISK"}
yylex.AppendError(yylex.Errorf("The STORAGE clause is parsed but ignored by all storage engines."))
parser.lastErrorAsWarn()
}
case 2440:
{
// Parse it but will ignore it
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionSecondaryEngineNull}
yylex.AppendError(yylex.Errorf("The SECONDARY_ENGINE clause is parsed but ignored by all storage engines."))
parser.lastErrorAsWarn()
}
case 2441:
{
// Parse it but will ignore it
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionSecondaryEngine, StrValue: yyS[yypt-0].ident}
yylex.AppendError(yylex.Errorf("The SECONDARY_ENGINE clause is parsed but ignored by all storage engines."))
parser.lastErrorAsWarn()
}
case 2442:
{
// Parse it but will ignore it
parser.yyVAL.item = &ast.TableOption{
Tp: ast.TableOptionUnion,
TableNames: yyS[yypt-1].item.([]*ast.TableName),
}
yylex.AppendError(yylex.Errorf("The UNION option is parsed but ignored by all storage engines."))
parser.lastErrorAsWarn()
}
case 2443:
{
// Parse it but will ignore it
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionEncryption, StrValue: yyS[yypt-0].ident}
yylex.AppendError(yylex.Errorf("The ENCRYPTION option is parsed but ignored by all storage engines."))
parser.lastErrorAsWarn()
}
case 2444:
{
parser.yyVAL.item = &ast.TableOption{
Tp: ast.TableOptionTTL,
ColumnName: &ast.ColumnName{Name: ast.NewCIStr(yyS[yypt-4].ident)},
Value: ast.NewValueExpr(yyS[yypt-1].expr, parser.charset, parser.collation),
TimeUnitValue: &ast.TimeUnitExpr{Unit: yyS[yypt-0].item.(ast.TimeUnitType)},
}
}
case 2445:
{
onOrOff := strings.ToLower(yyS[yypt-0].ident)
if onOrOff == "on" {
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionTTLEnable, BoolValue: true}
} else if onOrOff == "off" {
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionTTLEnable, BoolValue: false}
} else {
yylex.AppendError(yylex.Errorf("The TTL_ENABLE option has to be set 'ON' or 'OFF'"))
return 1
}
}
case 2446:
{
_, err := duration.ParseDuration(yyS[yypt-0].ident)
if err != nil {
yylex.AppendError(yylex.Errorf("The TTL_JOB_INTERVAL option is not a valid duration: %s", err.Error()))
return 1
}
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionTTLJobInterval, StrValue: yyS[yypt-0].ident}
}
case 2447:
{
// Parse it but will ignore it
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionAutoextendSize, StrValue: yyS[yypt-0].ident}
yylex.AppendError(yylex.Errorf("The AUTOEXTEND_SIZE option is parsed but ignored by all storage engines."))
parser.lastErrorAsWarn()
}
case 2448:
{
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionAffinity, StrValue: yyS[yypt-0].ident}
}
case 2449:
{
// Parse it but will ignore it
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionPageChecksum, UintValue: yyS[yypt-0].item.(uint64)}
yylex.AppendError(yylex.Errorf("The PAGE_CHECKSUM option is parsed but ignored by all storage engines."))
parser.lastErrorAsWarn()
}
case 2450:
{
// Parse it but will ignore it
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionPageCompressed, UintValue: yyS[yypt-0].item.(uint64)}
yylex.AppendError(yylex.Errorf("The PAGE_COMPRESSED option is parsed but ignored by all storage engines."))
parser.lastErrorAsWarn()
}
case 2451:
{
// Parse it but will ignore it
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionPageCompressionLevel, UintValue: yyS[yypt-0].item.(uint64)}
yylex.AppendError(yylex.Errorf("The PAGE_COMPRESSION_LEVEL option is parsed but ignored by all storage engines."))
parser.lastErrorAsWarn()
}
case 2452:
{
// Parse it but will ignore it
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionTransactional, UintValue: yyS[yypt-0].item.(uint64)}
yylex.AppendError(yylex.Errorf("The TRANSACTIONAL option is parsed but ignored by all storage engines."))
parser.lastErrorAsWarn()
}
case 2453:
{
// Parse it but will ignore it
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionSequence, UintValue: yyS[yypt-0].item.(uint64)}
yylex.AppendError(yylex.Errorf("The SEQUENCE option is parsed but ignored by all storage engines. Use CREATE SEQUENCE instead."))
parser.lastErrorAsWarn()
}
case 2454:
{
// Parse it but will ignore it
parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionIetfQuotes, StrValue: yyS[yypt-0].ident}
yylex.AppendError(yylex.Errorf("The IETF_QUOTES option is parsed but ignored by all storage engines."))
parser.lastErrorAsWarn()
}
case 2455:
{
parser.yyVAL.item = false
}
case 2456:
{
parser.yyVAL.item = true
}
case 2459:
{
parser.yyVAL.item = []*ast.TableOption{}
}
case 2461:
{
parser.yyVAL.item = []*ast.TableOption{yyS[yypt-0].item.(*ast.TableOption)}
}
case 2462:
{
parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.TableOption), yyS[yypt-0].item.(*ast.TableOption))
}
case 2463:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.TableOption), yyS[yypt-0].item.(*ast.TableOption))
}
case 2466:
{
parser.yyVAL.statement = &ast.TruncateTableStmt{Table: yyS[yypt-0].item.(*ast.TableName)}
}
case 2467:
{
parser.yyVAL.item = ast.RowFormatDefault
}
case 2468:
{
parser.yyVAL.item = ast.RowFormatDynamic
}
case 2469:
{
parser.yyVAL.item = ast.RowFormatFixed
}
case 2470:
{
parser.yyVAL.item = ast.RowFormatCompressed
}
case 2471:
{
parser.yyVAL.item = ast.RowFormatRedundant
}
case 2472:
{
parser.yyVAL.item = ast.RowFormatCompact
}
case 2473:
{
parser.yyVAL.item = ast.TokuDBRowFormatDefault
}
case 2474:
{
parser.yyVAL.item = ast.TokuDBRowFormatFast
}
case 2475:
{
parser.yyVAL.item = ast.TokuDBRowFormatSmall
}
case 2476:
{
parser.yyVAL.item = ast.TokuDBRowFormatZlib
}
case 2477:
{
parser.yyVAL.item = ast.TokuDBRowFormatZstd
}
case 2478:
{
parser.yyVAL.item = ast.TokuDBRowFormatQuickLZ
}
case 2479:
{
parser.yyVAL.item = ast.TokuDBRowFormatLzma
}
case 2480:
{
parser.yyVAL.item = ast.TokuDBRowFormatSnappy
}
case 2481:
{
parser.yyVAL.item = ast.TokuDBRowFormatUncompressed
}
case 2485:
{
// TODO: check flen 0
tp := types.NewFieldType(yyS[yypt-2].item.(byte))
tp.SetFlen(yyS[yypt-1].item.(int))
for _, o := range yyS[yypt-0].item.([]*ast.TypeOpt) {
if o.IsUnsigned {
tp.AddFlag(mysql.UnsignedFlag)
}
if o.IsZerofill {
tp.AddFlag(mysql.ZerofillFlag)
}
}
parser.yyVAL.item = tp
}
case 2486:
{
// TODO: check flen 0
tp := types.NewFieldType(yyS[yypt-1].item.(byte))
tp.SetFlen(1)
for _, o := range yyS[yypt-0].item.([]*ast.TypeOpt) {
if o.IsUnsigned {
tp.AddFlag(mysql.UnsignedFlag)
}
if o.IsZerofill {
tp.AddFlag(mysql.ZerofillFlag)
}
}
parser.yyVAL.item = tp
}
case 2487:
{
fopt := yyS[yypt-1].item.(*ast.FloatOpt)
tp := types.NewFieldType(yyS[yypt-2].item.(byte))
tp.SetFlen(fopt.Flen)
tp.SetDecimal(fopt.Decimal)
for _, o := range yyS[yypt-0].item.([]*ast.TypeOpt) {
if o.IsUnsigned {
tp.AddFlag(mysql.UnsignedFlag)
}
if o.IsZerofill {
tp.AddFlag(mysql.ZerofillFlag)
}
}
parser.yyVAL.item = tp
}
case 2488:
{
fopt := yyS[yypt-1].item.(*ast.FloatOpt)
tp := types.NewFieldType(yyS[yypt-2].item.(byte))
// check for a double(10) for syntax error
if tp.GetType() == mysql.TypeDouble && parser.strictDoubleFieldType {
if fopt.Flen != types.UnspecifiedLength && fopt.Decimal == types.UnspecifiedLength {
yylex.AppendError(ErrSyntax)
return 1
}
}
tp.SetFlen(fopt.Flen)
if tp.GetType() == mysql.TypeFloat && fopt.Decimal == types.UnspecifiedLength && tp.GetFlen() <= mysql.MaxDoublePrecisionLength {
if tp.GetFlen() > mysql.MaxFloatPrecisionLength {
tp.SetType(mysql.TypeDouble)
}
tp.SetFlen(types.UnspecifiedLength)
}
tp.SetDecimal(fopt.Decimal)
for _, o := range yyS[yypt-0].item.([]*ast.TypeOpt) {
if o.IsUnsigned {
tp.AddFlag(mysql.UnsignedFlag)
}
if o.IsZerofill {
tp.AddFlag(mysql.ZerofillFlag)
}
}
parser.yyVAL.item = tp
}
case 2489:
{
tp := types.NewFieldType(yyS[yypt-1].item.(byte))
tp.SetFlen(yyS[yypt-0].item.(int))
if tp.GetFlen() == types.UnspecifiedLength {
tp.SetFlen(1)
}
parser.yyVAL.item = tp
}
case 2490:
{
parser.yyVAL.item = mysql.TypeTiny
}
case 2491:
{
parser.yyVAL.item = mysql.TypeShort
}
case 2492:
{
parser.yyVAL.item = mysql.TypeInt24
}
case 2493:
{
parser.yyVAL.item = mysql.TypeInt24
}
case 2494:
{
parser.yyVAL.item = mysql.TypeLong
}
case 2495:
{
parser.yyVAL.item = mysql.TypeTiny
}
case 2496:
{
parser.yyVAL.item = mysql.TypeShort
}
case 2497:
{
parser.yyVAL.item = mysql.TypeInt24
}
case 2498:
{
parser.yyVAL.item = mysql.TypeLong
}
case 2499:
{
parser.yyVAL.item = mysql.TypeLonglong
}
case 2500:
{
parser.yyVAL.item = mysql.TypeLong
}
case 2501:
{
parser.yyVAL.item = mysql.TypeLonglong
}
case 2502:
{
parser.yyVAL.item = mysql.TypeTiny
}
case 2503:
{
parser.yyVAL.item = mysql.TypeTiny
}
case 2507:
{
parser.yyVAL.item = mysql.TypeNewDecimal
}
case 2508:
{
parser.yyVAL.item = mysql.TypeNewDecimal
}
case 2509:
{
parser.yyVAL.item = mysql.TypeNewDecimal
}
case 2510:
{
parser.yyVAL.item = mysql.TypeFloat
}
case 2511:
{
if parser.lexer.GetSQLMode().HasRealAsFloatMode() {
parser.yyVAL.item = mysql.TypeFloat
} else {
parser.yyVAL.item = mysql.TypeDouble
}
}
case 2512:
{
parser.yyVAL.item = mysql.TypeDouble
}
case 2513:
{
parser.yyVAL.item = mysql.TypeDouble
}
case 2514:
{
parser.yyVAL.item = mysql.TypeFloat
}
case 2515:
{
parser.yyVAL.item = mysql.TypeDouble
}
case 2516:
{
parser.yyVAL.item = mysql.TypeBit
}
case 2517:
{
tp := types.NewFieldType(mysql.TypeString)
tp.SetFlen(yyS[yypt-1].item.(int))
tp.SetCharset(yyS[yypt-0].item.(*ast.OptBinary).Charset)
if yyS[yypt-0].item.(*ast.OptBinary).IsBinary {
tp.AddFlag(mysql.BinaryFlag)
}
parser.yyVAL.item = tp
}
case 2518:
{
tp := types.NewFieldType(mysql.TypeString)
tp.SetCharset(yyS[yypt-0].item.(*ast.OptBinary).Charset)
if yyS[yypt-0].item.(*ast.OptBinary).IsBinary {
tp.AddFlag(mysql.BinaryFlag)
}
parser.yyVAL.item = tp
}
case 2519:
{
tp := types.NewFieldType(mysql.TypeString)
tp.SetFlen(yyS[yypt-1].item.(int))
tp.SetCharset(yyS[yypt-0].item.(*ast.OptBinary).Charset)
if yyS[yypt-0].item.(*ast.OptBinary).IsBinary {
tp.AddFlag(mysql.BinaryFlag)
}
parser.yyVAL.item = tp
}
case 2520:
{
tp := types.NewFieldType(mysql.TypeString)
tp.SetCharset(yyS[yypt-0].item.(*ast.OptBinary).Charset)
if yyS[yypt-0].item.(*ast.OptBinary).IsBinary {
tp.AddFlag(mysql.BinaryFlag)
}
parser.yyVAL.item = tp
}
case 2521:
{
tp := types.NewFieldType(mysql.TypeVarchar)
tp.SetFlen(yyS[yypt-1].item.(int))
tp.SetCharset(yyS[yypt-0].item.(*ast.OptBinary).Charset)
if yyS[yypt-0].item.(*ast.OptBinary).IsBinary {
tp.AddFlag(mysql.BinaryFlag)
}
parser.yyVAL.item = tp
}
case 2522:
{
tp := types.NewFieldType(mysql.TypeVarchar)
tp.SetFlen(yyS[yypt-1].item.(int))
tp.SetCharset(yyS[yypt-0].item.(*ast.OptBinary).Charset)
if yyS[yypt-0].item.(*ast.OptBinary).IsBinary {
tp.AddFlag(mysql.BinaryFlag)
}
parser.yyVAL.item = tp
}
case 2523:
{
tp := types.NewFieldType(mysql.TypeString)
tp.SetFlen(yyS[yypt-0].item.(int))
tp.SetCharset(charset.CharsetBin)
tp.SetCollate(charset.CharsetBin)
tp.AddFlag(mysql.BinaryFlag)
parser.yyVAL.item = tp
}
case 2524:
{
tp := types.NewFieldType(mysql.TypeVarchar)
tp.SetFlen(yyS[yypt-0].item.(int))
tp.SetCharset(charset.CharsetBin)
tp.SetCollate(charset.CharsetBin)
tp.AddFlag(mysql.BinaryFlag)
parser.yyVAL.item = tp
}
case 2525:
{
tp := yyS[yypt-0].item.(*types.FieldType)
tp.SetCharset(charset.CharsetBin)
tp.SetCollate(charset.CharsetBin)
tp.AddFlag(mysql.BinaryFlag)
parser.yyVAL.item = tp
}
case 2526:
{
tp := yyS[yypt-1].item.(*types.FieldType)
tp.SetCharset(yyS[yypt-0].item.(*ast.OptBinary).Charset)
if yyS[yypt-0].item.(*ast.OptBinary).Charset == charset.CharsetBin {
tp.AddFlag(mysql.BinaryFlag)
tp.SetCollate(charset.CollationBin)
}
if yyS[yypt-0].item.(*ast.OptBinary).IsBinary {
tp.AddFlag(mysql.BinaryFlag)
}
parser.yyVAL.item = tp
}
case 2527:
{
tp := types.NewFieldType(mysql.TypeEnum)
elems := yyS[yypt-2].item.([]*ast.TextString)
opt := yyS[yypt-0].item.(*ast.OptBinary)
tp.SetElems(make([]string, len(elems)))
fieldLen := -1 // enum_flen = max(ele_flen)
for i, e := range elems {
trimmed := strings.TrimRight(e.Value, " ")
tp.SetElemWithIsBinaryLit(i, trimmed, e.IsBinaryLiteral)
if len(trimmed) > fieldLen {
fieldLen = len(trimmed)
}
}
tp.SetFlen(fieldLen)
tp.SetCharset(opt.Charset)
if opt.IsBinary {
tp.AddFlag(mysql.BinaryFlag)
}
parser.yyVAL.item = tp
}
case 2528:
{
tp := types.NewFieldType(mysql.TypeSet)
elems := yyS[yypt-2].item.([]*ast.TextString)
opt := yyS[yypt-0].item.(*ast.OptBinary)
tp.SetElems(make([]string, len(elems)))
fieldLen := len(elems) - 1 // set_flen = sum(ele_flen) + number_of_ele - 1
for i, e := range elems {
trimmed := strings.TrimRight(e.Value, " ")
tp.SetElemWithIsBinaryLit(i, trimmed, e.IsBinaryLiteral)
fieldLen += len(trimmed)
}
tp.SetFlen(fieldLen)
tp.SetCharset(opt.Charset)
if opt.IsBinary {
tp.AddFlag(mysql.BinaryFlag)
}
parser.yyVAL.item = tp
}
case 2529:
{
tp := types.NewFieldType(mysql.TypeJSON)
tp.SetDecimal(0)
tp.SetCharset(charset.CharsetBin)
tp.SetCollate(charset.CollationBin)
parser.yyVAL.item = tp
}
case 2530:
{
tp := types.NewFieldType(mysql.TypeMediumBlob)
tp.SetCharset(yyS[yypt-0].item.(*ast.OptBinary).Charset)
if yyS[yypt-0].item.(*ast.OptBinary).Charset == charset.CharsetBin {
tp.AddFlag(mysql.BinaryFlag)
tp.SetCollate(charset.CollationBin)
}
if yyS[yypt-0].item.(*ast.OptBinary).IsBinary {
tp.AddFlag(mysql.BinaryFlag)
}
parser.yyVAL.item = tp
}
case 2531:
{
tp := types.NewFieldType(mysql.TypeMediumBlob)
tp.SetCharset(yyS[yypt-0].item.(*ast.OptBinary).Charset)
if yyS[yypt-0].item.(*ast.OptBinary).Charset == charset.CharsetBin {
tp.AddFlag(mysql.BinaryFlag)
tp.SetCollate(charset.CollationBin)
}
if yyS[yypt-0].item.(*ast.OptBinary).IsBinary {
tp.AddFlag(mysql.BinaryFlag)
}
parser.yyVAL.item = tp
}
case 2532:
{
elementType := yyS[yypt-1].item.(*ast.VectorElementType)
if elementType.Tp != mysql.TypeFloat {
yylex.AppendError(yylex.Errorf("Only VECTOR is supported for now"))
}
tp := types.NewFieldType(mysql.TypeTiDBVectorFloat32)
tp.SetFlen(yyS[yypt-0].item.(int))
tp.SetDecimal(0)
tp.SetCharset(charset.CharsetBin)
tp.SetCollate(charset.CollationBin)
parser.yyVAL.item = tp
}
case 2552:
{
tp := types.NewFieldType(mysql.TypeTinyBlob)
parser.yyVAL.item = tp
}
case 2553:
{
tp := types.NewFieldType(mysql.TypeBlob)
tp.SetFlen(yyS[yypt-0].item.(int))
parser.yyVAL.item = tp
}
case 2554:
{
tp := types.NewFieldType(mysql.TypeMediumBlob)
parser.yyVAL.item = tp
}
case 2555:
{
tp := types.NewFieldType(mysql.TypeLongBlob)
parser.yyVAL.item = tp
}
case 2556:
{
tp := types.NewFieldType(mysql.TypeMediumBlob)
parser.yyVAL.item = tp
}
case 2557:
{
tp := types.NewFieldType(mysql.TypeTinyBlob)
parser.yyVAL.item = tp
}
case 2558:
{
tp := types.NewFieldType(mysql.TypeBlob)
tp.SetFlen(yyS[yypt-0].item.(int))
parser.yyVAL.item = tp
}
case 2559:
{
tp := types.NewFieldType(mysql.TypeMediumBlob)
parser.yyVAL.item = tp
}
case 2560:
{
tp := types.NewFieldType(mysql.TypeLongBlob)
parser.yyVAL.item = tp
}
case 2562:
{
parser.yyVAL.item = &ast.OptBinary{
IsBinary: false,
Charset: charset.CharsetLatin1,
}
}
case 2563:
{
cs, err := charset.GetCharsetInfo("ucs2")
if err != nil {
yylex.AppendError(ErrUnknownCharacterSet.GenWithStackByArgs("ucs2"))
return 1
}
parser.yyVAL.item = &ast.OptBinary{
IsBinary: false,
Charset: cs.Name,
}
}
case 2564:
{
parser.yyVAL.item = &ast.OptBinary{
IsBinary: false,
Charset: charset.CharsetBin,
}
}
case 2565:
{
tp := types.NewFieldType(mysql.TypeDate)
parser.yyVAL.item = tp
}
case 2566:
{
tp := types.NewFieldType(mysql.TypeDatetime)
tp.SetFlen(mysql.MaxDatetimeWidthNoFsp)
tp.SetDecimal(yyS[yypt-0].item.(int))
if tp.GetDecimal() > 0 {
tp.SetFlen(tp.GetFlen() + 1 + tp.GetDecimal())
}
parser.yyVAL.item = tp
}
case 2567:
{
tp := types.NewFieldType(mysql.TypeTimestamp)
tp.SetFlen(mysql.MaxDatetimeWidthNoFsp)
tp.SetDecimal(yyS[yypt-0].item.(int))
if tp.GetDecimal() > 0 {
tp.SetFlen(tp.GetFlen() + 1 + tp.GetDecimal())
}
parser.yyVAL.item = tp
}
case 2568:
{
tp := types.NewFieldType(mysql.TypeDuration)
tp.SetFlen(mysql.MaxDurationWidthNoFsp)
tp.SetDecimal(yyS[yypt-0].item.(int))
if tp.GetDecimal() > 0 {
tp.SetFlen(tp.GetFlen() + 1 + tp.GetDecimal())
}
parser.yyVAL.item = tp
}
case 2569:
{
tp := types.NewFieldType(mysql.TypeYear)
tp.SetFlen(yyS[yypt-1].item.(int))
if tp.GetFlen() != types.UnspecifiedLength && tp.GetFlen() != 4 {
yylex.AppendError(ErrInvalidYearColumnLength.GenWithStackByArgs())
return -1
}
parser.yyVAL.item = tp
}
case 2570:
{
parser.yyVAL.item = int(yyS[yypt-1].item.(uint64))
}
case 2571:
{
parser.yyVAL.item = types.UnspecifiedLength
}
case 2573:
{
parser.yyVAL.item = &ast.TypeOpt{IsUnsigned: true}
}
case 2574:
{
parser.yyVAL.item = &ast.TypeOpt{IsUnsigned: false}
}
case 2575:
{
parser.yyVAL.item = &ast.TypeOpt{IsZerofill: true, IsUnsigned: true}
}
case 2576:
{
parser.yyVAL.item = []*ast.TypeOpt{}
}
case 2577:
{
parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.TypeOpt), yyS[yypt-0].item.(*ast.TypeOpt))
}
case 2578:
{
parser.yyVAL.item = &ast.FloatOpt{Flen: types.UnspecifiedLength, Decimal: types.UnspecifiedLength}
}
case 2579:
{
parser.yyVAL.item = &ast.FloatOpt{Flen: yyS[yypt-0].item.(int), Decimal: types.UnspecifiedLength}
}
case 2581:
{
parser.yyVAL.item = &ast.FloatOpt{Flen: int(yyS[yypt-3].item.(uint64)), Decimal: int(yyS[yypt-1].item.(uint64))}
}
case 2582:
{
parser.yyVAL.item = false
}
case 2583:
{
parser.yyVAL.item = true
}
case 2584:
{
parser.yyVAL.item = &ast.VectorElementType{
Tp: mysql.TypeFloat,
}
}
case 2585:
{
parser.yyVAL.item = &ast.VectorElementType{
Tp: mysql.TypeFloat,
}
}
case 2586:
{
parser.yyVAL.item = &ast.VectorElementType{
Tp: mysql.TypeDouble,
}
}
case 2587:
{
parser.yyVAL.item = &ast.OptBinary{
IsBinary: false,
Charset: "",
}
}
case 2588:
{
parser.yyVAL.item = &ast.OptBinary{
IsBinary: true,
Charset: yyS[yypt-0].ident,
}
}
case 2589:
{
parser.yyVAL.item = &ast.OptBinary{
IsBinary: yyS[yypt-0].item.(bool),
Charset: yyS[yypt-1].ident,
}
}
case 2590:
{
parser.yyVAL.ident = ""
}
case 2591:
{
parser.yyVAL.ident = yyS[yypt-0].ident
}
case 2595:
{
parser.yyVAL.ident = ""
}
case 2596:
{
parser.yyVAL.ident = yyS[yypt-0].ident
}
case 2597:
{
parser.yyVAL.item = []string{yyS[yypt-0].ident}
}
case 2598:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]string), yyS[yypt-0].ident)
}
case 2599:
{
parser.yyVAL.item = &ast.TextString{Value: yyS[yypt-0].ident}
}
case 2600:
{
parser.yyVAL.item = &ast.TextString{Value: yyS[yypt-0].item.(ast.BinaryLiteral).ToString(), IsBinaryLiteral: true}
}
case 2601:
{
parser.yyVAL.item = &ast.TextString{Value: yyS[yypt-0].item.(ast.BinaryLiteral).ToString(), IsBinaryLiteral: true}
}
case 2602:
{
parser.yyVAL.item = []*ast.TextString{yyS[yypt-0].item.(*ast.TextString)}
}
case 2603:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.TextString), yyS[yypt-0].item.(*ast.TextString))
}
case 2610:
{
u := yyS[yypt-0].statement.(*ast.UpdateStmt)
u.With = yyS[yypt-1].item.(*ast.WithClause)
parser.yyVAL.statement = u
}
case 2611:
{
var refs *ast.Join
if x, ok := yyS[yypt-6].item.(*ast.Join); ok {
refs = x
} else {
refs = &ast.Join{Left: yyS[yypt-6].item.(ast.ResultSetNode)}
}
st := &ast.UpdateStmt{
Priority: yyS[yypt-8].item.(mysql.PriorityEnum),
TableRefs: &ast.TableRefsClause{TableRefs: refs},
List: yyS[yypt-4].item.([]*ast.Assignment),
IgnoreErr: yyS[yypt-7].item.(bool),
}
if yyS[yypt-9].item != nil {
st.TableHints = yyS[yypt-9].item.([]*ast.TableOptimizerHint)
}
if yyS[yypt-3].item != nil {
st.Where = yyS[yypt-3].item.(ast.ExprNode)
}
if yyS[yypt-2].item != nil {
st.Order = yyS[yypt-2].item.(*ast.OrderByClause)
}
if yyS[yypt-1].item != nil {
st.Limit = yyS[yypt-1].item.(*ast.Limit)
}
if yyS[yypt-0].item != nil {
st.Returning = yyS[yypt-0].item.([]*ast.SelectField)
}
parser.yyVAL.statement = st
}
case 2612:
{
st := &ast.UpdateStmt{
Priority: yyS[yypt-6].item.(mysql.PriorityEnum),
TableRefs: &ast.TableRefsClause{TableRefs: yyS[yypt-4].item.(*ast.Join)},
List: yyS[yypt-2].item.([]*ast.Assignment),
IgnoreErr: yyS[yypt-5].item.(bool),
}
if yyS[yypt-7].item != nil {
st.TableHints = yyS[yypt-7].item.([]*ast.TableOptimizerHint)
}
if yyS[yypt-1].item != nil {
st.Where = yyS[yypt-1].item.(ast.ExprNode)
}
if yyS[yypt-0].item != nil {
st.Returning = yyS[yypt-0].item.([]*ast.SelectField)
}
parser.yyVAL.statement = st
}
case 2613:
{
parser.yyVAL.statement = &ast.UseStmt{DBName: yyS[yypt-0].ident}
}
case 2614:
{
parser.yyVAL.item = yyS[yypt-0].expr
}
case 2615:
{
parser.yyVAL.item = nil
}
case 2617:
{
// See https://dev.mysql.com/doc/refman/8.0/en/create-user.html
ret := &ast.CreateUserStmt{
IsCreateRole: false,
IfNotExists: yyS[yypt-6].item.(bool),
Specs: yyS[yypt-5].item.([]*ast.UserSpec),
AuthTokenOrTLSOptions: yyS[yypt-4].item.([]*ast.AuthTokenOrTLSOption),
ResourceOptions: yyS[yypt-3].item.([]*ast.ResourceOption),
PasswordOrLockOptions: yyS[yypt-2].item.([]*ast.PasswordOrLockOption),
}
if yyS[yypt-1].item != nil {
ret.CommentOrAttributeOption = yyS[yypt-1].item.(*ast.CommentOrAttributeOption)
}
if yyS[yypt-0].item != nil {
ret.ResourceGroupNameOption = yyS[yypt-0].item.(*ast.ResourceGroupNameOption)
}
parser.yyVAL.statement = ret
}
case 2618:
{
// See https://dev.mysql.com/doc/refman/8.0/en/create-role.html
parser.yyVAL.statement = &ast.CreateUserStmt{
IsCreateRole: true,
IfNotExists: yyS[yypt-1].item.(bool),
Specs: yyS[yypt-0].item.([]*ast.UserSpec),
}
}
case 2619:
{
ret := &ast.AlterUserStmt{
IfExists: yyS[yypt-6].item.(bool),
Specs: yyS[yypt-5].item.([]*ast.UserSpec),
AuthTokenOrTLSOptions: yyS[yypt-4].item.([]*ast.AuthTokenOrTLSOption),
ResourceOptions: yyS[yypt-3].item.([]*ast.ResourceOption),
PasswordOrLockOptions: yyS[yypt-2].item.([]*ast.PasswordOrLockOption),
}
if yyS[yypt-1].item != nil {
ret.CommentOrAttributeOption = yyS[yypt-1].item.(*ast.CommentOrAttributeOption)
}
if yyS[yypt-0].item != nil {
ret.ResourceGroupNameOption = yyS[yypt-0].item.(*ast.ResourceGroupNameOption)
}
parser.yyVAL.statement = ret
}
case 2620:
{
auth := &ast.AuthOption{
AuthString: yyS[yypt-0].ident,
ByAuthString: true,
}
parser.yyVAL.statement = &ast.AlterUserStmt{
IfExists: yyS[yypt-6].item.(bool),
CurrentAuth: auth,
}
}
case 2621:
{
parser.yyVAL.statement = yyS[yypt-0].item.(*ast.AlterInstanceStmt)
}
case 2622:
{
option := yyS[yypt-0].item.(*ast.PlacementOption)
parser.yyVAL.statement = &ast.AlterRangeStmt{RangeName: ast.NewCIStr(yyS[yypt-1].ident), PlacementOption: option}
}
case 2623:
{
parser.yyVAL.item = &ast.AlterInstanceStmt{
ReloadTLS: true,
}
}
case 2624:
{
parser.yyVAL.item = &ast.AlterInstanceStmt{
ReloadTLS: true,
NoRollbackOnError: true,
}
}
case 2625:
{
userSpec := &ast.UserSpec{
User: yyS[yypt-1].item.(*auth.UserIdentity),
}
if yyS[yypt-0].item != nil {
userSpec.AuthOpt = yyS[yypt-0].item.(*ast.AuthOption)
}
parser.yyVAL.item = userSpec
}
case 2626:
{
parser.yyVAL.item = []*ast.UserSpec{yyS[yypt-0].item.(*ast.UserSpec)}
}
case 2627:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.UserSpec), yyS[yypt-0].item.(*ast.UserSpec))
}
case 2628:
{
l := []*ast.ResourceOption{}
parser.yyVAL.item = l
}
case 2629:
{
parser.yyVAL.item = yyS[yypt-0].item
needWarning := false
for _, option := range yyS[yypt-0].item.([]*ast.ResourceOption) {
switch option.Type {
case ast.MaxUserConnections:
// do nothing.
default:
needWarning = true
}
}
if needWarning {
yylex.AppendError(yylex.Errorf("TiDB does not support WITH ConnectionOptions but MAX_USER_CONNECTIONS now, they would be parsed but ignored."))
parser.lastErrorAsWarn()
}
}
case 2630:
{
parser.yyVAL.item = []*ast.ResourceOption{yyS[yypt-0].item.(*ast.ResourceOption)}
}
case 2631:
{
l := yyS[yypt-1].item.([]*ast.ResourceOption)
l = append(l, yyS[yypt-0].item.(*ast.ResourceOption))
parser.yyVAL.item = l
}
case 2632:
{
parser.yyVAL.item = &ast.ResourceOption{
Type: ast.MaxQueriesPerHour,
Count: yyS[yypt-0].item.(int64),
}
}
case 2633:
{
parser.yyVAL.item = &ast.ResourceOption{
Type: ast.MaxUpdatesPerHour,
Count: yyS[yypt-0].item.(int64),
}
}
case 2634:
{
parser.yyVAL.item = &ast.ResourceOption{
Type: ast.MaxConnectionsPerHour,
Count: yyS[yypt-0].item.(int64),
}
}
case 2635:
{
parser.yyVAL.item = &ast.ResourceOption{
Type: ast.MaxUserConnections,
Count: yyS[yypt-0].item.(int64),
}
}
case 2636:
{
parser.yyVAL.item = []*ast.AuthTokenOrTLSOption{}
}
case 2638:
{
t := &ast.AuthTokenOrTLSOption{
Type: ast.TlsNone,
}
parser.yyVAL.item = []*ast.AuthTokenOrTLSOption{t}
}
case 2639:
{
t := &ast.AuthTokenOrTLSOption{
Type: ast.Ssl,
}
parser.yyVAL.item = []*ast.AuthTokenOrTLSOption{t}
}
case 2640:
{
t := &ast.AuthTokenOrTLSOption{
Type: ast.X509,
}
parser.yyVAL.item = []*ast.AuthTokenOrTLSOption{t}
}
case 2641:
{
parser.yyVAL.item = yyS[yypt-0].item
}
case 2642:
{
parser.yyVAL.item = []*ast.AuthTokenOrTLSOption{yyS[yypt-0].item.(*ast.AuthTokenOrTLSOption)}
}
case 2643:
{
l := yyS[yypt-2].item.([]*ast.AuthTokenOrTLSOption)
l = append(l, yyS[yypt-0].item.(*ast.AuthTokenOrTLSOption))
parser.yyVAL.item = l
}
case 2644:
{
l := yyS[yypt-1].item.([]*ast.AuthTokenOrTLSOption)
l = append(l, yyS[yypt-0].item.(*ast.AuthTokenOrTLSOption))
parser.yyVAL.item = l
}
case 2645:
{
parser.yyVAL.item = &ast.AuthTokenOrTLSOption{
Type: ast.Issuer,
Value: yyS[yypt-0].ident,
}
}
case 2646:
{
parser.yyVAL.item = &ast.AuthTokenOrTLSOption{
Type: ast.Subject,
Value: yyS[yypt-0].ident,
}
}
case 2647:
{
parser.yyVAL.item = &ast.AuthTokenOrTLSOption{
Type: ast.Cipher,
Value: yyS[yypt-0].ident,
}
}
case 2648:
{
parser.yyVAL.item = &ast.AuthTokenOrTLSOption{
Type: ast.SAN,
Value: yyS[yypt-0].ident,
}
}
case 2649:
{
parser.yyVAL.item = &ast.AuthTokenOrTLSOption{
Type: ast.TokenIssuer,
Value: yyS[yypt-0].ident,
}
}
case 2650:
{
parser.yyVAL.item = nil
}
case 2651:
{
parser.yyVAL.item = &ast.CommentOrAttributeOption{Type: ast.UserCommentType, Value: yyS[yypt-0].ident}
}
case 2652:
{
parser.yyVAL.item = &ast.CommentOrAttributeOption{Type: ast.UserAttributeType, Value: yyS[yypt-0].ident}
}
case 2653:
{
parser.yyVAL.item = nil
}
case 2654:
{
parser.yyVAL.item = &ast.ResourceGroupNameOption{Value: yyS[yypt-0].ident}
}
case 2655:
{
parser.yyVAL.item = []*ast.PasswordOrLockOption{}
}
case 2656:
{
parser.yyVAL.item = yyS[yypt-0].item
}
case 2657:
{
parser.yyVAL.item = []*ast.PasswordOrLockOption{yyS[yypt-0].item.(*ast.PasswordOrLockOption)}
}
case 2658:
{
l := yyS[yypt-1].item.([]*ast.PasswordOrLockOption)
l = append(l, yyS[yypt-0].item.(*ast.PasswordOrLockOption))
parser.yyVAL.item = l
}
case 2659:
{
parser.yyVAL.item = &ast.PasswordOrLockOption{
Type: ast.Unlock,
}
}
case 2660:
{
parser.yyVAL.item = &ast.PasswordOrLockOption{
Type: ast.Lock,
}
}
case 2661:
{
parser.yyVAL.item = &ast.PasswordOrLockOption{
Type: ast.PasswordHistoryDefault,
}
}
case 2662:
{
parser.yyVAL.item = &ast.PasswordOrLockOption{
Type: ast.PasswordHistory,
Count: yyS[yypt-0].item.(int64),
}
}
case 2663:
{
parser.yyVAL.item = &ast.PasswordOrLockOption{
Type: ast.PasswordReuseDefault,
}
}
case 2664:
{
parser.yyVAL.item = &ast.PasswordOrLockOption{
Type: ast.PasswordReuseInterval,
Count: yyS[yypt-1].item.(int64),
}
}
case 2665:
{
parser.yyVAL.item = &ast.PasswordOrLockOption{
Type: ast.PasswordExpire,
}
}
case 2666:
{
parser.yyVAL.item = &ast.PasswordOrLockOption{
Type: ast.PasswordExpireInterval,
Count: yyS[yypt-1].item.(int64),
}
}
case 2667:
{
parser.yyVAL.item = &ast.PasswordOrLockOption{
Type: ast.PasswordExpireNever,
}
}
case 2668:
{
parser.yyVAL.item = &ast.PasswordOrLockOption{
Type: ast.PasswordExpireDefault,
}
}
case 2669:
{
parser.yyVAL.item = &ast.PasswordOrLockOption{
Type: ast.FailedLoginAttempts,
Count: yyS[yypt-0].item.(int64),
}
}
case 2670:
{
parser.yyVAL.item = &ast.PasswordOrLockOption{
Type: ast.PasswordLockTime,
Count: yyS[yypt-0].item.(int64),
}
}
case 2671:
{
parser.yyVAL.item = &ast.PasswordOrLockOption{
Type: ast.PasswordLockTimeUnbounded,
}
}
case 2672:
{
parser.yyVAL.item = &ast.PasswordOrLockOption{
Type: ast.PasswordRequireCurrentDefault,
}
}
case 2673:
{
parser.yyVAL.item = nil
}
case 2674:
{
parser.yyVAL.item = &ast.AuthOption{
AuthString: yyS[yypt-0].ident,
ByAuthString: true,
}
}
case 2675:
{
parser.yyVAL.item = &ast.AuthOption{
AuthPlugin: yyS[yypt-0].ident,
}
}
case 2676:
{
parser.yyVAL.item = &ast.AuthOption{
AuthPlugin: yyS[yypt-2].ident,
AuthString: yyS[yypt-0].ident,
ByAuthString: true,
}
}
case 2677:
{
parser.yyVAL.item = &ast.AuthOption{
AuthPlugin: yyS[yypt-2].ident,
HashString: yyS[yypt-0].ident,
ByHashString: true,
}
}
case 2678:
{
parser.yyVAL.item = &ast.AuthOption{
AuthPlugin: mysql.AuthNativePassword,
HashString: yyS[yypt-0].ident,
ByHashString: true,
}
}
case 2681:
{
parser.yyVAL.ident = yyS[yypt-0].item.(ast.BinaryLiteral).ToString()
}
case 2682:
{
role := yyS[yypt-0].item.(*auth.RoleIdentity)
roleSpec := &ast.UserSpec{
User: &auth.UserIdentity{
Username: role.Username,
Hostname: role.Hostname,
},
IsRole: true,
}
parser.yyVAL.item = roleSpec
}
case 2683:
{
parser.yyVAL.item = []*ast.UserSpec{yyS[yypt-0].item.(*ast.UserSpec)}
}
case 2684:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.UserSpec), yyS[yypt-0].item.(*ast.UserSpec))
}
case 2688:
{
var sel ast.StmtNode
switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) {
case *ast.SelectStmt:
x.IsInBraces = true
sel = x
case *ast.SetOprStmt:
x.IsInBraces = true
sel = x
}
parser.yyVAL.statement = sel
}
case 2693:
{
startOffset := parser.startOffset(&yyS[yypt-2])
endOffset := parser.startOffset(&yyS[yypt-1])
originStmt := yyS[yypt-2].statement
parser.setNodeText(originStmt, strings.TrimSpace(parser.src[startOffset:endOffset]))
startOffset = parser.startOffset(&yyS[yypt])
hintedStmt := yyS[yypt-0].statement
parser.setNodeText(hintedStmt, strings.TrimSpace(parser.src[startOffset:]))
x := &ast.CreateBindingStmt{
OriginNode: originStmt,
HintedNode: hintedStmt,
GlobalScope: yyS[yypt-5].item.(bool),
}
parser.yyVAL.statement = x
}
case 2694:
{
startOffset := parser.startOffset(&yyS[yypt])
hintedStmt := yyS[yypt-0].statement
parser.setNodeText(hintedStmt, strings.TrimSpace(parser.src[startOffset:]))
x := &ast.CreateBindingStmt{
OriginNode: hintedStmt,
HintedNode: hintedStmt,
GlobalScope: yyS[yypt-3].item.(bool),
}
parser.yyVAL.statement = x
}
case 2695:
{
x := &ast.CreateBindingStmt{
GlobalScope: yyS[yypt-7].item.(bool),
PlanDigests: yyS[yypt-0].item.([]*ast.StringOrUserVar),
}
parser.yyVAL.statement = x
}
case 2696:
{
parser.yyVAL.item = []*ast.StringOrUserVar{yyS[yypt-0].item.(*ast.StringOrUserVar)}
}
case 2697:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.StringOrUserVar), yyS[yypt-0].item.(*ast.StringOrUserVar))
}
case 2698:
{
parser.yyVAL.item = &ast.StringOrUserVar{StringLit: yyS[yypt-0].ident}
}
case 2699:
{
parser.yyVAL.item = &ast.StringOrUserVar{UserVar: yyS[yypt-0].expr.(*ast.VariableExpr)}
}
case 2700:
{
startOffset := parser.startOffset(&yyS[yypt])
originStmt := yyS[yypt-0].statement
parser.setNodeText(originStmt, strings.TrimSpace(parser.src[startOffset:]))
x := &ast.DropBindingStmt{
OriginNode: originStmt,
GlobalScope: yyS[yypt-3].item.(bool),
}
parser.yyVAL.statement = x
}
case 2701:
{
startOffset := parser.startOffset(&yyS[yypt-2])
endOffset := parser.startOffset(&yyS[yypt-1])
originStmt := yyS[yypt-2].statement
parser.setNodeText(originStmt, strings.TrimSpace(parser.src[startOffset:endOffset]))
startOffset = parser.startOffset(&yyS[yypt])
hintedStmt := yyS[yypt-0].statement
parser.setNodeText(hintedStmt, strings.TrimSpace(parser.src[startOffset:]))
x := &ast.DropBindingStmt{
OriginNode: originStmt,
HintedNode: hintedStmt,
GlobalScope: yyS[yypt-5].item.(bool),
}
parser.yyVAL.statement = x
}
case 2702:
{
x := &ast.DropBindingStmt{
GlobalScope: yyS[yypt-5].item.(bool),
SQLDigests: yyS[yypt-0].item.([]*ast.StringOrUserVar),
}
parser.yyVAL.statement = x
}
case 2703:
{
startOffset := parser.startOffset(&yyS[yypt])
originStmt := yyS[yypt-0].statement
parser.setNodeText(originStmt, strings.TrimSpace(parser.src[startOffset:]))
x := &ast.SetBindingStmt{
BindingStatusType: yyS[yypt-2].item.(ast.BindingStatusType),
OriginNode: originStmt,
}
parser.yyVAL.statement = x
}
case 2704:
{
startOffset := parser.startOffset(&yyS[yypt-2])
endOffset := parser.startOffset(&yyS[yypt-1])
originStmt := yyS[yypt-2].statement
parser.setNodeText(originStmt, strings.TrimSpace(parser.src[startOffset:endOffset]))
startOffset = parser.startOffset(&yyS[yypt])
hintedStmt := yyS[yypt-0].statement
parser.setNodeText(hintedStmt, strings.TrimSpace(parser.src[startOffset:]))
x := &ast.SetBindingStmt{
BindingStatusType: yyS[yypt-4].item.(ast.BindingStatusType),
OriginNode: originStmt,
HintedNode: hintedStmt,
}
parser.yyVAL.statement = x
}
case 2705:
{
x := &ast.SetBindingStmt{
BindingStatusType: yyS[yypt-4].item.(ast.BindingStatusType),
SQLDigest: yyS[yypt-0].ident,
}
parser.yyVAL.statement = x
}
case 2706:
{
x := &ast.RecommendIndexStmt{
Action: "run",
SQL: yyS[yypt-1].ident,
Options: yyS[yypt-0].item.([]ast.RecommendIndexOption),
}
parser.yyVAL.statement = x
}
case 2707:
{
x := &ast.RecommendIndexStmt{
Action: "run",
Options: yyS[yypt-0].item.([]ast.RecommendIndexOption),
}
parser.yyVAL.statement = x
}
case 2708:
{
x := &ast.RecommendIndexStmt{
Action: "show",
}
parser.yyVAL.statement = x
}
case 2709:
{
x := &ast.RecommendIndexStmt{
Action: "apply",
ID: yyS[yypt-0].item.(int64),
}
parser.yyVAL.statement = x
}
case 2710:
{
x := &ast.RecommendIndexStmt{
Action: "ignore",
ID: yyS[yypt-0].item.(int64),
}
parser.yyVAL.statement = x
}
case 2711:
{
x := &ast.RecommendIndexStmt{
Action: "set",
Options: yyS[yypt-0].item.([]ast.RecommendIndexOption),
}
parser.yyVAL.statement = x
}
case 2712:
{
parser.yyVAL.item = []ast.RecommendIndexOption{}
}
case 2713:
{
parser.yyVAL.item = yyS[yypt-0].item.([]ast.RecommendIndexOption)
}
case 2714:
{
parser.yyVAL.item = []ast.RecommendIndexOption{yyS[yypt-0].item.(ast.RecommendIndexOption)}
}
case 2715:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.RecommendIndexOption), yyS[yypt-0].item.(ast.RecommendIndexOption))
}
case 2716:
{
parser.yyVAL.item = ast.RecommendIndexOption{
Option: yyS[yypt-2].ident,
Value: ast.NewValueExpr(yyS[yypt-0].expr, parser.charset, parser.collation),
}
}
case 2717:
{
p, err := convertToPriv(yyS[yypt-7].item.([]*ast.RoleOrPriv))
if err != nil {
yylex.AppendError(err)
return 1
}
parser.yyVAL.statement = &ast.GrantStmt{
Privs: p,
ObjectType: yyS[yypt-5].item.(ast.ObjectTypeType),
Level: yyS[yypt-4].item.(*ast.GrantLevel),
Users: yyS[yypt-2].item.([]*ast.UserSpec),
AuthTokenOrTLSOptions: yyS[yypt-1].item.([]*ast.AuthTokenOrTLSOption),
WithGrant: yyS[yypt-0].item.(bool),
}
}
case 2718:
{
parser.yyVAL.statement = &ast.GrantProxyStmt{
LocalUser: yyS[yypt-3].item.(*auth.UserIdentity),
ExternalUsers: yyS[yypt-1].item.([]*auth.UserIdentity),
WithGrant: yyS[yypt-0].item.(bool),
}
}
case 2719:
{
r, err := convertToRole(yyS[yypt-2].item.([]*ast.RoleOrPriv))
if err != nil {
yylex.AppendError(err)
return 1
}
parser.yyVAL.statement = &ast.GrantRoleStmt{
Roles: r,
Users: yyS[yypt-0].item.([]*auth.UserIdentity),
}
}
case 2720:
{
parser.yyVAL.item = false
}
case 2721:
{
parser.yyVAL.item = true
}
case 2722:
{
parser.yyVAL.item = false
}
case 2723:
{
parser.yyVAL.item = false
}
case 2724:
{
parser.yyVAL.item = false
}
case 2725:
{
parser.yyVAL.item = false
}
case 2726:
{
parser.yyVAL.item = []string{yyS[yypt-0].ident}
}
case 2727:
{
parser.yyVAL.item = append(yyS[yypt-1].item.([]string), yyS[yypt-0].ident)
}
case 2728:
{
parser.yyVAL.item = &ast.RoleOrPriv{
Node: yyS[yypt-0].item,
}
}
case 2729:
{
parser.yyVAL.item = &ast.RoleOrPriv{
Node: yyS[yypt-0].item,
}
}
case 2730:
{
parser.yyVAL.item = &ast.RoleOrPriv{
Symbols: strings.Join(yyS[yypt-0].item.([]string), " "),
}
}
case 2731:
{
parser.yyVAL.item = &ast.RoleOrPriv{
Symbols: "LOAD FROM S3",
}
}
case 2732:
{
parser.yyVAL.item = &ast.RoleOrPriv{
Symbols: "SELECT INTO S3",
}
}
case 2733:
{
parser.yyVAL.item = []*ast.RoleOrPriv{yyS[yypt-0].item.(*ast.RoleOrPriv)}
}
case 2734:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.RoleOrPriv), yyS[yypt-0].item.(*ast.RoleOrPriv))
}
case 2735:
{
parser.yyVAL.item = &ast.PrivElem{
Priv: yyS[yypt-0].item.(mysql.PrivilegeType),
}
}
case 2736:
{
parser.yyVAL.item = &ast.PrivElem{
Priv: yyS[yypt-3].item.(mysql.PrivilegeType),
Cols: yyS[yypt-1].item.([]*ast.ColumnName),
}
}
case 2737:
{
parser.yyVAL.item = mysql.AllPriv
}
case 2738:
{
parser.yyVAL.item = mysql.AllPriv
}
case 2739:
{
parser.yyVAL.item = mysql.AlterPriv
}
case 2740:
{
parser.yyVAL.item = mysql.CreatePriv
}
case 2741:
{
parser.yyVAL.item = mysql.CreateUserPriv
}
case 2742:
{
parser.yyVAL.item = mysql.CreateTablespacePriv
}
case 2743:
{
parser.yyVAL.item = mysql.TriggerPriv
}
case 2744:
{
parser.yyVAL.item = mysql.DeletePriv
}
case 2745:
{
parser.yyVAL.item = mysql.DropPriv
}
case 2746:
{
parser.yyVAL.item = mysql.ProcessPriv
}
case 2747:
{
parser.yyVAL.item = mysql.ExecutePriv
}
case 2748:
{
parser.yyVAL.item = mysql.IndexPriv
}
case 2749:
{
parser.yyVAL.item = mysql.InsertPriv
}
case 2750:
{
parser.yyVAL.item = mysql.SelectPriv
}
case 2751:
{
parser.yyVAL.item = mysql.SuperPriv
}
case 2752:
{
parser.yyVAL.item = mysql.ShowDBPriv
}
case 2753:
{
parser.yyVAL.item = mysql.UpdatePriv
}
case 2754:
{
parser.yyVAL.item = mysql.GrantPriv
}
case 2755:
{
parser.yyVAL.item = mysql.ReferencesPriv
}
case 2756:
{
parser.yyVAL.item = mysql.ReplicationSlavePriv
}
case 2757:
{
parser.yyVAL.item = mysql.ReplicationClientPriv
}
case 2758:
{
if parser.enableMariaDB {
parser.yyVAL.item = mysql.ReplicationClientPriv
} else {
yylex.AppendError(ErrSyntax)
return 1
}
}
case 2759:
{
parser.yyVAL.item = mysql.UsagePriv
}
case 2760:
{
parser.yyVAL.item = mysql.ReloadPriv
}
case 2761:
{
parser.yyVAL.item = mysql.FilePriv
}
case 2762:
{
parser.yyVAL.item = mysql.ConfigPriv
}
case 2763:
{
parser.yyVAL.item = mysql.CreateTMPTablePriv
}
case 2764:
{
parser.yyVAL.item = mysql.LockTablesPriv
}
case 2765:
{
parser.yyVAL.item = mysql.CreateViewPriv
}
case 2766:
{
parser.yyVAL.item = mysql.ShowViewPriv
}
case 2767:
{
parser.yyVAL.item = mysql.CreateRolePriv
}
case 2768:
{
parser.yyVAL.item = mysql.DropRolePriv
}
case 2769:
{
parser.yyVAL.item = mysql.CreateRoutinePriv
}
case 2770:
{
parser.yyVAL.item = mysql.AlterRoutinePriv
}
case 2771:
{
parser.yyVAL.item = mysql.EventPriv
}
case 2772:
{
parser.yyVAL.item = mysql.ShutdownPriv
}
case 2773:
{
parser.yyVAL.item = ast.ObjectTypeNone
}
case 2774:
{
parser.yyVAL.item = ast.ObjectTypeTable
}
case 2775:
{
parser.yyVAL.item = ast.ObjectTypeFunction
}
case 2776:
{
parser.yyVAL.item = ast.ObjectTypeProcedure
}
case 2777:
{
parser.yyVAL.item = &ast.GrantLevel{
Level: ast.GrantLevelDB,
}
}
case 2778:
{
parser.yyVAL.item = &ast.GrantLevel{
Level: ast.GrantLevelGlobal,
}
}
case 2779:
{
parser.yyVAL.item = &ast.GrantLevel{
Level: ast.GrantLevelDB,
DBName: yyS[yypt-2].ident,
}
}
case 2780:
{
parser.yyVAL.item = &ast.GrantLevel{
Level: ast.GrantLevelTable,
DBName: yyS[yypt-2].ident,
TableName: yyS[yypt-0].ident,
}
}
case 2781:
{
parser.yyVAL.item = &ast.GrantLevel{
Level: ast.GrantLevelTable,
TableName: yyS[yypt-0].ident,
}
}
case 2782:
{
p, err := convertToPriv(yyS[yypt-5].item.([]*ast.RoleOrPriv))
if err != nil {
yylex.AppendError(err)
return 1
}
parser.yyVAL.statement = &ast.RevokeStmt{
Privs: p,
ObjectType: yyS[yypt-3].item.(ast.ObjectTypeType),
Level: yyS[yypt-2].item.(*ast.GrantLevel),
Users: yyS[yypt-0].item.([]*ast.UserSpec),
}
}
case 2783:
{
// MySQL has special syntax for REVOKE ALL [PRIVILEGES], GRANT OPTION
// which uses the RevokeRoleStmt syntax but is of type RevokeStmt.
// It is documented at https://dev.mysql.com/doc/refman/5.7/en/revoke.html
// as the "second syntax" for REVOKE. It is only valid if *both*
// ALL PRIVILEGES + GRANT OPTION are specified in that order.
if isRevokeAllGrant(yyS[yypt-2].item.([]*ast.RoleOrPriv)) {
var users []*ast.UserSpec
for _, u := range yyS[yypt-0].item.([]*auth.UserIdentity) {
users = append(users, &ast.UserSpec{
User: u,
})
}
parser.yyVAL.statement = &ast.RevokeStmt{
Privs: []*ast.PrivElem{{Priv: mysql.AllPriv}, {Priv: mysql.GrantPriv}},
ObjectType: ast.ObjectTypeNone,
Level: &ast.GrantLevel{Level: ast.GrantLevelGlobal},
Users: users,
}
} else {
r, err := convertToRole(yyS[yypt-2].item.([]*ast.RoleOrPriv))
if err != nil {
yylex.AppendError(err)
return 1
}
parser.yyVAL.statement = &ast.RevokeRoleStmt{
Roles: r,
Users: yyS[yypt-0].item.([]*auth.UserIdentity),
}
}
}
case 2784:
{
x := &ast.LoadDataStmt{
LowPriority: yyS[yypt-15].item.(bool),
FileLocRef: ast.FileLocServerOrRemote,
Path: yyS[yypt-12].ident,
Format: yyS[yypt-11].item.(*string),
OnDuplicate: yyS[yypt-10].item.(ast.OnDuplicateKeyHandlingType),
Table: yyS[yypt-7].item.(*ast.TableName),
Charset: yyS[yypt-6].item.(*string),
FieldsInfo: yyS[yypt-5].item.(*ast.FieldsClause),
LinesInfo: yyS[yypt-4].item.(*ast.LinesClause),
IgnoreLines: yyS[yypt-3].item.(*uint64),
ColumnsAndUserVars: yyS[yypt-2].item.([]*ast.ColumnNameOrUserVar),
ColumnAssignments: yyS[yypt-1].item.([]*ast.Assignment),
Options: yyS[yypt-0].item.([]*ast.LoadDataOpt),
}
if yyS[yypt-14].item != nil {
x.FileLocRef = ast.FileLocClient
// See https://dev.mysql.com/doc/refman/5.7/en/load-data.html#load-data-duplicate-key-handling
// If you do not specify IGNORE or REPLACE modifier , then we set default behavior to IGNORE when LOCAL modifier is specified
if x.OnDuplicate == ast.OnDuplicateKeyHandlingError {
x.OnDuplicate = ast.OnDuplicateKeyHandlingIgnore
}
}
columns := []*ast.ColumnName{}
for _, v := range x.ColumnsAndUserVars {
if v.ColumnName != nil {
columns = append(columns, v.ColumnName)
}
}
x.Columns = columns
parser.yyVAL.statement = x
}
case 2785:
{
parser.yyVAL.item = false
}
case 2786:
{
parser.yyVAL.item = true
}
case 2787:
{
parser.yyVAL.item = (*string)(nil)
}
case 2788:
{
str := yyS[yypt-0].ident
parser.yyVAL.item = &str
}
case 2789:
{
parser.yyVAL.item = (*uint64)(nil)
}
case 2790:
{
v := getUint64FromNUM(yyS[yypt-1].item)
parser.yyVAL.item = &v
}
case 2791:
{
parser.yyVAL.item = (*string)(nil)
}
case 2792:
{
v := yyS[yypt-0].ident
parser.yyVAL.item = &v
}
case 2793:
{
parser.yyVAL.item = nil
}
case 2794:
{
parser.yyVAL.item = yyS[yypt-0].ident
}
case 2795:
{
parser.yyVAL.item = (*ast.FieldsClause)(nil)
}
case 2796:
{
fieldsClause := &ast.FieldsClause{}
fieldItems := yyS[yypt-0].item.([]*ast.FieldItem)
for _, item := range fieldItems {
switch item.Type {
case ast.Terminated:
fieldsClause.Terminated = &item.Value
case ast.Enclosed:
fieldsClause.Enclosed = &item.Value
fieldsClause.OptEnclosed = item.OptEnclosed
case ast.Escaped:
fieldsClause.Escaped = &item.Value
case ast.DefinedNullBy:
fieldsClause.DefinedNullBy = &item.Value
fieldsClause.NullValueOptEnclosed = item.OptEnclosed
}
}
parser.yyVAL.item = fieldsClause
}
case 2799:
{
fieldItems := yyS[yypt-1].item.([]*ast.FieldItem)
parser.yyVAL.item = append(fieldItems, yyS[yypt-0].item.(*ast.FieldItem))
}
case 2800:
{
fieldItems := make([]*ast.FieldItem, 1, 1)
fieldItems[0] = yyS[yypt-0].item.(*ast.FieldItem)
parser.yyVAL.item = fieldItems
}
case 2801:
{
parser.yyVAL.item = &ast.FieldItem{
Type: ast.Terminated,
Value: yyS[yypt-0].ident,
}
}
case 2802:
{
str := yyS[yypt-0].ident
if str != "\\" && len(str) > 1 {
yylex.AppendError(ErrWrongFieldTerminators.GenWithStackByArgs())
return 1
}
parser.yyVAL.item = &ast.FieldItem{
Type: ast.Enclosed,
Value: str,
OptEnclosed: true,
}
}
case 2803:
{
str := yyS[yypt-0].ident
if str != "\\" && len(str) > 1 {
yylex.AppendError(ErrWrongFieldTerminators.GenWithStackByArgs())
return 1
}
parser.yyVAL.item = &ast.FieldItem{
Type: ast.Enclosed,
Value: str,
}
}
case 2804:
{
str := yyS[yypt-0].ident
if str != "\\" && len(str) > 1 {
yylex.AppendError(ErrWrongFieldTerminators.GenWithStackByArgs())
return 1
}
parser.yyVAL.item = &ast.FieldItem{
Type: ast.Escaped,
Value: str,
}
}
case 2805:
{
parser.yyVAL.item = &ast.FieldItem{
Type: ast.DefinedNullBy,
Value: yyS[yypt-0].item.(*ast.TextString).Value,
}
}
case 2806:
{
parser.yyVAL.item = &ast.FieldItem{
Type: ast.DefinedNullBy,
Value: yyS[yypt-2].item.(*ast.TextString).Value,
OptEnclosed: true,
}
}
case 2808:
{
parser.yyVAL.ident = yyS[yypt-0].item.(ast.BinaryLiteral).ToString()
}
case 2809:
{
parser.yyVAL.ident = yyS[yypt-0].item.(ast.BinaryLiteral).ToString()
}
case 2810:
{
parser.yyVAL.item = (*ast.LinesClause)(nil)
}
case 2811:
{
parser.yyVAL.item = &ast.LinesClause{Starting: yyS[yypt-1].item.(*string), Terminated: yyS[yypt-0].item.(*string)}
}
case 2812:
{
parser.yyVAL.item = (*string)(nil)
}
case 2813:
{
s := yyS[yypt-0].ident
parser.yyVAL.item = &s
}
case 2814:
{
parser.yyVAL.item = (*string)(nil)
}
case 2815:
{
s := yyS[yypt-0].ident
parser.yyVAL.item = &s
}
case 2816:
{
parser.yyVAL.item = ([]*ast.Assignment)(nil)
}
case 2817:
{
parser.yyVAL.item = yyS[yypt-0].item
}
case 2818:
{
l := yyS[yypt-2].item.([]*ast.Assignment)
parser.yyVAL.item = append(l, yyS[yypt-0].item.(*ast.Assignment))
}
case 2819:
{
parser.yyVAL.item = []*ast.Assignment{yyS[yypt-0].item.(*ast.Assignment)}
}
case 2820:
{
parser.yyVAL.item = &ast.Assignment{
Column: yyS[yypt-2].expr.(*ast.ColumnNameExpr).Name,
Expr: yyS[yypt-0].expr,
}
}
case 2821:
{
parser.yyVAL.item = []*ast.LoadDataOpt{}
}
case 2822:
{
parser.yyVAL.item = yyS[yypt-0].item.([]*ast.LoadDataOpt)
}
case 2823:
{
parser.yyVAL.item = []*ast.LoadDataOpt{yyS[yypt-0].item.(*ast.LoadDataOpt)}
}
case 2824:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.LoadDataOpt), yyS[yypt-0].item.(*ast.LoadDataOpt))
}
case 2825:
{
parser.yyVAL.item = &ast.LoadDataOpt{Name: strings.ToLower(yyS[yypt-0].ident)}
}
case 2826:
{
parser.yyVAL.item = &ast.LoadDataOpt{Name: strings.ToLower(yyS[yypt-2].ident), Value: yyS[yypt-0].expr.(ast.ExprNode)}
}
case 2827:
{
parser.yyVAL.statement = &ast.ImportIntoStmt{
Table: yyS[yypt-6].item.(*ast.TableName),
ColumnsAndUserVars: yyS[yypt-5].item.([]*ast.ColumnNameOrUserVar),
ColumnAssignments: yyS[yypt-4].item.([]*ast.Assignment),
Path: yyS[yypt-2].ident,
Format: yyS[yypt-1].item.(*string),
Options: yyS[yypt-0].item.([]*ast.LoadDataOpt),
}
}
case 2828:
{
st := &ast.ImportIntoStmt{
Table: yyS[yypt-5].item.(*ast.TableName),
ColumnsAndUserVars: yyS[yypt-4].item.([]*ast.ColumnNameOrUserVar),
Select: yyS[yypt-1].statement.(ast.ResultSetNode),
Options: yyS[yypt-0].item.([]*ast.LoadDataOpt),
}
for _, cu := range st.ColumnsAndUserVars {
if cu.ColumnName == nil {
yylex.AppendError(yylex.Errorf("Cannot use user variable(%s) in IMPORT INTO FROM SELECT statement.", cu.UserVar.Name))
return 1
}
}
if yyS[yypt-3].item.([]*ast.Assignment) != nil {
yylex.AppendError(yylex.Errorf("Cannot use SET clause in IMPORT INTO FROM SELECT statement."))
return 1
}
parser.yyVAL.statement = st
}
case 2829:
{
parser.yyVAL.statement = yyS[yypt-0].statement
}
case 2830:
{
parser.yyVAL.statement = yyS[yypt-0].statement
}
case 2831:
{
parser.yyVAL.statement = yyS[yypt-0].statement
}
case 2832:
{
var sel ast.ResultSetNode
switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) {
case *ast.SelectStmt:
x.IsInBraces = true
sel = x
case *ast.SetOprStmt:
x.IsInBraces = true
sel = x
}
parser.yyVAL.statement = sel.(ast.StmtNode)
}
case 2833:
{
parser.yyVAL.statement = &ast.UnlockTablesStmt{}
}
case 2834:
{
parser.yyVAL.statement = &ast.LockTablesStmt{
TableLocks: yyS[yypt-0].item.([]ast.TableLock),
}
}
case 2837:
{
parser.yyVAL.item = ast.TableLock{
Table: yyS[yypt-1].item.(*ast.TableName),
Type: yyS[yypt-0].item.(ast.TableLockType),
}
}
case 2838:
{
parser.yyVAL.item = ast.TableLockRead
}
case 2839:
{
parser.yyVAL.item = ast.TableLockReadLocal
}
case 2840:
{
parser.yyVAL.item = ast.TableLockWrite
}
case 2841:
{
parser.yyVAL.item = ast.TableLockWriteLocal
}
case 2842:
{
parser.yyVAL.item = []ast.TableLock{yyS[yypt-0].item.(ast.TableLock)}
}
case 2843:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.TableLock), yyS[yypt-0].item.(ast.TableLock))
}
case 2844:
{
parser.yyVAL.statement = &ast.NonTransactionalDMLStmt{
DryRun: yyS[yypt-1].item.(int),
ShardColumn: yyS[yypt-4].item.(*ast.ColumnName),
Limit: getUint64FromNUM(yyS[yypt-2].item),
DMLStmt: yyS[yypt-0].statement.(ast.ShardableDMLStmt),
}
}
case 2849:
{
parser.yyVAL.item = ast.NoDryRun
}
case 2850:
{
parser.yyVAL.item = ast.DryRunSplitDml
}
case 2851:
{
parser.yyVAL.item = ast.DryRunQuery
}
case 2852:
{
parser.yyVAL.item = (*ast.ColumnName)(nil)
}
case 2853:
{
parser.yyVAL.item = yyS[yypt-0].item.(*ast.ColumnName)
}
case 2854:
{
parser.yyVAL.statement = &ast.OptimizeTableStmt{
Tables: yyS[yypt-0].item.([]*ast.TableName),
NoWriteToBinLog: yyS[yypt-2].item.(bool),
}
}
case 2855:
{
parser.yyVAL.statement = &ast.KillStmt{
ConnectionID: getUint64FromNUM(yyS[yypt-0].item),
TiDBExtension: yyS[yypt-1].item.(bool),
}
}
case 2856:
{
parser.yyVAL.statement = &ast.KillStmt{
ConnectionID: getUint64FromNUM(yyS[yypt-0].item),
TiDBExtension: yyS[yypt-2].item.(bool),
}
}
case 2857:
{
parser.yyVAL.statement = &ast.KillStmt{
ConnectionID: getUint64FromNUM(yyS[yypt-0].item),
Query: true,
TiDBExtension: yyS[yypt-2].item.(bool),
}
}
case 2858:
{
parser.yyVAL.statement = &ast.KillStmt{
TiDBExtension: yyS[yypt-1].item.(bool),
Expr: yyS[yypt-0].expr,
}
}
case 2859:
{
parser.yyVAL.item = false
}
case 2860:
{
parser.yyVAL.item = true
}
case 2861:
{
parser.yyVAL.statement = &ast.LoadStatsStmt{
Path: yyS[yypt-0].ident,
}
}
case 2862:
{
parser.yyVAL.statement = &ast.LockStatsStmt{
Tables: yyS[yypt-0].item.([]*ast.TableName),
}
}
case 2863:
{
x := yyS[yypt-2].item.(*ast.TableName)
x.PartitionNames = yyS[yypt-0].item.([]ast.CIStr)
parser.yyVAL.statement = &ast.LockStatsStmt{
Tables: []*ast.TableName{x},
}
}
case 2864:
{
x := yyS[yypt-4].item.(*ast.TableName)
x.PartitionNames = yyS[yypt-1].item.([]ast.CIStr)
parser.yyVAL.statement = &ast.LockStatsStmt{
Tables: []*ast.TableName{x},
}
}
case 2865:
{
parser.yyVAL.statement = &ast.UnlockStatsStmt{
Tables: yyS[yypt-0].item.([]*ast.TableName),
}
}
case 2866:
{
x := yyS[yypt-2].item.(*ast.TableName)
x.PartitionNames = yyS[yypt-0].item.([]ast.CIStr)
parser.yyVAL.statement = &ast.UnlockStatsStmt{
Tables: []*ast.TableName{x},
}
}
case 2867:
{
x := yyS[yypt-4].item.(*ast.TableName)
x.PartitionNames = yyS[yypt-1].item.([]ast.CIStr)
parser.yyVAL.statement = &ast.UnlockStatsStmt{
Tables: []*ast.TableName{x},
}
}
case 2868:
{
stmt := &ast.RefreshStatsStmt{
RefreshObjects: yyS[yypt-2].item.([]*ast.StatsObject),
}
if mode, ok := yyS[yypt-1].item.(*ast.RefreshStatsMode); ok {
stmt.RefreshMode = mode
}
stmt.IsClusterWide = yyS[yypt-0].item.(bool)
parser.yyVAL.statement = stmt
}
case 2869:
{
parser.yyVAL.item = []*ast.StatsObject{yyS[yypt-0].item.(*ast.StatsObject)}
}
case 2870:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.StatsObject), yyS[yypt-0].item.(*ast.StatsObject))
}
case 2871:
{
parser.yyVAL.item = nil
}
case 2872:
{
mode := yyS[yypt-0].item.(ast.RefreshStatsMode)
parser.yyVAL.item = &mode
}
case 2873:
{
parser.yyVAL.item = ast.RefreshStatsModeFull
}
case 2874:
{
parser.yyVAL.item = ast.RefreshStatsModeLite
}
case 2875:
{
parser.yyVAL.item = false
}
case 2876:
{
parser.yyVAL.item = true
}
case 2877:
{
parser.yyVAL.item = &ast.StatsObject{
StatsObjectScope: ast.StatsObjectScopeGlobal,
}
}
case 2878:
{
parser.yyVAL.item = &ast.StatsObject{
StatsObjectScope: ast.StatsObjectScopeDatabase,
DBName: ast.NewCIStr(yyS[yypt-2].ident),
}
}
case 2879:
{
parser.yyVAL.item = &ast.StatsObject{
StatsObjectScope: ast.StatsObjectScopeTable,
DBName: ast.NewCIStr(yyS[yypt-2].ident),
TableName: ast.NewCIStr(yyS[yypt-0].ident),
}
}
case 2880:
{
parser.yyVAL.item = &ast.StatsObject{
StatsObjectScope: ast.StatsObjectScopeTable,
TableName: ast.NewCIStr(yyS[yypt-0].ident),
}
}
case 2881:
{
parser.yyVAL.statement = &ast.DropPlacementPolicyStmt{
IfExists: yyS[yypt-1].item.(bool),
PolicyName: ast.NewCIStr(yyS[yypt-0].ident),
}
}
case 2882:
{
parser.yyVAL.statement = &ast.CreateResourceGroupStmt{
IfNotExists: yyS[yypt-2].item.(bool),
ResourceGroupName: ast.NewCIStr(yyS[yypt-1].ident),
ResourceGroupOptionList: yyS[yypt-0].item.([]*ast.ResourceGroupOption),
}
}
case 2883:
{
parser.yyVAL.statement = &ast.AlterResourceGroupStmt{
IfExists: yyS[yypt-2].item.(bool),
ResourceGroupName: ast.NewCIStr(yyS[yypt-1].ident),
ResourceGroupOptionList: yyS[yypt-0].item.([]*ast.ResourceGroupOption),
}
}
case 2884:
{
parser.yyVAL.statement = &ast.DropResourceGroupStmt{
IfExists: yyS[yypt-1].item.(bool),
ResourceGroupName: ast.NewCIStr(yyS[yypt-0].ident),
}
}
case 2885:
{
parser.yyVAL.statement = &ast.CreatePlacementPolicyStmt{
OrReplace: yyS[yypt-5].item.(bool),
IfNotExists: yyS[yypt-2].item.(bool),
PolicyName: ast.NewCIStr(yyS[yypt-1].ident),
PlacementOptions: yyS[yypt-0].item.([]*ast.PlacementOption),
}
}
case 2886:
{
parser.yyVAL.item = &ast.MaskingPolicyState{
Enabled: true,
Explicit: false,
}
}
case 2887:
{
parser.yyVAL.item = &ast.MaskingPolicyState{
Enabled: true,
Explicit: true,
}
}
case 2888:
{
parser.yyVAL.item = &ast.MaskingPolicyState{
Enabled: false,
Explicit: true,
}
}
case 2889:
{
parser.yyVAL.item = ast.MaskingPolicyRestrictOpNone
}
case 2890:
{
parser.yyVAL.item = yyS[yypt-1].item.(ast.MaskingPolicyRestrictOps)
}
case 2891:
{
parser.yyVAL.item = ast.MaskingPolicyRestrictOpNone
}
case 2892:
{
parser.yyVAL.item = yyS[yypt-0].item.(ast.MaskingPolicyRestrictOps)
}
case 2893:
{
parser.yyVAL.item = yyS[yypt-2].item.(ast.MaskingPolicyRestrictOps) | yyS[yypt-0].item.(ast.MaskingPolicyRestrictOps)
}
case 2894:
{
op, ok := getMaskingPolicyRestrictOp(yyS[yypt-0].ident)
if !ok {
yylex.AppendError(yylex.Errorf("unsupported masking policy restrict operation: %s", yyS[yypt-0].ident))
return 1
}
parser.yyVAL.item = op
}
case 2895:
{
if yyS[yypt-13].item.(bool) && yyS[yypt-10].item.(bool) {
yylex.AppendError(yylex.Errorf("'OR REPLACE' and 'IF NOT EXISTS' are mutually exclusive"))
return 1
}
state := yyS[yypt-0].item.(*ast.MaskingPolicyState)
parser.yyVAL.statement = &ast.CreateMaskingPolicyStmt{
OrReplace: yyS[yypt-13].item.(bool),
IfNotExists: yyS[yypt-10].item.(bool),
PolicyName: ast.NewCIStr(yyS[yypt-9].ident),
Table: yyS[yypt-7].item.(*ast.TableName),
Column: &ast.ColumnName{Name: ast.NewCIStr(yyS[yypt-5].ident)},
Expr: yyS[yypt-2].expr,
RestrictOps: yyS[yypt-1].item.(ast.MaskingPolicyRestrictOps),
MaskingPolicyState: *state,
}
}
case 2896:
{
parser.yyVAL.statement = &ast.AlterPlacementPolicyStmt{
IfExists: yyS[yypt-2].item.(bool),
PolicyName: ast.NewCIStr(yyS[yypt-1].ident),
PlacementOptions: yyS[yypt-0].item.([]*ast.PlacementOption),
}
}
case 2897:
{
parser.yyVAL.statement = &ast.CreateSequenceStmt{
IfNotExists: yyS[yypt-3].item.(bool),
Name: yyS[yypt-2].item.(*ast.TableName),
SeqOptions: yyS[yypt-1].item.([]*ast.SequenceOption),
TblOptions: yyS[yypt-0].item.([]*ast.TableOption),
}
}
case 2898:
{
parser.yyVAL.item = []*ast.SequenceOption{}
}
case 2900:
{
parser.yyVAL.item = []*ast.SequenceOption{yyS[yypt-0].item.(*ast.SequenceOption)}
}
case 2901:
{
parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.SequenceOption), yyS[yypt-0].item.(*ast.SequenceOption))
}
case 2902:
{
parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceOptionIncrementBy, IntValue: yyS[yypt-0].item.(int64)}
}
case 2903:
{
parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceOptionIncrementBy, IntValue: yyS[yypt-0].item.(int64)}
}
case 2904:
{
parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceStartWith, IntValue: yyS[yypt-0].item.(int64)}
}
case 2905:
{
parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceStartWith, IntValue: yyS[yypt-0].item.(int64)}
}
case 2906:
{
parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceMinValue, IntValue: yyS[yypt-0].item.(int64)}
}
case 2907:
{
parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceNoMinValue}
}
case 2908:
{
parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceNoMinValue}
}
case 2909:
{
parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceMaxValue, IntValue: yyS[yypt-0].item.(int64)}
}
case 2910:
{
parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceNoMaxValue}
}
case 2911:
{
parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceNoMaxValue}
}
case 2912:
{
parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceCache, IntValue: yyS[yypt-0].item.(int64)}
}
case 2913:
{
parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceNoCache}
}
case 2914:
{
parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceNoCache}
}
case 2915:
{
parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceCycle}
}
case 2916:
{
parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceNoCycle}
}
case 2917:
{
parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceNoCycle}
}
case 2919:
{
parser.yyVAL.item = yyS[yypt-0].item
}
case 2920:
{
unsigned_num := getUint64FromNUM(yyS[yypt-0].item)
if unsigned_num > 9223372036854775808 {
yylex.AppendError(yylex.Errorf("the Signed Value should be at the range of [-9223372036854775808, 9223372036854775807]."))
return 1
} else if unsigned_num == 9223372036854775808 {
signed_one := int64(1)
parser.yyVAL.item = signed_one << 63
} else {
parser.yyVAL.item = -int64(unsigned_num)
}
}
case 2921:
{
parser.yyVAL.statement = &ast.DropSequenceStmt{
IfExists: yyS[yypt-1].item.(bool),
Sequences: yyS[yypt-0].item.([]*ast.TableName),
}
}
case 2922:
{
parser.yyVAL.statement = &ast.AlterSequenceStmt{
IfExists: yyS[yypt-2].item.(bool),
Name: yyS[yypt-1].item.(*ast.TableName),
SeqOptions: yyS[yypt-0].item.([]*ast.SequenceOption),
}
}
case 2923:
{
parser.yyVAL.item = []*ast.SequenceOption{yyS[yypt-0].item.(*ast.SequenceOption)}
}
case 2924:
{
parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.SequenceOption), yyS[yypt-0].item.(*ast.SequenceOption))
}
case 2926:
{
parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceRestart}
}
case 2927:
{
parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceRestartWith, IntValue: yyS[yypt-0].item.(int64)}
}
case 2928:
{
parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceRestartWith, IntValue: yyS[yypt-0].item.(int64)}
}
case 2929:
{
// Parse it but will ignore it
switch yyS[yypt-0].ident {
case "Y", "y":
yylex.AppendError(yylex.Errorf("The ENCRYPTION clause is parsed but ignored by all storage engines."))
parser.lastErrorAsWarn()
case "N", "n":
break
default:
yylex.AppendError(ErrWrongValue.GenWithStackByArgs("argument (should be Y or N)", yyS[yypt-0].ident))
return 1
}
parser.yyVAL.ident = yyS[yypt-0].ident
}
case 2930:
{
parser.yyVAL.item = append([]*ast.RowExpr{}, yyS[yypt-0].item.(*ast.RowExpr))
}
case 2931:
{
parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.RowExpr), yyS[yypt-0].item.(*ast.RowExpr))
}
case 2932:
{
parser.yyVAL.item = &ast.RowExpr{Values: yyS[yypt-0].item.([]ast.ExprNode)}
}
case 2933:
{
x := &ast.PlanReplayerStmt{
Stmt: yyS[yypt-0].statement,
Analyze: false,
Load: false,
File: "",
Where: nil,
OrderBy: nil,
Limit: nil,
}
if yyS[yypt-2].item != nil {
x.HistoricalStatsInfo = yyS[yypt-2].item.(*ast.AsOfClause)
}
startOffset := parser.startOffset(&yyS[yypt])
parser.setNodeText(x.Stmt, strings.TrimSpace(parser.src[startOffset:]))
parser.yyVAL.statement = x
}
case 2934:
{
x := &ast.PlanReplayerStmt{
Stmt: yyS[yypt-0].statement,
Analyze: true,
Load: false,
File: "",
Where: nil,
OrderBy: nil,
Limit: nil,
}
if yyS[yypt-3].item != nil {
x.HistoricalStatsInfo = yyS[yypt-3].item.(*ast.AsOfClause)
}
startOffset := parser.startOffset(&yyS[yypt])
parser.setNodeText(x.Stmt, strings.TrimSpace(parser.src[startOffset:]))
parser.yyVAL.statement = x
}
case 2935:
{
x := &ast.PlanReplayerStmt{
Stmt: nil,
Analyze: false,
Load: false,
File: "",
}
if yyS[yypt-6].item != nil {
x.HistoricalStatsInfo = yyS[yypt-6].item.(*ast.AsOfClause)
}
if yyS[yypt-2].item != nil {
x.Where = yyS[yypt-2].item.(ast.ExprNode)
}
if yyS[yypt-1].item != nil {
x.OrderBy = yyS[yypt-1].item.(*ast.OrderByClause)
}
if yyS[yypt-0].item != nil {
x.Limit = yyS[yypt-0].item.(*ast.Limit)
}
parser.yyVAL.statement = x
}
case 2936:
{
x := &ast.PlanReplayerStmt{
Stmt: nil,
Analyze: true,
Load: false,
File: "",
}
if yyS[yypt-7].item != nil {
x.HistoricalStatsInfo = yyS[yypt-7].item.(*ast.AsOfClause)
}
if yyS[yypt-2].item != nil {
x.Where = yyS[yypt-2].item.(ast.ExprNode)
}
if yyS[yypt-1].item != nil {
x.OrderBy = yyS[yypt-1].item.(*ast.OrderByClause)
}
if yyS[yypt-0].item != nil {
x.Limit = yyS[yypt-0].item.(*ast.Limit)
}
parser.yyVAL.statement = x
}
case 2937:
{
x := &ast.PlanReplayerStmt{
Stmt: nil,
Analyze: false,
Load: false,
File: yyS[yypt-0].ident,
}
if yyS[yypt-2].item != nil {
x.HistoricalStatsInfo = yyS[yypt-2].item.(*ast.AsOfClause)
}
parser.yyVAL.statement = x
}
case 2938:
{
x := &ast.PlanReplayerStmt{
Stmt: nil,
Analyze: true,
Load: false,
File: yyS[yypt-0].ident,
}
if yyS[yypt-3].item != nil {
x.HistoricalStatsInfo = yyS[yypt-3].item.(*ast.AsOfClause)
}
parser.yyVAL.statement = x
}
case 2939:
{
x := &ast.PlanReplayerStmt{
Stmt: nil,
Analyze: false,
Load: false,
File: "",
StmtList: yyS[yypt-1].item.([]string),
}
if yyS[yypt-4].item != nil {
x.HistoricalStatsInfo = yyS[yypt-4].item.(*ast.AsOfClause)
}
parser.yyVAL.statement = x
}
case 2940:
{
x := &ast.PlanReplayerStmt{
Stmt: nil,
Analyze: true,
Load: false,
File: "",
StmtList: yyS[yypt-1].item.([]string),
}
if yyS[yypt-5].item != nil {
x.HistoricalStatsInfo = yyS[yypt-5].item.(*ast.AsOfClause)
}
parser.yyVAL.statement = x
}
case 2941:
{
x := &ast.PlanReplayerStmt{
Stmt: nil,
Analyze: false,
Load: true,
File: yyS[yypt-0].ident,
Where: nil,
OrderBy: nil,
Limit: nil,
}
parser.yyVAL.statement = x
}
case 2942:
{
x := &ast.PlanReplayerStmt{
Stmt: nil,
Analyze: false,
Capture: true,
SQLDigest: yyS[yypt-1].ident,
PlanDigest: yyS[yypt-0].ident,
Where: nil,
OrderBy: nil,
Limit: nil,
}
parser.yyVAL.statement = x
}
case 2943:
{
x := &ast.PlanReplayerStmt{
Stmt: nil,
Analyze: false,
Remove: true,
SQLDigest: yyS[yypt-1].ident,
PlanDigest: yyS[yypt-0].ident,
Where: nil,
OrderBy: nil,
Limit: nil,
}
parser.yyVAL.statement = x
}
case 2944:
{
parser.yyVAL.item = nil
}
case 2945:
{
parser.yyVAL.item = yyS[yypt-0].item.(*ast.AsOfClause)
}
case 2946:
{
x := &ast.TrafficStmt{
OpType: ast.TrafficOpCapture,
Dir: yyS[yypt-1].ident,
}
if yyS[yypt-0].item != nil {
x.Options = yyS[yypt-0].item.([]*ast.TrafficOption)
}
parser.yyVAL.statement = x
}
case 2947:
{
x := &ast.TrafficStmt{
OpType: ast.TrafficOpReplay,
Dir: yyS[yypt-1].ident,
}
if yyS[yypt-0].item != nil {
x.Options = yyS[yypt-0].item.([]*ast.TrafficOption)
}
parser.yyVAL.statement = x
}
case 2948:
{
parser.yyVAL.statement = &ast.TrafficStmt{
OpType: ast.TrafficOpShow,
}
}
case 2949:
{
parser.yyVAL.statement = &ast.TrafficStmt{
OpType: ast.TrafficOpCancel,
}
}
case 2950:
{
parser.yyVAL.item = []*ast.TrafficOption{yyS[yypt-0].item.(*ast.TrafficOption)}
}
case 2951:
{
parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.TrafficOption), yyS[yypt-0].item.(*ast.TrafficOption))
}
case 2952:
{
_, err := time.ParseDuration(yyS[yypt-0].ident)
if err != nil {
yylex.AppendError(yylex.Errorf("The DURATION option is not a valid duration: %s", err.Error()))
return 1
}
parser.yyVAL.item = &ast.TrafficOption{OptionType: ast.TrafficOptionDuration, StrValue: yyS[yypt-0].ident}
}
case 2953:
{
parser.yyVAL.item = &ast.TrafficOption{OptionType: ast.TrafficOptionEncryptionMethod, StrValue: yyS[yypt-0].ident}
}
case 2954:
{
parser.yyVAL.item = &ast.TrafficOption{OptionType: ast.TrafficOptionCompress, BoolValue: yyS[yypt-0].item.(bool)}
}
case 2955:
{
parser.yyVAL.item = []*ast.TrafficOption{yyS[yypt-0].item.(*ast.TrafficOption)}
}
case 2956:
{
parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.TrafficOption), yyS[yypt-0].item.(*ast.TrafficOption))
}
case 2957:
{
parser.yyVAL.item = &ast.TrafficOption{OptionType: ast.TrafficOptionUsername, StrValue: yyS[yypt-0].ident}
}
case 2958:
{
parser.yyVAL.item = &ast.TrafficOption{OptionType: ast.TrafficOptionPassword, StrValue: yyS[yypt-0].ident}
}
case 2959:
{
parser.yyVAL.item = &ast.TrafficOption{OptionType: ast.TrafficOptionSpeed, FloatValue: ast.NewValueExpr(yyS[yypt-0].item, "", "")}
}
case 2960:
{
parser.yyVAL.item = &ast.TrafficOption{OptionType: ast.TrafficOptionReadOnly, BoolValue: yyS[yypt-0].item.(bool)}
}
case 2961:
{
parser.yyVAL.item = []*ast.StoreParameter{}
}
case 2962:
{
parser.yyVAL.item = yyS[yypt-0].item
}
case 2963:
{
l := yyS[yypt-2].item.([]*ast.StoreParameter)
l = append(l, yyS[yypt-0].item.(*ast.StoreParameter))
parser.yyVAL.item = l
}
case 2964:
{
parser.yyVAL.item = []*ast.StoreParameter{yyS[yypt-0].item.(*ast.StoreParameter)}
}
case 2965:
{
x := &ast.StoreParameter{
Paramstatus: yyS[yypt-2].item.(int),
ParamType: yyS[yypt-0].item.(*types.FieldType),
ParamName: yyS[yypt-1].ident,
}
parser.yyVAL.item = x
}
case 2966:
{
parser.yyVAL.item = ast.MODE_IN
}
case 2967:
{
parser.yyVAL.item = ast.MODE_IN
}
case 2968:
{
parser.yyVAL.item = ast.MODE_OUT
}
case 2969:
{
parser.yyVAL.item = ast.MODE_INOUT
}
case 2972:
{
var sel ast.StmtNode
switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) {
case *ast.SelectStmt:
x.IsInBraces = true
sel = x
case *ast.SetOprStmt:
x.IsInBraces = true
sel = x
}
parser.yyVAL.statement = sel
}
case 2987:
{
var sel ast.StmtNode
switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) {
case *ast.SelectStmt:
x.IsInBraces = true
sel = x
case *ast.SetOprStmt:
x.IsInBraces = true
sel = x
}
parser.yyVAL.statement = sel
}
case 2989:
{
parser.yyVAL.statement = yyS[yypt-0].statement
}
case 2990:
{
parser.yyVAL.item = []string{strings.ToLower(yyS[yypt-0].ident)}
}
case 2991:
{
l := yyS[yypt-2].item.([]string)
l = append(l, strings.ToLower(yyS[yypt-0].ident))
parser.yyVAL.item = l
}
case 2992:
{
parser.yyVAL.item = nil
}
case 2993:
{
parser.yyVAL.item = yyS[yypt-0].expr
}
case 2994:
{
x := &ast.ProcedureDecl{
DeclNames: yyS[yypt-2].item.([]string),
DeclType: yyS[yypt-1].item.(*types.FieldType),
}
if yyS[yypt-0].item != nil {
x.DeclDefault = yyS[yypt-0].item.(ast.ExprNode)
}
parser.yyVAL.item = x
}
case 2995:
{
name := strings.ToLower(yyS[yypt-3].ident)
parser.yyVAL.item = &ast.ProcedureCursor{
CurName: name,
Selectstring: yyS[yypt-0].statement.(ast.StmtNode),
}
}
case 2996:
{
parser.yyVAL.item = &ast.ProcedureErrorControl{
ControlHandle: yyS[yypt-4].item.(int),
ErrorCon: yyS[yypt-1].item.([]ast.ErrNode),
Operate: yyS[yypt-0].statement.(ast.StmtNode),
}
}
case 2997:
{
parser.yyVAL.item = ast.PROCEDUR_CONTINUE
}
case 2998:
{
parser.yyVAL.item = ast.PROCEDUR_EXIT
}
case 2999:
{
parser.yyVAL.item = []ast.ErrNode{yyS[yypt-0].statement.(ast.ErrNode)}
}
case 3000:
{
l := yyS[yypt-2].item.([]ast.ErrNode)
l = append(l, yyS[yypt-0].statement.(ast.ErrNode))
parser.yyVAL.item = l
}
case 3001:
{
parser.yyVAL.statement = yyS[yypt-0].statement.(ast.ErrNode)
}
case 3002:
{
parser.yyVAL.statement = &ast.ProcedureErrorCon{
ErrorCon: ast.PROCEDUR_SQLWARNING,
}
}
case 3003:
{
parser.yyVAL.statement = &ast.ProcedureErrorCon{
ErrorCon: ast.PROCEDUR_NOT_FOUND,
}
}
case 3004:
{
parser.yyVAL.statement = &ast.ProcedureErrorCon{
ErrorCon: ast.PROCEDUR_SQLEXCEPTION,
}
}
case 3005:
{
parser.yyVAL.statement = &ast.ProcedureErrorVal{
ErrorNum: getUint64FromNUM(yyS[yypt-0].item),
}
}
case 3006:
{
parser.yyVAL.statement = &ast.ProcedureErrorState{
CodeStatus: yyS[yypt-0].ident,
}
}
case 3009:
{
name := strings.ToLower(yyS[yypt-0].ident)
parser.yyVAL.statement = &ast.ProcedureOpenCur{
CurName: name,
}
}
case 3010:
{
name := strings.ToLower(yyS[yypt-2].ident)
parser.yyVAL.statement = &ast.ProcedureFetchInto{
CurName: name,
Variables: yyS[yypt-0].item.([]string),
}
}
case 3011:
{
name := strings.ToLower(yyS[yypt-0].ident)
parser.yyVAL.statement = &ast.ProcedureCloseCur{
CurName: name,
}
}
case 3015:
{
parser.yyVAL.item = []string{strings.ToLower(yyS[yypt-0].ident)}
}
case 3016:
{
l := yyS[yypt-2].item.([]string)
l = append(l, strings.ToLower(yyS[yypt-0].ident))
parser.yyVAL.item = l
}
case 3017:
{
parser.yyVAL.item = []ast.DeclNode{}
}
case 3018:
{
parser.yyVAL.item = yyS[yypt-0].item
}
case 3019:
{
parser.yyVAL.item = []ast.DeclNode{yyS[yypt-1].item.(ast.DeclNode)}
}
case 3020:
{
l := yyS[yypt-2].item.([]ast.DeclNode)
l = append(l, yyS[yypt-1].item.(ast.DeclNode))
parser.yyVAL.item = l
}
case 3021:
{
parser.yyVAL.item = []ast.StmtNode{}
}
case 3022:
{
l := yyS[yypt-2].item.([]ast.StmtNode)
l = append(l, yyS[yypt-1].statement.(ast.StmtNode))
parser.yyVAL.item = l
}
case 3023:
{
parser.yyVAL.item = []ast.StmtNode{yyS[yypt-1].statement.(ast.StmtNode)}
}
case 3024:
{
l := yyS[yypt-2].item.([]ast.StmtNode)
l = append(l, yyS[yypt-1].statement.(ast.StmtNode))
parser.yyVAL.item = l
}
case 3025:
{
x := &ast.ProcedureBlock{
ProcedureVars: yyS[yypt-2].item.([]ast.DeclNode),
ProcedureProcStmts: yyS[yypt-1].item.([]ast.StmtNode),
}
parser.yyVAL.statement = x
}
case 3026:
{
parser.yyVAL.statement = &ast.ProcedureIfInfo{
IfBody: yyS[yypt-2].statement.(*ast.ProcedureIfBlock),
}
}
case 3027:
{
ifBlock := &ast.ProcedureIfBlock{
IfExpr: yyS[yypt-3].expr.(ast.ExprNode),
ProcedureIfStmts: yyS[yypt-1].item.([]ast.StmtNode),
}
if yyS[yypt-0].statement != nil {
ifBlock.ProcedureElseStmt = yyS[yypt-0].statement.(ast.StmtNode)
}
parser.yyVAL.statement = ifBlock
}
case 3028:
{
parser.yyVAL.statement = nil
}
case 3029:
{
parser.yyVAL.statement = &ast.ProcedureElseIfBlock{
ProcedureIfStmt: yyS[yypt-0].statement.(*ast.ProcedureIfBlock),
}
}
case 3030:
{
parser.yyVAL.statement = &ast.ProcedureElseBlock{
ProcedureIfStmts: yyS[yypt-0].item.([]ast.StmtNode),
}
}
case 3031:
{
parser.yyVAL.statement = yyS[yypt-0].statement
}
case 3032:
{
parser.yyVAL.statement = yyS[yypt-0].statement
}
case 3033:
{
parser.yyVAL.item = []*ast.SimpleWhenThenStmt{yyS[yypt-0].statement.(*ast.SimpleWhenThenStmt)}
}
case 3034:
{
l := yyS[yypt-1].item.([]*ast.SimpleWhenThenStmt)
l = append(l, yyS[yypt-0].statement.(*ast.SimpleWhenThenStmt))
parser.yyVAL.item = l
}
case 3035:
{
parser.yyVAL.item = []*ast.SearchWhenThenStmt{yyS[yypt-0].statement.(*ast.SearchWhenThenStmt)}
}
case 3036:
{
l := yyS[yypt-1].item.([]*ast.SearchWhenThenStmt)
l = append(l, yyS[yypt-0].statement.(*ast.SearchWhenThenStmt))
parser.yyVAL.item = l
}
case 3037:
{
parser.yyVAL.statement = &ast.SimpleWhenThenStmt{
Expr: yyS[yypt-2].expr.(ast.ExprNode),
ProcedureStmts: yyS[yypt-0].item.([]ast.StmtNode),
}
}
case 3038:
{
parser.yyVAL.statement = &ast.SearchWhenThenStmt{
Expr: yyS[yypt-2].expr.(ast.ExprNode),
ProcedureStmts: yyS[yypt-0].item.([]ast.StmtNode),
}
}
case 3039:
{
parser.yyVAL.item = nil
}
case 3040:
{
parser.yyVAL.item = yyS[yypt-0].item.([]ast.StmtNode)
}
case 3041:
{
caseStmt := &ast.SimpleCaseStmt{
Condition: yyS[yypt-4].expr.(ast.ExprNode),
WhenCases: yyS[yypt-3].item.([]*ast.SimpleWhenThenStmt),
}
if yyS[yypt-2].item != nil {
caseStmt.ElseCases = yyS[yypt-2].item.([]ast.StmtNode)
}
parser.yyVAL.statement = caseStmt
}
case 3042:
{
caseStmt := &ast.SearchCaseStmt{
WhenCases: yyS[yypt-3].item.([]*ast.SearchWhenThenStmt),
}
if yyS[yypt-2].item != nil {
caseStmt.ElseCases = yyS[yypt-2].item.([]ast.StmtNode)
}
parser.yyVAL.statement = caseStmt
}
case 3043:
{
parser.yyVAL.statement = yyS[yypt-0].statement
}
case 3044:
{
parser.yyVAL.statement = &ast.ProcedureWhileStmt{
Condition: yyS[yypt-4].expr.(ast.ExprNode),
Body: yyS[yypt-2].item.([]ast.StmtNode),
}
}
case 3045:
{
parser.yyVAL.statement = &ast.ProcedureRepeatStmt{
Body: yyS[yypt-4].item.([]ast.StmtNode),
Condition: yyS[yypt-2].expr.(ast.ExprNode),
}
}
case 3046:
{
labelBlock := &ast.ProcedureLabelBlock{
LabelName: yyS[yypt-3].ident,
Block: yyS[yypt-1].statement.(*ast.ProcedureBlock),
}
if yyS[yypt-0].ident != "" && (yyS[yypt-3].ident != yyS[yypt-0].ident) {
labelBlock.LabelError = true
labelBlock.LabelEnd = yyS[yypt-0].ident
}
parser.yyVAL.statement = labelBlock
}
case 3047:
{
parser.yyVAL.ident = ""
}
case 3048:
{
parser.yyVAL.ident = yyS[yypt-0].ident
}
case 3049:
{
labelLoop := &ast.ProcedureLabelLoop{
LabelName: yyS[yypt-3].ident,
Block: yyS[yypt-1].statement.(ast.StmtNode),
}
if yyS[yypt-0].ident != "" && (yyS[yypt-3].ident != yyS[yypt-0].ident) {
labelLoop.LabelError = true
labelLoop.LabelEnd = yyS[yypt-0].ident
}
parser.yyVAL.statement = labelLoop
}
case 3050:
{
parser.yyVAL.statement = &ast.ProcedureJump{
Name: yyS[yypt-0].ident,
IsLeave: false,
}
}
case 3051:
{
parser.yyVAL.statement = &ast.ProcedureJump{
Name: yyS[yypt-0].ident,
IsLeave: true,
}
}
case 3064:
{
x := &ast.ProcedureInfo{
IfNotExists: yyS[yypt-5].item.(bool),
ProcedureName: yyS[yypt-4].item.(*ast.TableName),
ProcedureParam: yyS[yypt-2].item.([]*ast.StoreParameter),
ProcedureBody: yyS[yypt-0].statement,
}
startOffset := parser.startOffset(&yyS[yypt])
originStmt := yyS[yypt-0].statement
parser.setNodeText(originStmt, strings.TrimSpace(parser.src[startOffset:parser.yylval.offset]))
startOffset = parser.startOffset(&yyS[yypt-3])
if parser.src[startOffset] == '(' {
startOffset++
}
endOffset := parser.startOffset(&yyS[yypt-1])
x.ProcedureParamStr = strings.TrimSpace(parser.src[startOffset:endOffset])
parser.yyVAL.statement = x
}
case 3065:
{
parser.yyVAL.statement = &ast.DropProcedureStmt{
IfExists: yyS[yypt-1].item.(bool),
ProcedureName: yyS[yypt-0].item.(*ast.TableName),
}
}
case 3066:
{
parser.yyVAL.statement = yyS[yypt-0].item.(*ast.CalibrateResourceStmt)
}
case 3067:
{
parser.yyVAL.item = &ast.CalibrateResourceStmt{}
}
case 3068:
{
parser.yyVAL.item = &ast.CalibrateResourceStmt{
DynamicCalibrateResourceOptionList: yyS[yypt-0].item.([]*ast.DynamicCalibrateResourceOption),
}
}
case 3069:
{
parser.yyVAL.item = &ast.CalibrateResourceStmt{
Tp: yyS[yypt-0].item.(ast.CalibrateResourceType),
}
}
case 3070:
{
parser.yyVAL.item = []*ast.DynamicCalibrateResourceOption{yyS[yypt-0].item.(*ast.DynamicCalibrateResourceOption)}
}
case 3071:
{
if yyS[yypt-1].item.([]*ast.DynamicCalibrateResourceOption)[0].Tp == yyS[yypt-0].item.(*ast.DynamicCalibrateResourceOption).Tp ||
(len(yyS[yypt-1].item.([]*ast.DynamicCalibrateResourceOption)) > 1 && yyS[yypt-1].item.([]*ast.DynamicCalibrateResourceOption)[1].Tp == yyS[yypt-0].item.(*ast.DynamicCalibrateResourceOption).Tp) {
yylex.AppendError(yylex.Errorf("Dupliated options specified"))
return 1
}
parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.DynamicCalibrateResourceOption), yyS[yypt-0].item.(*ast.DynamicCalibrateResourceOption))
}
case 3072:
{
if yyS[yypt-2].item.([]*ast.DynamicCalibrateResourceOption)[0].Tp == yyS[yypt-0].item.(*ast.DynamicCalibrateResourceOption).Tp ||
(len(yyS[yypt-2].item.([]*ast.DynamicCalibrateResourceOption)) > 1 && yyS[yypt-2].item.([]*ast.DynamicCalibrateResourceOption)[1].Tp == yyS[yypt-0].item.(*ast.DynamicCalibrateResourceOption).Tp) {
yylex.AppendError(yylex.Errorf("Dupliated options specified"))
return 1
}
parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.DynamicCalibrateResourceOption), yyS[yypt-0].item.(*ast.DynamicCalibrateResourceOption))
}
case 3073:
{
parser.yyVAL.item = &ast.DynamicCalibrateResourceOption{Tp: ast.CalibrateStartTime, Ts: yyS[yypt-0].expr.(ast.ExprNode)}
}
case 3074:
{
parser.yyVAL.item = &ast.DynamicCalibrateResourceOption{Tp: ast.CalibrateEndTime, Ts: yyS[yypt-0].expr.(ast.ExprNode)}
}
case 3075:
{
_, err := duration.ParseDuration(yyS[yypt-0].ident)
if err != nil {
yylex.AppendError(yylex.Errorf("The DURATION option is not a valid duration: %s", err.Error()))
return 1
}
parser.yyVAL.item = &ast.DynamicCalibrateResourceOption{Tp: ast.CalibrateDuration, StrValue: yyS[yypt-0].ident}
}
case 3076:
{
parser.yyVAL.item = &ast.DynamicCalibrateResourceOption{Tp: ast.CalibrateDuration, Ts: yyS[yypt-1].expr.(ast.ExprNode), Unit: yyS[yypt-0].item.(ast.TimeUnitType)}
}
case 3077:
{
parser.yyVAL.item = ast.TPCC
}
case 3078:
{
parser.yyVAL.item = ast.OLTPREADWRITE
}
case 3079:
{
parser.yyVAL.item = ast.OLTPREADONLY
}
case 3080:
{
parser.yyVAL.item = ast.OLTPWRITEONLY
}
case 3081:
{
parser.yyVAL.item = ast.TPCH10
}
case 3082:
{
parser.yyVAL.statement = &ast.AddQueryWatchStmt{
QueryWatchOptionList: yyS[yypt-0].item.([]*ast.QueryWatchOption),
}
}
case 3083:
{
parser.yyVAL.item = []*ast.QueryWatchOption{yyS[yypt-0].item.(*ast.QueryWatchOption)}
}
case 3084:
{
if !ast.CheckQueryWatchAppend(yyS[yypt-1].item.([]*ast.QueryWatchOption), yyS[yypt-0].item.(*ast.QueryWatchOption)) {
yylex.AppendError(yylex.Errorf("Dupliated options specified"))
return 1
}
parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.QueryWatchOption), yyS[yypt-0].item.(*ast.QueryWatchOption))
}
case 3085:
{
if !ast.CheckQueryWatchAppend(yyS[yypt-2].item.([]*ast.QueryWatchOption), yyS[yypt-0].item.(*ast.QueryWatchOption)) {
yylex.AppendError(yylex.Errorf("Dupliated options specified"))
return 1
}
parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.QueryWatchOption), yyS[yypt-0].item.(*ast.QueryWatchOption))
}
case 3086:
{
parser.yyVAL.item = &ast.QueryWatchOption{
Tp: ast.QueryWatchResourceGroup,
ResourceGroupOption: &ast.QueryWatchResourceGroupOption{
GroupNameStr: ast.NewCIStr(yyS[yypt-0].ident),
},
}
}
case 3087:
{
parser.yyVAL.item = &ast.QueryWatchOption{
Tp: ast.QueryWatchResourceGroup,
ResourceGroupOption: &ast.QueryWatchResourceGroupOption{
GroupNameExpr: yyS[yypt-0].expr,
},
}
}
case 3088:
{
parser.yyVAL.item = &ast.QueryWatchOption{
Tp: ast.QueryWatchAction,
ActionOption: yyS[yypt-0].item.(*ast.ResourceGroupRunawayActionOption),
}
}
case 3089:
{
parser.yyVAL.item = &ast.QueryWatchOption{
Tp: ast.QueryWatchType,
TextOption: yyS[yypt-0].item.(*ast.QueryWatchTextOption),
}
}
case 3090:
{
parser.yyVAL.item = &ast.QueryWatchTextOption{
Type: ast.WatchSimilar,
PatternExpr: yyS[yypt-0].expr,
}
}
case 3091:
{
parser.yyVAL.item = &ast.QueryWatchTextOption{
Type: ast.WatchPlan,
PatternExpr: yyS[yypt-0].expr,
}
}
case 3092:
{
parser.yyVAL.item = &ast.QueryWatchTextOption{
Type: yyS[yypt-2].item.(ast.RunawayWatchType),
PatternExpr: yyS[yypt-0].expr,
TypeSpecified: true,
}
}
case 3093:
{
parser.yyVAL.statement = &ast.DropQueryWatchStmt{
IntValue: yyS[yypt-0].item.(int64),
}
}
case 3094:
{
parser.yyVAL.statement = &ast.DropQueryWatchStmt{
GroupNameStr: ast.NewCIStr(yyS[yypt-0].ident),
}
}
case 3095:
{
parser.yyVAL.statement = &ast.DropQueryWatchStmt{
GroupNameExpr: yyS[yypt-0].expr.(ast.ExprNode),
}
}
}
if !parser.lexer.skipPositionRecording {
yySetOffset(parser.yyVAL, parser.yyVAL.offset)
}
if yyEx != nil && yyEx.Reduced(r, exState, parser.yyVAL) {
return -1
}
goto yystack /* stack new state and value */
}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package terror
import (
"fmt"
"runtime/debug"
"strconv"
"strings"
"sync"
"sync/atomic"
"github.com/pingcap/errors"
"github.com/pingcap/log"
"github.com/pingcap/tidb/pkg/parser/mysql"
"go.uber.org/zap"
)
// ErrCode represents a specific error type in a error class.
// Same error code can be used in different error classes.
type ErrCode int
const (
// Executor error codes.
// CodeUnknown is for errors of unknown reason.
CodeUnknown ErrCode = -1
// CodeExecResultIsEmpty indicates execution result is empty.
CodeExecResultIsEmpty ErrCode = 3
// Expression error codes.
// CodeMissConnectionID indicates connection id is missing.
CodeMissConnectionID ErrCode = 1
// Special error codes.
// CodeResultUndetermined indicates the sql execution result is undetermined.
CodeResultUndetermined ErrCode = 2
)
// ErrClass represents a class of errors.
type ErrClass int
// Error implements error interface.
type Error = errors.Error
// Error classes.
var (
ClassAutoid = RegisterErrorClass(1, "autoid")
ClassDDL = RegisterErrorClass(2, "ddl")
ClassDomain = RegisterErrorClass(3, "domain")
ClassEvaluator = RegisterErrorClass(4, "evaluator")
ClassExecutor = RegisterErrorClass(5, "executor")
ClassExpression = RegisterErrorClass(6, "expression")
ClassAdmin = RegisterErrorClass(7, "admin")
ClassKV = RegisterErrorClass(8, "kv")
ClassMeta = RegisterErrorClass(9, "meta")
ClassOptimizer = RegisterErrorClass(10, "planner")
ClassParser = RegisterErrorClass(11, "parser")
ClassPerfSchema = RegisterErrorClass(12, "perfschema")
ClassPrivilege = RegisterErrorClass(13, "privilege")
ClassSchema = RegisterErrorClass(14, "schema")
ClassServer = RegisterErrorClass(15, "server")
ClassStructure = RegisterErrorClass(16, "structure")
ClassVariable = RegisterErrorClass(17, "variable")
ClassXEval = RegisterErrorClass(18, "xeval")
ClassTable = RegisterErrorClass(19, "table")
ClassTypes = RegisterErrorClass(20, "types")
ClassGlobal = RegisterErrorClass(21, "global")
ClassMockTikv = RegisterErrorClass(22, "mocktikv")
ClassJSON = RegisterErrorClass(23, "json")
ClassTiKV = RegisterErrorClass(24, "tikv")
ClassSession = RegisterErrorClass(25, "session")
ClassPlugin = RegisterErrorClass(26, "plugin")
ClassUtil = RegisterErrorClass(27, "util")
// Add more as needed.
)
var errClass2Desc = make(map[ErrClass]string)
var rfcCode2errClass = newCode2ErrClassMap()
type code2ErrClassMap struct {
data sync.Map
}
func newCode2ErrClassMap() *code2ErrClassMap {
return &code2ErrClassMap{
data: sync.Map{},
}
}
func (m *code2ErrClassMap) Get(key string) (ErrClass, bool) {
ret, have := m.data.Load(key)
if !have {
return ErrClass(-1), false
}
return ret.(ErrClass), true
}
func (m *code2ErrClassMap) Put(key string, err ErrClass) {
m.data.Store(key, err)
}
var registerFinish uint32
// RegisterFinish makes the register of new error panic.
// The use pattern should be register all the errors during initialization, and then call RegisterFinish.
func RegisterFinish() {
atomic.StoreUint32(®isterFinish, 1)
}
func frozen() bool {
return atomic.LoadUint32(®isterFinish) != 0
}
// RegisterErrorClass registers new error class for terror.
func RegisterErrorClass(classCode int, desc string) ErrClass {
errClass := ErrClass(classCode)
if _, exists := errClass2Desc[errClass]; exists {
panic(fmt.Sprintf("duplicate register ClassCode %d - %s", classCode, desc))
}
errClass2Desc[errClass] = desc
return errClass
}
// String implements fmt.Stringer interface.
func (ec ErrClass) String() string {
if s, exists := errClass2Desc[ec]; exists {
return s
}
return strconv.Itoa(int(ec))
}
// EqualClass returns true if err is *Error with the same class.
func (ec ErrClass) EqualClass(err error) bool {
e := errors.Cause(err)
if e == nil {
return false
}
if te, ok := e.(*Error); ok {
rfcCode := te.RFCCode()
if index := strings.Index(string(rfcCode), ":"); index > 0 {
if class, has := rfcCode2errClass.Get(string(rfcCode)[:index]); has {
return class == ec
}
}
}
return false
}
// NotEqualClass returns true if err is not *Error with the same class.
func (ec ErrClass) NotEqualClass(err error) bool {
return !ec.EqualClass(err)
}
func (ec ErrClass) initError(code ErrCode) string {
if frozen() {
debug.PrintStack()
panic("register error after initialized is prohibited")
}
clsMap, ok := ErrClassToMySQLCodes[ec]
if !ok {
clsMap = make(map[ErrCode]struct{})
ErrClassToMySQLCodes[ec] = clsMap
}
clsMap[code] = struct{}{}
class := errClass2Desc[ec]
rfcCode := fmt.Sprintf("%s:%d", class, code)
rfcCode2errClass.Put(class, ec)
return rfcCode
}
// New defines an *Error with an error code and an error message.
// Usually used to create base *Error.
// Attention:
// this method is not goroutine-safe and
// usually be used in global variable initializer
//
// Deprecated: use NewStd or NewStdErr instead.
func (ec ErrClass) New(code ErrCode, message string) *Error {
rfcCode := ec.initError(code)
err := errors.Normalize(message, errors.MySQLErrorCode(int(code)), errors.RFCCodeText(rfcCode))
return err
}
// NewStdErr defines an *Error with an error code, an error
// message and workaround to create standard error.
func (ec ErrClass) NewStdErr(code ErrCode, message *mysql.ErrMessage) *Error {
rfcCode := ec.initError(code)
err := errors.Normalize(
message.Raw, errors.RedactArgs(message.RedactArgPos),
errors.MySQLErrorCode(int(code)), errors.RFCCodeText(rfcCode),
)
return err
}
// NewStd calls New using the standard message for the error code
// Attention:
// this method is not goroutine-safe and
// usually be used in global variable initializer
func (ec ErrClass) NewStd(code ErrCode) *Error {
return ec.NewStdErr(code, mysql.MySQLErrName[uint16(code)])
}
// Synthesize synthesizes an *Error in the air
// it didn't register error into ErrClassToMySQLCodes
// so it's goroutine-safe
// and often be used to create Error came from other systems like TiKV.
func (ec ErrClass) Synthesize(code ErrCode, message string) *Error {
return errors.Normalize(
message, errors.MySQLErrorCode(int(code)),
errors.RFCCodeText(fmt.Sprintf("%s:%d", errClass2Desc[ec], code)),
)
}
// ToSQLError convert Error to mysql.SQLError.
func ToSQLError(e *Error) *mysql.SQLError {
code := getMySQLErrorCode(e)
return mysql.NewErrf(code, "%s", nil, e.GetMsg())
}
var defaultMySQLErrorCode uint16
func getMySQLErrorCode(e *Error) uint16 {
rfcCode := e.RFCCode()
var class ErrClass
if index := strings.Index(string(rfcCode), ":"); index > 0 {
ec, has := rfcCode2errClass.Get(string(rfcCode)[:index])
if !has {
log.Warn("Unknown error class", zap.String("class", string(rfcCode)[:index]))
return defaultMySQLErrorCode
}
class = ec
}
codeMap, ok := ErrClassToMySQLCodes[class]
if !ok {
log.Warn("Unknown error class", zap.Int("class", int(class)))
return defaultMySQLErrorCode
}
_, ok = codeMap[ErrCode(e.Code())]
if !ok {
log.Debug("Unknown error code", zap.Int("class", int(class)), zap.Int("code", int(e.Code())))
return defaultMySQLErrorCode
}
return uint16(e.Code())
}
var (
// ErrClassToMySQLCodes is the map of ErrClass to code-set.
ErrClassToMySQLCodes = make(map[ErrClass]map[ErrCode]struct{})
// ErrCritical is the critical error class.
ErrCritical = ClassGlobal.NewStdErr(CodeExecResultIsEmpty, mysql.Message("critical error %v", nil))
// ErrResultUndetermined is the error when execution result is unknown.
ErrResultUndetermined = ClassGlobal.NewStdErr(
CodeResultUndetermined,
mysql.Message("execution result undetermined", nil),
)
)
func init() {
defaultMySQLErrorCode = mysql.ErrUnknown
}
// ErrorEqual returns a boolean indicating whether err1 is equal to err2.
func ErrorEqual(err1, err2 error) bool {
e1 := errors.Cause(err1)
e2 := errors.Cause(err2)
if e1 == e2 {
return true
}
if e1 == nil || e2 == nil {
return e1 == e2
}
te1, ok1 := e1.(*Error)
te2, ok2 := e2.(*Error)
if ok1 && ok2 {
return te1.RFCCode() == te2.RFCCode()
}
return e1.Error() == e2.Error()
}
// ErrorNotEqual returns a boolean indicating whether err1 isn't equal to err2.
func ErrorNotEqual(err1, err2 error) bool {
return !ErrorEqual(err1, err2)
}
// MustNil cleans up and fatals if err is not nil.
func MustNil(err error, closeFuns ...func()) {
if err != nil {
for _, f := range closeFuns {
f()
}
log.Fatal("unexpected error", zap.Error(err), zap.Stack("stack"))
}
}
// Call executes a function and checks the returned err.
func Call(fn func() error) {
err := fn()
if err != nil {
log.Error("function call errored", zap.Error(err), zap.Stack("stack"))
}
}
// Log logs the error if it is not nil.
func Log(err error) {
if err != nil {
log.Error("encountered error", zap.Error(err), zap.Stack("stack"))
}
}
// GetErrClass returns the error class of the error.
func GetErrClass(e *Error) ErrClass {
rfcCode := e.RFCCode()
if index := strings.Index(string(rfcCode), ":"); index > 0 {
if class, has := rfcCode2errClass.Get(string(rfcCode)[:index]); has {
return class
}
}
return ErrClass(-1)
}
// Copyright 2021 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package tidb
const (
// FeatureIDTiDB represents the general TiDB-specific features.
FeatureIDTiDB = ""
// FeatureIDAutoRandom is the `auto_random` feature.
FeatureIDAutoRandom = "auto_rand"
// FeatureIDAutoIDCache is the `auto_id_cache` feature.
FeatureIDAutoIDCache = "auto_id_cache"
// FeatureIDAutoRandomBase is the `auto_random_base` feature.
FeatureIDAutoRandomBase = "auto_rand_base"
// FeatureIDClusteredIndex is the `clustered_index` feature.
FeatureIDClusteredIndex = "clustered_index"
// FeatureIDForceAutoInc is the `force auto_increment` feature.
FeatureIDForceAutoInc = "force_inc"
// FeatureIDPlacement is the `placement rule` feature.
FeatureIDPlacement = "placement"
// FeatureIDTTL is the `ttl` feature
FeatureIDTTL = "ttl"
// FeatureIDResourceGroup is the `resource group` feature.
FeatureIDResourceGroup = "resource_group"
// FeatureIDGlobalIndex is the `Global Index` feature.
FeatureIDGlobalIndex = "global_index"
// FeatureIDPresplit is the pre-split feature.
FeatureIDPresplit = "pre_split"
// FeatureIDAffinity is the `Affinity` feature.
FeatureIDAffinity = "affinity"
// FeatureIDSplitRegion is the `region split` feature.
FeatureIDSplitRegion = "region_split"
)
var featureIDs = map[string]struct{}{
FeatureIDAutoRandom: {},
FeatureIDAutoIDCache: {},
FeatureIDAutoRandomBase: {},
FeatureIDClusteredIndex: {},
FeatureIDForceAutoInc: {},
FeatureIDPlacement: {},
FeatureIDTTL: {},
FeatureIDGlobalIndex: {},
FeatureIDPresplit: {},
FeatureIDAffinity: {},
FeatureIDSplitRegion: {},
}
// CanParseFeature is used to check if a feature can be parsed.
func CanParseFeature(fs ...string) bool {
for _, f := range fs {
if _, ok := featureIDs[f]; !ok {
return false
}
}
return true
}
// Copyright 2014 The ql Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSES/QL-LICENSE file.
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package types
import (
"strings"
"github.com/pingcap/tidb/pkg/parser/mysql"
"github.com/pingcap/tidb/pkg/parser/terror"
)
// IsTypeBlob returns a boolean indicating whether the tp is a blob type.
func IsTypeBlob(tp byte) bool {
switch tp {
case mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeBlob, mysql.TypeLongBlob:
return true
default:
return false
}
}
// IsTypeChar returns a boolean indicating
// whether the tp is the char type like a string type or a varchar type.
func IsTypeChar(tp byte) bool {
return tp == mysql.TypeString || tp == mysql.TypeVarchar
}
// IsTypeVector returns whether tp is a vector type.
func IsTypeVector(tp byte) bool {
return tp == mysql.TypeTiDBVectorFloat32
}
var type2Str = map[byte]string{
mysql.TypeBit: "bit",
mysql.TypeBlob: "text",
mysql.TypeDate: "date",
mysql.TypeDatetime: "datetime",
mysql.TypeUnspecified: "unspecified",
mysql.TypeNewDecimal: "decimal",
mysql.TypeDouble: "double",
mysql.TypeEnum: "enum",
mysql.TypeFloat: "float",
mysql.TypeGeometry: "geometry",
mysql.TypeTiDBVectorFloat32: "vector",
mysql.TypeInt24: "mediumint",
mysql.TypeJSON: "json",
mysql.TypeLong: "int",
mysql.TypeLonglong: "bigint",
mysql.TypeLongBlob: "longtext",
mysql.TypeMediumBlob: "mediumtext",
mysql.TypeNull: "null",
mysql.TypeSet: "set",
mysql.TypeShort: "smallint",
mysql.TypeString: "char",
mysql.TypeDuration: "time",
mysql.TypeTimestamp: "timestamp",
mysql.TypeTiny: "tinyint",
mysql.TypeTinyBlob: "tinytext",
mysql.TypeVarchar: "varchar",
mysql.TypeVarString: "var_string",
mysql.TypeYear: "year",
}
var str2Type = map[string]byte{
"bit": mysql.TypeBit,
"text": mysql.TypeBlob,
"date": mysql.TypeDate,
"datetime": mysql.TypeDatetime,
"unspecified": mysql.TypeUnspecified,
"decimal": mysql.TypeNewDecimal,
"double": mysql.TypeDouble,
"enum": mysql.TypeEnum,
"float": mysql.TypeFloat,
"geometry": mysql.TypeGeometry,
"vector": mysql.TypeTiDBVectorFloat32,
"mediumint": mysql.TypeInt24,
"json": mysql.TypeJSON,
"int": mysql.TypeLong,
"bigint": mysql.TypeLonglong,
"longtext": mysql.TypeLongBlob,
"mediumtext": mysql.TypeMediumBlob,
"null": mysql.TypeNull,
"set": mysql.TypeSet,
"smallint": mysql.TypeShort,
"char": mysql.TypeString,
"time": mysql.TypeDuration,
"timestamp": mysql.TypeTimestamp,
"tinyint": mysql.TypeTiny,
"tinytext": mysql.TypeTinyBlob,
"varchar": mysql.TypeVarchar,
"var_string": mysql.TypeVarString,
"year": mysql.TypeYear,
}
// TypeStr converts tp to a string.
func TypeStr(tp byte) (r string) {
return type2Str[tp]
}
// TypeToStr converts a field to a string.
// It is used for converting Text to Blob,
// or converting Char to Binary.
// Args:
//
// tp: type enum
// cs: charset
func TypeToStr(tp byte, cs string) (r string) {
ts := type2Str[tp]
if cs != "binary" {
return ts
}
if IsTypeBlob(tp) {
ts = strings.Replace(ts, "text", "blob", 1)
} else if IsTypeChar(tp) {
ts = strings.Replace(ts, "char", "binary", 1)
} else if tp == mysql.TypeNull {
ts = "binary"
}
return ts
}
// StrToType convert a string to type enum.
// Args:
//
// ts: type string
func StrToType(ts string) (tp byte) {
ts = strings.Replace(ts, "blob", "text", 1)
ts = strings.Replace(ts, "binary", "char", 1)
if tp, ok := str2Type[ts]; ok {
return tp
}
return mysql.TypeUnspecified
}
var (
dig2bytes = [10]int{0, 1, 1, 2, 2, 3, 3, 4, 4, 4}
)
// constant values.
const (
digitsPerWord = 9 // A word holds 9 digits.
wordSize = 4 // A word is 4 bytes int32.
)
var (
// ErrInvalidDefault is returned when meet a invalid default value.
ErrInvalidDefault = terror.ClassTypes.NewStd(mysql.ErrInvalidDefault)
// ErrDataOutOfRange is returned when meet a value out of range.
ErrDataOutOfRange = terror.ClassTypes.NewStd(mysql.ErrDataOutOfRange)
// ErrTruncatedWrongValue is returned when meet a value bigger than
// 99999999999999999999999999999999999999999999999999999999999999999 during parsing.
ErrTruncatedWrongValue = terror.ClassTypes.NewStd(mysql.ErrTruncatedWrongValue)
// ErrIllegalValueForType is returned when strconv.ParseFloat meet strconv.ErrRange during parsing.
ErrIllegalValueForType = terror.ClassTypes.NewStd(mysql.ErrIllegalValueForType)
)
// Copyright 2017 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package types
import "fmt"
// EvalType indicates the specified types that arguments and result of a built-in function should be.
type EvalType byte
const (
// ETInt represents type INT in evaluation.
ETInt EvalType = iota
// ETReal represents type REAL in evaluation.
ETReal
// ETDecimal represents type DECIMAL in evaluation.
ETDecimal
// ETString represents type STRING in evaluation.
ETString
// ETDatetime represents type DATETIME in evaluation.
ETDatetime
// ETTimestamp represents type TIMESTAMP in evaluation.
ETTimestamp
// ETDuration represents type DURATION in evaluation.
ETDuration
// ETJson represents type JSON in evaluation.
ETJson
// ETVectorFloat32 represents type VectorFloat32 in evaluation.
ETVectorFloat32
)
// IsStringKind returns true for ETString, ETDatetime, ETTimestamp, ETDuration, ETJson EvalTypes.
func (et EvalType) IsStringKind() bool {
return et == ETString || et == ETDatetime ||
et == ETTimestamp || et == ETDuration || et == ETJson || et == ETVectorFloat32
}
// IsVectorKind returns true for ETVectorXxx EvalTypes.
func (et EvalType) IsVectorKind() bool {
return et == ETVectorFloat32
}
// String implements fmt.Stringer interface.
func (et EvalType) String() string {
switch et {
case ETInt:
return "Int"
case ETReal:
return "Real"
case ETDecimal:
return "Decimal"
case ETString:
return "String"
case ETDatetime:
return "Datetime"
case ETTimestamp:
return "Timestamp"
case ETDuration:
return "Time"
case ETJson:
return "Json"
case ETVectorFloat32:
return "VectorFloat32"
default:
panic(fmt.Sprintf("invalid EvalType %d", et))
}
}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package types
import (
"encoding/json"
"fmt"
"io"
"slices"
"strings"
"unsafe"
"github.com/pingcap/tidb/pkg/parser/charset"
"github.com/pingcap/tidb/pkg/parser/format"
"github.com/pingcap/tidb/pkg/parser/mysql"
"github.com/pingcap/tidb/pkg/parser/util"
)
// UnspecifiedLength is unspecified length.
const (
UnspecifiedLength = -1
)
// TiDBStrictIntegerDisplayWidth represent whether return warnings when integerType with (length) was parsed.
// The default is `false`, it will be parsed as warning, and the result in show-create-table will ignore the
// display length when it set to `true`. This is for compatibility with MySQL 8.0 in which integer max display
// length is deprecated, referring this issue #6688 for more details.
var (
TiDBStrictIntegerDisplayWidth bool
)
// FieldType records field type information.
type FieldType struct {
// tp is type of the field
tp byte
// flag represent NotNull, Unsigned, PriKey flags etc.
flag uint
// flen represent size of bytes of the field
flen int
// decimal represent decimal length of the field
decimal int
// charset represent character set
charset string
// collate represent collate rules of the charset
collate string
// elems is the element list for enum and set type.
elems []string
elemsIsBinaryLit []bool
array bool
// Please keep in mind that jsonFieldType should be updated if you add a new field here.
}
// DeepCopy returns a deep copy of the FieldType.
func (ft *FieldType) DeepCopy() *FieldType {
if ft == nil {
return nil
}
ret := &FieldType{
tp: ft.tp,
flag: ft.flag,
flen: ft.flen,
decimal: ft.decimal,
charset: ft.charset,
collate: ft.collate,
array: ft.array,
}
if len(ft.elems) > 0 {
ret.elems = make([]string, len(ft.elems))
copy(ret.elems, ft.elems)
}
if len(ft.elemsIsBinaryLit) > 0 {
ret.elemsIsBinaryLit = make([]bool, len(ft.elemsIsBinaryLit))
copy(ret.elemsIsBinaryLit, ft.elemsIsBinaryLit)
}
return ret
}
// Hash64 implements the cascades/base.Hasher.<0th> interface.
func (ft *FieldType) Hash64(h util.IHasher) {
h.HashByte(ft.tp)
h.HashUint64(uint64(ft.flag))
h.HashInt(ft.flen)
h.HashInt(ft.decimal)
h.HashString(ft.charset)
h.HashString(ft.collate)
h.HashInt(len(ft.elems))
for _, elem := range ft.elems {
h.HashString(elem)
}
h.HashInt(len(ft.elemsIsBinaryLit))
for _, elem := range ft.elemsIsBinaryLit {
h.HashBool(elem)
}
h.HashBool(ft.array)
}
// Equals implements the cascades/base.Hasher.<1th> interface.
func (ft *FieldType) Equals(other any) bool {
ft2, ok := other.(*FieldType)
if !ok {
return false
}
if ft == nil {
return ft2 == nil
}
if other == nil {
return false
}
ok = ft.tp == ft2.tp &&
ft.flag == ft2.flag &&
ft.flen == ft2.flen &&
ft.decimal == ft2.decimal &&
ft.charset == ft2.charset &&
ft.collate == ft2.collate &&
ft.array == ft2.array
if !ok {
return false
}
if len(ft.elems) != len(ft2.elems) {
return false
}
for i, one := range ft.elems {
if one != ft2.elems[i] {
return false
}
}
if len(ft.elemsIsBinaryLit) != len(ft2.elemsIsBinaryLit) {
return false
}
for i, one := range ft.elemsIsBinaryLit {
if one != ft2.elemsIsBinaryLit[i] {
return false
}
}
return true
}
// NewFieldType returns a FieldType,
// with a type and other information about field type.
func NewFieldType(tp byte) *FieldType {
return &FieldType{
tp: tp,
flen: UnspecifiedLength,
decimal: UnspecifiedLength,
}
}
// IsDecimalValid checks whether the decimal is valid.
func (ft *FieldType) IsDecimalValid() bool {
if ft.GetType() == mysql.TypeNewDecimal && (ft.decimal < 0 || ft.decimal > mysql.MaxDecimalScale || ft.flen <= 0 || ft.flen > mysql.MaxDecimalWidth || ft.flen < ft.decimal) {
return false
}
return true
}
// IsVarLengthType Determine whether the column type is a variable-length type
func (ft *FieldType) IsVarLengthType() bool {
switch ft.GetType() {
case mysql.TypeVarchar, mysql.TypeVarString, mysql.TypeJSON, mysql.TypeBlob, mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob, mysql.TypeTiDBVectorFloat32:
return true
default:
return false
}
}
// GetType returns the type of the FieldType.
func (ft *FieldType) GetType() byte {
if ft.array {
return mysql.TypeJSON
}
return ft.tp
}
// GetFlag returns the flag of the FieldType.
func (ft *FieldType) GetFlag() uint {
return ft.flag
}
// GetFlen returns the length of the field.
func (ft *FieldType) GetFlen() int {
return ft.flen
}
// GetDecimal returns the decimal of the FieldType.
func (ft *FieldType) GetDecimal() int {
return ft.decimal
}
// GetCharset returns the field's charset
func (ft *FieldType) GetCharset() string {
return ft.charset
}
// GetCollate returns the collation of the field.
func (ft *FieldType) GetCollate() string {
return ft.collate
}
// GetElems returns the elements of the FieldType.
func (ft *FieldType) GetElems() []string {
return ft.elems
}
// SetType sets the type of the FieldType.
func (ft *FieldType) SetType(tp byte) {
ft.tp = tp
ft.array = false
}
// SetFlag sets the flag of the FieldType.
func (ft *FieldType) SetFlag(flag uint) {
ft.flag = flag
}
// AddFlag adds a flag to the FieldType.
func (ft *FieldType) AddFlag(flag uint) {
ft.flag |= flag
}
// AndFlag and the flag of the FieldType.
func (ft *FieldType) AndFlag(flag uint) {
ft.flag &= flag
}
// ToggleFlag toggle the flag of the FieldType.
func (ft *FieldType) ToggleFlag(flag uint) {
ft.flag ^= flag
}
// DelFlag delete the flag of the FieldType.
func (ft *FieldType) DelFlag(flag uint) {
ft.flag &= ^flag
}
// SetFlen sets the length of the field.
func (ft *FieldType) SetFlen(flen int) {
ft.flen = flen
}
// SetFlenUnderLimit sets the length of the field to the value of the argument
func (ft *FieldType) SetFlenUnderLimit(flen int) {
if ft.GetType() == mysql.TypeNewDecimal {
ft.flen = min(flen, mysql.MaxDecimalWidth)
} else {
ft.flen = flen
}
}
// SetDecimal sets the decimal of the FieldType.
func (ft *FieldType) SetDecimal(decimal int) {
ft.decimal = decimal
}
// SetDecimalUnderLimit sets the decimal of the field to the value of the argument
func (ft *FieldType) SetDecimalUnderLimit(decimal int) {
if ft.GetType() == mysql.TypeNewDecimal {
ft.decimal = min(decimal, mysql.MaxDecimalScale)
} else {
ft.decimal = decimal
}
}
// UpdateFlenAndDecimalUnderLimit updates the length and decimal to the value of the argument
func (ft *FieldType) UpdateFlenAndDecimalUnderLimit(old *FieldType, deltaDecimal int, deltaFlen int) {
if ft.GetType() != mysql.TypeNewDecimal {
return
}
if old.decimal < 0 {
deltaFlen += mysql.MaxDecimalScale
ft.decimal = mysql.MaxDecimalScale
} else {
ft.SetDecimal(old.decimal + deltaDecimal)
}
if old.flen < 0 {
ft.flen = mysql.MaxDecimalWidth
} else {
ft.SetFlenUnderLimit(old.flen + deltaFlen)
}
}
// SetCharset sets the charset of the FieldType.
func (ft *FieldType) SetCharset(charset string) {
ft.charset = charset
}
// SetCollate sets the collation of the FieldType.
func (ft *FieldType) SetCollate(collate string) {
ft.collate = collate
}
// SetElems sets the elements of the FieldType.
func (ft *FieldType) SetElems(elems []string) {
ft.elems = elems
}
// SetElem sets the element of the FieldType.
func (ft *FieldType) SetElem(idx int, element string) {
ft.elems[idx] = element
}
// SetArray sets the array field of the FieldType.
func (ft *FieldType) SetArray(array bool) {
ft.array = array
}
// IsArray return true if the filed type is array.
func (ft *FieldType) IsArray() bool {
return ft.array
}
// ArrayType return the type of the array.
func (ft *FieldType) ArrayType() *FieldType {
if !ft.array {
return ft
}
clone := ft.Clone()
clone.SetArray(false)
return clone
}
// SetElemWithIsBinaryLit sets the element of the FieldType.
func (ft *FieldType) SetElemWithIsBinaryLit(idx int, element string, isBinaryLit bool) {
ft.elems[idx] = element
if isBinaryLit {
// Create the binary literal flags lazily.
if ft.elemsIsBinaryLit == nil {
ft.elemsIsBinaryLit = make([]bool, len(ft.elems))
}
ft.elemsIsBinaryLit[idx] = true
}
}
// GetElem returns the element of the FieldType.
func (ft *FieldType) GetElem(idx int) string {
return ft.elems[idx]
}
// GetElemIsBinaryLit returns the binary literal flag of the element at index idx.
func (ft *FieldType) GetElemIsBinaryLit(idx int) bool {
if len(ft.elemsIsBinaryLit) == 0 {
return false
}
return ft.elemsIsBinaryLit[idx]
}
// CleanElemIsBinaryLit cleans the binary literal flag of the element at index idx.
func (ft *FieldType) CleanElemIsBinaryLit() {
if ft != nil && ft.elemsIsBinaryLit != nil {
ft.elemsIsBinaryLit = nil
}
}
// Clone returns a copy of itself.
func (ft *FieldType) Clone() *FieldType {
ret := *ft
return &ret
}
// Equal checks whether two FieldType objects are equal.
func (ft *FieldType) Equal(other *FieldType) bool {
// We do not need to compare whole `ft.flag == other.flag` when wrapping cast upon an Expression.
// but need compare unsigned_flag of ft.flag.
// When tp is float or double with decimal unspecified, do not check whether flen is equal,
// because flen for them is useless.
// The decimal field can be ignored if the type is int or string.
tpEqual := (ft.GetType() == other.GetType()) || (ft.GetType() == mysql.TypeVarchar && other.GetType() == mysql.TypeVarString) || (ft.GetType() == mysql.TypeVarString && other.GetType() == mysql.TypeVarchar)
flenEqual := ft.flen == other.flen || (ft.EvalType() == ETReal && ft.decimal == UnspecifiedLength) || ft.EvalType() == ETJson
ignoreDecimal := ft.EvalType() == ETInt || ft.EvalType() == ETString
partialEqual := tpEqual &&
(ignoreDecimal || ft.decimal == other.decimal) &&
ft.charset == other.charset &&
ft.collate == other.collate &&
flenEqual &&
mysql.HasUnsignedFlag(ft.flag) == mysql.HasUnsignedFlag(other.flag)
if !partialEqual {
return false
}
return slices.Equal(ft.elems, other.elems)
}
// PartialEqual checks whether two FieldType objects are equal. Please use this function with caution.
// If unsafe is true and the objects is string type, PartialEqual will ignore flen.
// See https://github.com/pingcap/tidb/issues/35490#issuecomment-1211658886 for more detail.
func (ft *FieldType) PartialEqual(other *FieldType, unsafe bool) bool {
// Special case for NotNUll flag. See https://github.com/pingcap/tidb/issues/61290.
if mysql.HasNotNullFlag(ft.flag) != mysql.HasNotNullFlag(other.flag) {
return false
}
if !unsafe || ft.EvalType() != ETString || other.EvalType() != ETString {
return ft.Equal(other)
}
partialEqual := ft.charset == other.charset && ft.collate == other.collate && mysql.HasUnsignedFlag(ft.flag) == mysql.HasUnsignedFlag(other.flag)
if !partialEqual || len(ft.elems) != len(other.elems) {
return false
}
for i := range ft.elems {
if ft.elems[i] != other.elems[i] {
return false
}
}
return true
}
// EvalType gets the type in evaluation.
func (ft *FieldType) EvalType() EvalType {
switch ft.GetType() {
case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong,
mysql.TypeBit, mysql.TypeYear:
return ETInt
case mysql.TypeFloat, mysql.TypeDouble:
return ETReal
case mysql.TypeNewDecimal:
return ETDecimal
case mysql.TypeDate, mysql.TypeDatetime:
return ETDatetime
case mysql.TypeTimestamp:
return ETTimestamp
case mysql.TypeDuration:
return ETDuration
case mysql.TypeJSON:
return ETJson
case mysql.TypeTiDBVectorFloat32:
return ETVectorFloat32
case mysql.TypeEnum, mysql.TypeSet:
if ft.flag&mysql.EnumSetAsIntFlag > 0 {
return ETInt
}
}
return ETString
}
// Hybrid checks whether a type is a hybrid type, which can represent different types of value in specific context.
func (ft *FieldType) Hybrid() bool {
return ft.GetType() == mysql.TypeEnum || ft.GetType() == mysql.TypeBit || ft.GetType() == mysql.TypeSet
}
// Init initializes the FieldType data.
func (ft *FieldType) Init(tp byte) {
ft.tp = tp
ft.flen = UnspecifiedLength
ft.decimal = UnspecifiedLength
}
// CompactStr only considers tp/CharsetBin/flen/Deimal.
// This is used for showing column type in infoschema.
func (ft *FieldType) CompactStr() string {
ts := TypeToStr(ft.GetType(), ft.charset)
suffix := ""
defaultFlen, defaultDecimal := mysql.GetDefaultFieldLengthAndDecimal(ft.GetType())
isDecimalNotDefault := ft.decimal != defaultDecimal && ft.decimal != 0 && ft.decimal != UnspecifiedLength
// displayFlen and displayDecimal are flen and decimal values with `-1` substituted with default value.
displayFlen, displayDecimal := ft.flen, ft.decimal
if displayFlen == UnspecifiedLength {
displayFlen = defaultFlen
}
if displayDecimal == UnspecifiedLength {
displayDecimal = defaultDecimal
}
switch ft.GetType() {
case mysql.TypeEnum, mysql.TypeSet:
// Format is ENUM ('e1', 'e2') or SET ('e1', 'e2')
es := make([]string, 0, len(ft.elems))
for _, e := range ft.elems {
e = format.OutputFormat(e)
es = append(es, e)
}
suffix = fmt.Sprintf("('%s')", strings.Join(es, "','"))
case mysql.TypeTimestamp, mysql.TypeDatetime, mysql.TypeDuration:
if isDecimalNotDefault {
suffix = fmt.Sprintf("(%d)", displayDecimal)
}
case mysql.TypeDouble, mysql.TypeFloat:
// 1. flen Not Default, decimal Not Default -> Valid
// 2. flen Not Default, decimal Default (-1) -> Invalid
// 3. flen Default, decimal Not Default -> Valid
// 4. flen Default, decimal Default -> Valid (hide)
if isDecimalNotDefault {
suffix = fmt.Sprintf("(%d,%d)", displayFlen, displayDecimal)
}
case mysql.TypeNewDecimal:
suffix = fmt.Sprintf("(%d,%d)", displayFlen, displayDecimal)
case mysql.TypeBit, mysql.TypeVarchar, mysql.TypeString, mysql.TypeVarString:
suffix = fmt.Sprintf("(%d)", displayFlen)
case mysql.TypeTiny:
// With display length deprecation active tinyint(1) still has
// a display length to indicate this might have been a BOOL.
// Connectors expect this.
//
// See also:
// https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-19.html
if !TiDBStrictIntegerDisplayWidth || (mysql.HasZerofillFlag(ft.flag) || displayFlen == 1) {
suffix = fmt.Sprintf("(%d)", displayFlen)
}
case mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong:
// Referring this issue #6688, the integer max display length is deprecated in MySQL 8.0.
// Since the length doesn't take any effect in TiDB storage or showing result, we remove it here.
if !TiDBStrictIntegerDisplayWidth || mysql.HasZerofillFlag(ft.flag) {
suffix = fmt.Sprintf("(%d)", displayFlen)
}
case mysql.TypeYear:
suffix = fmt.Sprintf("(%d)", ft.flen)
case mysql.TypeTiDBVectorFloat32:
if ft.flen != UnspecifiedLength {
suffix = fmt.Sprintf("(%d)", ft.flen)
}
case mysql.TypeNull:
suffix = "(0)"
}
return ts + suffix
}
// InfoSchemaStr joins the CompactStr with unsigned flag and
// returns a string.
func (ft *FieldType) InfoSchemaStr() string {
suffix := ""
if mysql.HasUnsignedFlag(ft.flag) &&
ft.GetType() != mysql.TypeBit &&
ft.GetType() != mysql.TypeYear {
suffix = " unsigned"
}
return ft.CompactStr() + suffix
}
// String joins the information of FieldType and returns a string.
// Note: when flen or decimal is unspecified, this function will use the default value instead of -1.
func (ft *FieldType) String() string {
strs := []string{ft.CompactStr()}
if mysql.HasUnsignedFlag(ft.flag) {
strs = append(strs, "UNSIGNED")
}
if mysql.HasZerofillFlag(ft.flag) {
strs = append(strs, "ZEROFILL")
}
if mysql.HasBinaryFlag(ft.flag) && ft.GetType() != mysql.TypeString {
strs = append(strs, "BINARY")
}
if IsTypeChar(ft.GetType()) || IsTypeBlob(ft.GetType()) {
if ft.charset != "" && ft.charset != charset.CharsetBin {
strs = append(strs, fmt.Sprintf("CHARACTER SET %s", ft.charset))
}
if ft.collate != "" && ft.collate != charset.CharsetBin {
strs = append(strs, fmt.Sprintf("COLLATE %s", ft.collate))
}
}
return strings.Join(strs, " ")
}
// Restore implements Node interface.
func (ft *FieldType) Restore(ctx *format.RestoreCtx) error {
ctx.WriteKeyWord(TypeToStr(ft.GetType(), ft.charset))
precision := UnspecifiedLength
scale := UnspecifiedLength
switch ft.GetType() {
case mysql.TypeEnum, mysql.TypeSet:
ctx.WritePlain("(")
for i, e := range ft.elems {
if i != 0 {
ctx.WritePlain(",")
}
ctx.WriteString(e)
}
ctx.WritePlain(")")
case mysql.TypeTimestamp, mysql.TypeDatetime, mysql.TypeDuration:
precision = ft.decimal
case mysql.TypeUnspecified, mysql.TypeFloat, mysql.TypeDouble, mysql.TypeNewDecimal:
precision = ft.flen
scale = ft.decimal
default:
precision = ft.flen
}
if precision != UnspecifiedLength {
ctx.WritePlainf("(%d", precision)
if scale != UnspecifiedLength {
ctx.WritePlainf(",%d", scale)
}
ctx.WritePlain(")")
}
if mysql.HasUnsignedFlag(ft.flag) {
ctx.WriteKeyWord(" UNSIGNED")
}
if mysql.HasZerofillFlag(ft.flag) {
ctx.WriteKeyWord(" ZEROFILL")
}
if mysql.HasBinaryFlag(ft.flag) && ft.charset != charset.CharsetBin {
ctx.WriteKeyWord(" BINARY")
}
if IsTypeChar(ft.GetType()) || IsTypeBlob(ft.GetType()) {
if ft.charset != "" && ft.charset != charset.CharsetBin {
ctx.WriteKeyWord(" CHARACTER SET " + ft.charset)
}
if ft.collate != "" && ft.collate != charset.CharsetBin {
ctx.WriteKeyWord(" COLLATE ")
ctx.WritePlain(ft.collate)
}
}
return nil
}
// RestoreAsCastType is used for write AST back to string.
func (ft *FieldType) RestoreAsCastType(ctx *format.RestoreCtx, explicitCharset bool) {
switch ft.tp {
case mysql.TypeVarString, mysql.TypeString:
skipWriteBinary := false
if ft.charset == charset.CharsetBin && ft.collate == charset.CollationBin {
ctx.WriteKeyWord("BINARY")
skipWriteBinary = true
} else {
ctx.WriteKeyWord("CHAR")
}
if ft.flen != UnspecifiedLength {
ctx.WritePlainf("(%d)", ft.flen)
}
if !explicitCharset {
break
}
if !skipWriteBinary && ft.flag&mysql.BinaryFlag != 0 {
ctx.WriteKeyWord(" BINARY")
}
if ft.charset != charset.CharsetBin && ft.charset != mysql.DefaultCharset {
ctx.WriteKeyWord(" CHARSET ")
ctx.WriteKeyWord(ft.charset)
}
case mysql.TypeDate:
ctx.WriteKeyWord("DATE")
case mysql.TypeDatetime:
ctx.WriteKeyWord("DATETIME")
if ft.decimal > 0 {
ctx.WritePlainf("(%d)", ft.decimal)
}
case mysql.TypeNewDecimal:
ctx.WriteKeyWord("DECIMAL")
if ft.flen > 0 && ft.decimal > 0 {
ctx.WritePlainf("(%d, %d)", ft.flen, ft.decimal)
} else if ft.flen > 0 {
ctx.WritePlainf("(%d)", ft.flen)
}
case mysql.TypeDuration:
ctx.WriteKeyWord("TIME")
if ft.decimal > 0 {
ctx.WritePlainf("(%d)", ft.decimal)
}
case mysql.TypeLonglong:
if ft.flag&mysql.UnsignedFlag != 0 {
ctx.WriteKeyWord("UNSIGNED")
} else {
ctx.WriteKeyWord("SIGNED")
}
case mysql.TypeJSON:
ctx.WriteKeyWord("JSON")
case mysql.TypeDouble:
ctx.WriteKeyWord("DOUBLE")
case mysql.TypeFloat:
ctx.WriteKeyWord("FLOAT")
case mysql.TypeYear:
ctx.WriteKeyWord("YEAR")
case mysql.TypeTiDBVectorFloat32:
ctx.WriteKeyWord("VECTOR")
}
if ft.array {
ctx.WritePlain(" ")
ctx.WriteKeyWord("ARRAY")
}
}
// FormatAsCastType is used for write AST back to string.
func (ft *FieldType) FormatAsCastType(w io.Writer, explicitCharset bool) {
var sb strings.Builder
restoreCtx := format.NewRestoreCtx(format.DefaultRestoreFlags, &sb)
ft.RestoreAsCastType(restoreCtx, explicitCharset)
fmt.Fprint(w, sb.String())
}
// VarStorageLen indicates this column is a variable length column.
const VarStorageLen = -1
// StorageLength is the length of stored value for the type.
func (ft *FieldType) StorageLength() int {
switch ft.GetType() {
case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong,
mysql.TypeLonglong, mysql.TypeDouble, mysql.TypeFloat, mysql.TypeYear, mysql.TypeDuration,
mysql.TypeDate, mysql.TypeDatetime, mysql.TypeTimestamp, mysql.TypeEnum, mysql.TypeSet,
mysql.TypeBit:
// This may not be the accurate length, because we may encode them as varint.
return 8
case mysql.TypeNewDecimal:
precision, frac := ft.flen-ft.decimal, ft.decimal
return precision/digitsPerWord*wordSize + dig2bytes[precision%digitsPerWord] + frac/digitsPerWord*wordSize + dig2bytes[frac%digitsPerWord]
default:
return VarStorageLen
}
}
// HasCharset indicates if a COLUMN has an associated charset. Returning false here prevents some information
// statements(like `SHOW CREATE TABLE`) from attaching a CHARACTER SET clause to the column.
func HasCharset(ft *FieldType) bool {
switch ft.GetType() {
case mysql.TypeVarchar, mysql.TypeString, mysql.TypeVarString, mysql.TypeBlob,
mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob:
return !mysql.HasBinaryFlag(ft.flag)
case mysql.TypeEnum, mysql.TypeSet:
return true
}
return false
}
// for json
type jsonFieldType struct {
Tp byte
Flag uint
Flen int
Decimal int
Charset string
Collate string
Elems []string
ElemsIsBinaryLit []bool
Array bool
}
// UnmarshalJSON implements the json.Unmarshaler interface.
func (ft *FieldType) UnmarshalJSON(data []byte) error {
var r jsonFieldType
err := json.Unmarshal(data, &r)
if err == nil {
ft.tp = r.Tp
ft.flag = r.Flag
ft.flen = r.Flen
ft.decimal = r.Decimal
ft.charset = r.Charset
ft.collate = r.Collate
ft.elems = r.Elems
ft.elemsIsBinaryLit = r.ElemsIsBinaryLit
ft.array = r.Array
}
return err
}
// MarshalJSON marshals the FieldType to JSON.
func (ft *FieldType) MarshalJSON() ([]byte, error) {
var r jsonFieldType
r.Tp = ft.tp
r.Flag = ft.flag
r.Flen = ft.flen
r.Decimal = ft.decimal
r.Charset = ft.charset
r.Collate = ft.collate
r.Elems = ft.elems
r.ElemsIsBinaryLit = ft.elemsIsBinaryLit
r.Array = ft.array
return json.Marshal(r)
}
const emptyFieldTypeSize = int64(unsafe.Sizeof(FieldType{}))
// MemoryUsage return the memory usage of FieldType
func (ft *FieldType) MemoryUsage() (sum int64) {
if ft == nil {
return
}
sum = emptyFieldTypeSize + int64(len(ft.charset)+len(ft.collate)) + int64(cap(ft.elems))*int64(unsafe.Sizeof(*new(string))) +
int64(cap(ft.elemsIsBinaryLit))*int64(unsafe.Sizeof(*new(bool)))
for _, s := range ft.elems {
sum += int64(len(s))
}
return
}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package util
// UnescapeChar returns the unescaped byte(s) for a MySQL backslash escape
// sequence. Given the byte after the backslash, it returns the replacement
// byte(s). For most escapes this is a single byte; for \% and \_ both the
// backslash and the character are preserved.
//
// See https://dev.mysql.com/doc/refman/8.0/en/string-literals.html
//
// \" \' \\ \n \0 \b \Z \r \t ==> escape to one char
// \% \_ ==> preserve both chars
// other ==> remove backslash
func UnescapeChar(b byte) []byte {
switch b {
case 'n':
return []byte{'\n'}
case '0':
return []byte{0}
case 'b':
return []byte{8}
case 'Z':
return []byte{26}
case 'r':
return []byte{'\r'}
case 't':
return []byte{'\t'}
case '%', '_':
return []byte{'\\', b}
default:
return []byte{b}
}
}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
package parser
import (
"fmt"
"math"
"regexp"
"slices"
"strconv"
"unicode"
"github.com/pingcap/errors"
"github.com/pingcap/tidb/pkg/parser/ast"
"github.com/pingcap/tidb/pkg/parser/auth"
"github.com/pingcap/tidb/pkg/parser/charset"
"github.com/pingcap/tidb/pkg/parser/mysql"
"github.com/pingcap/tidb/pkg/parser/terror"
"github.com/pingcap/tidb/pkg/parser/types"
)
var (
// ErrSyntax returns for sql syntax error.
ErrSyntax = terror.ClassParser.NewStd(mysql.ErrSyntax)
// ErrParse returns for sql parse error.
ErrParse = terror.ClassParser.NewStd(mysql.ErrParse)
// ErrUnknownCharacterSet returns for no character set found error.
ErrUnknownCharacterSet = terror.ClassParser.NewStd(mysql.ErrUnknownCharacterSet)
// ErrInvalidYearColumnLength returns for illegal column length for year type.
ErrInvalidYearColumnLength = terror.ClassParser.NewStd(mysql.ErrInvalidYearColumnLength)
// ErrWrongArguments returns for illegal argument.
ErrWrongArguments = terror.ClassParser.NewStd(mysql.ErrWrongArguments)
// ErrWrongFieldTerminators returns for illegal field terminators.
ErrWrongFieldTerminators = terror.ClassParser.NewStd(mysql.ErrWrongFieldTerminators)
// ErrTooBigDisplayWidth returns for data display width exceed limit .
ErrTooBigDisplayWidth = terror.ClassParser.NewStd(mysql.ErrTooBigDisplaywidth)
// ErrTooBigPrecision returns for data precision exceed limit.
ErrTooBigPrecision = terror.ClassParser.NewStd(mysql.ErrTooBigPrecision)
// ErrUnknownAlterLock returns for no alter lock type found error.
ErrUnknownAlterLock = terror.ClassParser.NewStd(mysql.ErrUnknownAlterLock)
// ErrUnknownAlterAlgorithm returns for no alter algorithm found error.
ErrUnknownAlterAlgorithm = terror.ClassParser.NewStd(mysql.ErrUnknownAlterAlgorithm)
// ErrWrongValue returns for wrong value
ErrWrongValue = terror.ClassParser.NewStd(mysql.ErrWrongValue)
// ErrWarnDeprecatedSyntax return when the syntax was deprecated
ErrWarnDeprecatedSyntax = terror.ClassParser.NewStd(mysql.ErrWarnDeprecatedSyntax)
// ErrWarnDeprecatedSyntaxNoReplacement return when the syntax was deprecated and there is no replacement.
ErrWarnDeprecatedSyntaxNoReplacement = terror.ClassParser.NewStd(mysql.ErrWarnDeprecatedSyntaxNoReplacement)
// ErrWrongUsage returns for incorrect usages.
ErrWrongUsage = terror.ClassParser.NewStd(mysql.ErrWrongUsage)
// ErrWrongDBName returns for incorrect DB name.
ErrWrongDBName = terror.ClassParser.NewStd(mysql.ErrWrongDBName)
// SpecFieldPattern special result field pattern
SpecFieldPattern = regexp.MustCompile(`(\/\*!(M?[0-9]{5,6})?|\*\/)`)
specCodeStart = regexp.MustCompile(`^\/\*!(M?[0-9]{5,6})?[ \t]*`)
specCodeEnd = regexp.MustCompile(`[ \t]*\*\/$`)
)
// TrimComment trim comment for special comment code of MySQL.
func TrimComment(txt string) string {
txt = specCodeStart.ReplaceAllString(txt, "")
return specCodeEnd.ReplaceAllString(txt, "")
}
//revive:disable:exported
// ParserConfig is the parser config.
type ParserConfig struct {
EnableWindowFunction bool
EnableStrictDoubleTypeCheck bool
SkipPositionRecording bool
}
//revive:enable:exported
// Parser represents a parser instance. Some temporary objects are stored in it to reduce object allocation during Parse function.
type Parser struct {
charset string
collation string
result []ast.StmtNode
src string
lexer Scanner
hintParser *hintParser
explicitCharset bool
strictDoubleFieldType bool
enableMariaDB bool
// the following fields are used by yyParse to reduce allocation.
cache []yySymType
yylval yySymType
yyVAL *yySymType
}
// setNodeText sets the raw text on a parsed AST node and propagates the
// NO_BACKSLASH_ESCAPES SQL mode so that Text() can correctly handle
// backslash escapes when converting binary string literals to hex.
func (parser *Parser) setNodeText(n interface {
SetText(charset.Encoding, string)
}, text string) {
n.SetText(parser.lexer.client, text)
if setter, ok := n.(interface{ SetNoBackslashEscapes(bool) }); ok {
setter.SetNoBackslashEscapes(parser.lexer.sqlMode.HasNoBackslashEscapesMode())
}
}
func yySetOffset(yyVAL *yySymType, offset int) {
if yyVAL.expr != nil {
yyVAL.expr.SetOriginTextPosition(offset)
}
}
func yyhintSetOffset(_ *yyhintSymType, _ int) {
}
type stmtTexter interface {
stmtText() string
}
// New returns a Parser object with default SQL mode.
func New() *Parser {
if ast.NewValueExpr == nil ||
ast.NewParamMarkerExpr == nil ||
ast.NewHexLiteral == nil ||
ast.NewBitLiteral == nil {
panic("no parser driver (forgotten import?) https://github.com/pingcap/parser/issues/43")
}
p := &Parser{
cache: make([]yySymType, 200),
}
p.reset()
return p
}
// Reset resets the parser.
func (parser *Parser) Reset() {
clear(parser.cache)
parser.reset()
}
func (parser *Parser) reset() {
parser.explicitCharset = false
parser.strictDoubleFieldType = false
parser.EnableWindowFunc(true)
parser.SetStrictDoubleTypeCheck(true)
mode, _ := mysql.GetSQLMode(mysql.DefaultSQLMode)
parser.SetSQLMode(mode)
}
// SetMariaDB is setting the parser mode for extended MariaDB syntax
func (parser *Parser) SetMariaDB(b bool) {
parser.enableMariaDB = b
}
// SetStrictDoubleTypeCheck enables/disables strict double type check.
func (parser *Parser) SetStrictDoubleTypeCheck(val bool) {
parser.strictDoubleFieldType = val
}
// SetParserConfig sets the parser config.
func (parser *Parser) SetParserConfig(config ParserConfig) {
parser.EnableWindowFunc(config.EnableWindowFunction)
parser.SetStrictDoubleTypeCheck(config.EnableStrictDoubleTypeCheck)
parser.lexer.skipPositionRecording = config.SkipPositionRecording
}
// ParseSQL parses a query string to raw ast.StmtNode.
func (parser *Parser) ParseSQL(sql string, params ...ParseParam) (stmt []ast.StmtNode, warns []error, err error) {
resetParams(parser)
parser.lexer.reset(sql)
for _, p := range params {
if err := p.ApplyOn(parser); err != nil {
return nil, nil, err
}
}
parser.src = sql
parser.result = parser.result[:0]
var l yyLexer = &parser.lexer
yyParse(l, parser)
warns, errs := l.Errors()
if len(warns) > 0 {
warns = slices.Clone(warns)
} else {
warns = nil
}
if len(errs) != 0 {
return nil, warns, errors.Trace(errs[0])
}
for _, stmt := range parser.result {
ast.SetFlag(stmt)
}
return parser.result, warns, nil
}
// Parse parses a query string to raw ast.StmtNode.
// If charset or collation is "", default charset and collation will be used.
func (parser *Parser) Parse(sql, charset, collation string) (stmt []ast.StmtNode, warns []error, err error) {
return parser.ParseSQL(sql, CharsetConnection(charset), CollationConnection(collation))
}
func (parser *Parser) lastErrorAsWarn() {
parser.lexer.lastErrorAsWarn()
}
// ParseOneStmt parses a query and returns an ast.StmtNode.
// The query must have one statement, otherwise ErrSyntax is returned.
func (parser *Parser) ParseOneStmt(sql, charset, collation string) (ast.StmtNode, error) {
stmts, _, err := parser.ParseSQL(sql, CharsetConnection(charset), CollationConnection(collation))
if err != nil {
return nil, errors.Trace(err)
}
if len(stmts) != 1 {
return nil, ErrSyntax
}
ast.SetFlag(stmts[0])
return stmts[0], nil
}
// SetSQLMode sets the SQL mode for parser.
func (parser *Parser) SetSQLMode(mode mysql.SQLMode) {
parser.lexer.SetSQLMode(mode)
}
// EnableWindowFunc controls whether the parser to parse syntax related with window function.
func (parser *Parser) EnableWindowFunc(val bool) {
parser.lexer.EnableWindowFunc(val)
}
// ParseErrorWith returns "You have a syntax error near..." error message compatible with mysql.
func ParseErrorWith(errstr string, lineno int) error {
if len(errstr) > mysql.ErrTextLength {
errstr = errstr[:mysql.ErrTextLength]
}
return fmt.Errorf("near '%-.80s' at line %d", errstr, lineno)
}
// The select statement is not at the end of the whole statement, if the last
// field text was set from its offset to the end of the src string, update
// the last field text.
func (parser *Parser) setLastSelectFieldText(st *ast.SelectStmt, lastEnd int) {
if st.Kind != ast.SelectStmtKindSelect {
return
}
lastField := st.Fields.Fields[len(st.Fields.Fields)-1]
if lastField.Offset+len(lastField.OriginalText()) >= len(parser.src)-1 {
lastField.SetText(parser.lexer.client, parser.src[lastField.Offset:lastEnd])
}
}
func (*Parser) startOffset(v *yySymType) int {
return v.offset
}
func (parser *Parser) endOffset(v *yySymType) int {
offset := v.offset
for offset > 0 && unicode.IsSpace(rune(parser.src[offset-1])) {
offset--
}
return offset
}
func (parser *Parser) parseHint(input string) ([]*ast.TableOptimizerHint, []error) {
if parser.hintParser == nil {
parser.hintParser = newHintParser()
}
return parser.hintParser.parse(input, parser.lexer.GetSQLMode(), parser.lexer.lastHintPos)
}
func toInt(l yyLexer, lval *yySymType, str string) int {
n, err := strconv.ParseUint(str, 10, 64)
if err != nil {
e := err.(*strconv.NumError)
if e.Err == strconv.ErrRange {
// TODO: toDecimal maybe out of range still.
// This kind of error should be throw to higher level, because truncated data maybe legal.
// For example, this SQL returns error:
// create table test (id decimal(30, 0));
// insert into test values(123456789012345678901234567890123094839045793405723406801943850);
// While this SQL:
// select 1234567890123456789012345678901230948390457934057234068019438509023041874359081325875128590860234789847359871045943057;
// get value 99999999999999999999999999999999999999999999999999999999999999999
return toDecimal(l, lval, str)
}
l.AppendError(l.Errorf("integer literal: %v", err))
return invalid
}
switch {
case n <= math.MaxInt64:
lval.item = int64(n)
default:
lval.item = n
}
return intLit
}
func toDecimal(l yyLexer, lval *yySymType, str string) int {
dec, err := ast.NewDecimal(str)
if err != nil {
if terror.ErrorEqual(err, types.ErrDataOutOfRange) {
l.AppendWarn(types.ErrTruncatedWrongValue.FastGenByArgs("DECIMAL", dec))
dec, _ = ast.NewDecimal(mysql.DefaultDecimal)
} else {
l.AppendError(l.Errorf("decimal literal: %v", err))
}
}
lval.item = dec
return decLit
}
func toFloat(l yyLexer, lval *yySymType, str string) int {
n, err := strconv.ParseFloat(str, 64)
if err != nil {
e := err.(*strconv.NumError)
if e.Err == strconv.ErrRange {
l.AppendError(types.ErrIllegalValueForType.GenWithStackByArgs("double", str))
return invalid
}
l.AppendError(l.Errorf("float literal: %v", err))
return invalid
}
lval.item = n
return floatLit
}
// See https://dev.mysql.com/doc/refman/5.7/en/hexadecimal-literals.html
func toHex(l yyLexer, lval *yySymType, str string) int {
h, err := ast.NewHexLiteral(str)
if err != nil {
l.AppendError(l.Errorf("hex literal: %v", err))
return invalid
}
lval.item = h
return hexLit
}
// See https://dev.mysql.com/doc/refman/5.7/en/bit-type.html
func toBit(l yyLexer, lval *yySymType, str string) int {
b, err := ast.NewBitLiteral(str)
if err != nil {
l.AppendError(l.Errorf("bit literal: %v", err))
return invalid
}
lval.item = b
return bitLit
}
func getUint64FromNUM(num interface{}) uint64 {
switch v := num.(type) {
case int64:
return uint64(v)
case uint64:
return v
}
return 0
}
func getInt64FromNUM(num interface{}) (val int64, errMsg string) {
switch v := num.(type) {
case int64:
return v, ""
default:
return -1, fmt.Sprintf("%d is out of range [–9223372036854775808,9223372036854775807]", num)
}
}
func isRevokeAllGrant(roleOrPrivList []*ast.RoleOrPriv) bool {
if len(roleOrPrivList) != 2 {
return false
}
priv, err := roleOrPrivList[0].ToPriv()
if err != nil {
return false
}
if priv.Priv != mysql.AllPriv {
return false
}
priv, err = roleOrPrivList[1].ToPriv()
if err != nil {
return false
}
if priv.Priv != mysql.GrantPriv {
return false
}
return true
}
// convertToRole tries to convert elements of roleOrPrivList to RoleIdentity
func convertToRole(roleOrPrivList []*ast.RoleOrPriv) ([]*auth.RoleIdentity, error) {
var roles []*auth.RoleIdentity
for _, elem := range roleOrPrivList {
role, err := elem.ToRole()
if err != nil {
return nil, err
}
roles = append(roles, role)
}
return roles, nil
}
// convertToPriv tries to convert elements of roleOrPrivList to PrivElem
func convertToPriv(roleOrPrivList []*ast.RoleOrPriv) ([]*ast.PrivElem, error) {
var privileges []*ast.PrivElem
for _, elem := range roleOrPrivList {
priv, err := elem.ToPriv()
if err != nil {
return nil, err
}
privileges = append(privileges, priv)
}
return privileges, nil
}
var (
_ ParseParam = CharsetConnection("")
_ ParseParam = CollationConnection("")
_ ParseParam = CharsetClient("")
)
func resetParams(p *Parser) {
p.charset = mysql.DefaultCharset
p.collation = mysql.DefaultCollationName
}
// ParseParam represents the parameter of parsing.
type ParseParam interface {
ApplyOn(*Parser) error
}
// CharsetConnection is used for literals specified without a character set.
type CharsetConnection string
// ApplyOn implements ParseParam interface.
func (c CharsetConnection) ApplyOn(p *Parser) error {
if c == "" {
p.charset = mysql.DefaultCharset
} else {
p.charset = string(c)
}
p.lexer.connection = charset.FindEncoding(string(c))
return nil
}
// CollationConnection is used for literals specified without a collation.
type CollationConnection string
// ApplyOn implements ParseParam interface.
func (c CollationConnection) ApplyOn(p *Parser) error {
if c == "" {
p.collation = mysql.DefaultCollationName
} else {
p.collation = string(c)
}
return nil
}
// CharsetClient specifies the charset of a SQL.
// This is used to decode the SQL into a utf-8 string.
type CharsetClient string
// ApplyOn implements ParseParam interface.
func (c CharsetClient) ApplyOn(p *Parser) error {
p.lexer.client = charset.FindEncoding(string(c))
return nil
}
// Copyright 2024 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package base
import (
"math"
)
const (
// both offset and prime are used to compute the fnv-1a's
// hash value which is more unique efficient than fnv-1.
//
// offset64 is ported from fnv.go from go library.
offset64 = 14695981039346656037
// prime64 is ported from fnv.go from go library.
prime64 = 1099511628211
)
// Hasher is the interface for computing hash values of different types.
type Hasher interface {
HashBool(val bool)
HashInt(val int)
HashInt64(val int64)
HashUint64(val uint64)
HashFloat64(val float64)
HashRune(val rune)
HashString(val string)
HashByte(val byte)
HashBytes(val []byte)
Reset()
SetCache([]byte)
Cache() []byte
Sum64() uint64
}
// NilFlag and NotNilFlag are used to indicate whether a pointer/interface type field inside struct is nil or not.
// like a structure:
//
// type MyStruct struct {
// a *OtherStruct
// }
//
// Once a is nil, we should hash the NilFlag, otherwise, we should hash the NotNilFlag
// nil : [0]
// not nil : [1] [xxx]
// the NotNilFlag should not be missed, otherwise, once [xxx] is []byte{0}, it will be treated as nil.
const (
NilFlag byte = 0
NotNilFlag byte = 1
)
// Hash64a is the type for the hash value.
type Hash64a uint64
// hasher is a helper struct that's used for computing **fnv-1a** hash values and tell
// the equivalence on expression/operators. To use, first call the init method, then
// a series of hash methods. The final value is stored in the hash64a field.
type hasher struct {
// hash stores the hash value as it is incrementally computed.
hash64a Hash64a
// cache is the internal bytes slice that's will be reused for some special tmp encoding like datum.
cache []byte
}
// NewHashEqualer creates a new HashEqualer.
func NewHashEqualer() Hasher {
return &hasher{
hash64a: offset64,
}
}
// Reset resets the Hasher to its initial state, reusing the internal bytes slice.
func (h *hasher) Reset() {
h.hash64a = offset64
h.cache = h.cache[:0]
}
// Cache returns the internal bytes slice for re-usage.
func (h *hasher) Cache() []byte {
return h.cache
}
// SetCache sets the internal bytes slice for reu-sage.
func (h *hasher) SetCache(cache []byte) {
h.cache = cache
}
func (h *hasher) Sum64() uint64 {
return uint64(h.hash64a)
}
// ------------------------------ Hash functions ----------------------------------------
// Previously, expressions' hashcode are computed by encoding meta layer by layer from the
// bottom up. This is not efficient and oom risky because each expression has cached numerous
// hash bytes on their own.
//
// The new hash function is based on the fnv-1a hash algorithm, outputting the uint64 only.
// To avoid the OOM during the hash computation, we use a shared bytes slice to take in primitive
// types from targeted expressions/operators. The bytes slice is reused and reset after each
// usage of them.
//
// The standardized fnv-1a lib only takes in bytes slice as input, so we need to convert every
// primitive type to bytes slice inside Hash function implementation of every expression/operators
// by allocating some temporary slice. This is undesirable, and we just made the Hasher to take in
// primitive type directly.
// ---------------------------------------------------------------------------------------
// HashBool hashes a Boolean value.
func (h *hasher) HashBool(val bool) {
i := 0
if val {
i = 1
}
h.hash64a ^= Hash64a(i)
h.hash64a *= prime64
}
// HashInt hashes an integer value.
func (h *hasher) HashInt(val int) {
h.hash64a ^= Hash64a(val)
h.hash64a *= prime64
}
// HashInt64 hashes an int64 value.
func (h *hasher) HashInt64(val int64) {
h.hash64a ^= Hash64a(val)
h.hash64a *= prime64
}
// HashUint64 hashes a uint64 value.
func (h *hasher) HashUint64(val uint64) {
h.hash64a ^= Hash64a(val)
h.hash64a *= prime64
}
// HashFloat64 hashes a float64 value.
func (h *hasher) HashFloat64(val float64) {
h.hash64a ^= Hash64a(math.Float64bits(val))
h.hash64a *= prime64
}
// HashRune hashes a rune value.
func (h *hasher) HashRune(val rune) {
h.hash64a ^= Hash64a(val)
h.hash64a *= prime64
}
// HashString hashes a string value.
// eg: "我是谁" is with 3 rune inside, each rune of them takes up 3-4 bytes.
func (h *hasher) HashString(val string) {
h.HashInt(len(val))
for _, c := range val {
h.HashRune(c)
}
}
// HashByte hashes a byte value.
// a byte can be treated as a simple rune as well.
func (h *hasher) HashByte(val byte) {
h.HashRune(rune(val))
}
// HashBytes hashes a byte slice value.
func (h *hasher) HashBytes(val []byte) {
h.HashInt(len(val))
for _, c := range val {
h.HashByte(c)
}
}
// ------------------------------ Object Implementation -------------------------------------
// For primitive type, we can directly hash them and compare them. Based on the primitive
// interface call listed here, we can easily implement the hash and equal functions for other
// composed and complex user defined structure or types.
//
// Say we have a structure like this:
// type MyStruct struct {
// a int
// b string
// c OtherStruct
// d Pointer
// }
// so we can implement the hash and equal functions like this:
// func (val *MyStruct) Hash64(h Hasher) {
// h.HashInt(val.a)
// h.HashString(val.b)
// // for c here, it calls for the hash function of OtherStruct implementor.
// c.Hash64(h)
// // for pointer, how it could be hashed is up to the implementor.
// h.HashUint64(uint64(val.d))
// }
//
// func (val1 *MyStruct) Equal(val1 *MyStruct) bool {
// return val1.a == val2.a && val1.b == val2.b && val1.c.Equal(val2.c) && val1.d == val2.d
// }
// ------------------------------------------------------------------------------------------
// Copyright 2024 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package util
import (
"bufio"
"io"
"github.com/pingcap/tidb/pkg/util/intest"
)
// StrBufferWriter is interface facilitate quick writing string regardless of error handling and written len.
type StrBufferWriter interface {
WriteString(s string)
Flush()
}
// StrBuffer is a basic wrapper bufio.Writer while override its WriteString func.
type StrBuffer struct {
bio *bufio.Writer
}
// NewStrBuffer new a defined buffed string writer with passed io.writer.
func NewStrBuffer(w io.Writer) StrBufferWriter {
return &StrBuffer{
bio: bufio.NewWriter(w),
}
}
// WriteString implements IBufStrWriter
func (sw *StrBuffer) WriteString(s string) {
_, err := sw.bio.WriteString(s)
intest.Assert(err == nil, "buffer-io WriteString should be no error in test")
}
// Flush implements IBufStrWriter
func (sw *StrBuffer) Flush() {
err := sw.bio.Flush()
intest.Assert(err == nil, "buffer-io Flush should be no error in test")
}
// Copyright 2021 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//go:build !codes
package testsetup
import (
"fmt"
"os"
"github.com/pingcap/log"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
// SetupForCommonTest runs before all the tests.
func SetupForCommonTest() {
applyOSLogLevel()
}
func applyOSLogLevel() {
osLoglevel := os.Getenv("log_level")
if len(osLoglevel) > 0 {
cfg := log.Config{
Level: osLoglevel,
Format: "text",
File: log.FileLogConfig{},
}
gl, props, err := log.InitLogger(&cfg, zap.AddStacktrace(zapcore.FatalLevel))
if err != nil {
_, _ = fmt.Fprintf(os.Stderr, "applyOSLogLevel failed: %v", err)
os.Exit(-1)
}
log.ReplaceGlobals(gl, props)
}
}
// Copyright 2023 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package metrics
import (
"fmt"
metricscommon "github.com/pingcap/tidb/pkg/metrics/common"
"github.com/prometheus/client_golang/prometheus"
)
var (
// TimerEventCounter is the counter for timer events
TimerEventCounter *prometheus.CounterVec
)
// InitTimerMetrics initializes timers metrics.
func InitTimerMetrics() {
TimerEventCounter = metricscommon.NewCounterVec(
prometheus.CounterOpts{
Namespace: "tidb",
Subsystem: "server",
Name: "timer_event_count",
Help: "Counter of timer event.",
}, []string{"scope", "type"})
}
// TimerHookWorkerCounter creates a counter for a hook's event
func TimerHookWorkerCounter(hookClass string, event string) prometheus.Counter {
return TimerScopeCounter(fmt.Sprintf("hook.%s", hookClass), event)
}
// TimerScopeCounter creates a counter for a scope
func TimerScopeCounter(scope string, event string) prometheus.Counter {
return TimerEventCounter.WithLabelValues(scope, event)
}
// Copyright 2017 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package types
import (
"bytes"
"encoding/binary"
"encoding/hex"
"fmt"
"math"
"strconv"
"strings"
"github.com/pingcap/errors"
)
// BinaryLiteral is the internal type for storing bit / hex literal type.
type BinaryLiteral []byte
// BitLiteral is the bit literal type.
type BitLiteral BinaryLiteral
// HexLiteral is the hex literal type.
type HexLiteral BinaryLiteral
// ZeroBinaryLiteral is a BinaryLiteral literal with zero value.
var ZeroBinaryLiteral = BinaryLiteral{}
func trimLeadingZeroBytes(bytes []byte) []byte {
if len(bytes) == 0 {
return bytes
}
pos, posMax := 0, len(bytes)-1
for ; pos < posMax; pos++ {
if bytes[pos] != 0 {
break
}
}
return bytes[pos:]
}
// NewBinaryLiteralFromUint creates a new BinaryLiteral instance by the given uint value in BitEndian.
// byteSize will be used as the length of the new BinaryLiteral, with leading bytes filled to zero.
// If byteSize is -1, the leading zeros in new BinaryLiteral will be trimmed.
func NewBinaryLiteralFromUint(value uint64, byteSize int) BinaryLiteral {
if byteSize != -1 && (byteSize < 1 || byteSize > 8) {
panic("Invalid byteSize")
}
buf := make([]byte, 8)
binary.BigEndian.PutUint64(buf, value)
if byteSize == -1 {
buf = trimLeadingZeroBytes(buf)
} else {
buf = buf[8-byteSize:]
}
return buf
}
// String implements fmt.Stringer interface.
func (b BinaryLiteral) String() string {
if len(b) == 0 {
return ""
}
return "0x" + hex.EncodeToString(b)
}
// ToString returns the string representation for the literal.
func (b BinaryLiteral) ToString() string {
return string(b)
}
// ToBitLiteralString returns the bit literal representation for the literal.
func (b BinaryLiteral) ToBitLiteralString(trimLeadingZero bool) string {
if len(b) == 0 {
return "b''"
}
var buf bytes.Buffer
for _, data := range b {
fmt.Fprintf(&buf, "%08b", data)
}
ret := buf.Bytes()
if trimLeadingZero {
ret = bytes.TrimLeft(ret, "0")
if len(ret) == 0 {
ret = []byte{'0'}
}
}
return fmt.Sprintf("b'%s'", string(ret))
}
// ToInt returns the int value for the literal.
func (b BinaryLiteral) ToInt(ctx Context) (uint64, error) {
buf := trimLeadingZeroBytes(b)
length := len(buf)
if length == 0 {
return 0, nil
}
if length > 8 {
var err = ErrTruncatedWrongVal.FastGenByArgs("BINARY", b)
err = ctx.HandleTruncate(err)
return math.MaxUint64, err
}
// Note: the byte-order is BigEndian.
val := uint64(buf[0])
for i := 1; i < length; i++ {
val = (val << 8) | uint64(buf[i])
}
return val, nil
}
// Compare compares BinaryLiteral to another one
func (b BinaryLiteral) Compare(b2 BinaryLiteral) int {
bufB := trimLeadingZeroBytes(b)
bufB2 := trimLeadingZeroBytes(b2)
if len(bufB) > len(bufB2) {
return 1
}
if len(bufB) < len(bufB2) {
return -1
}
return bytes.Compare(bufB, bufB2)
}
// ParseBitStr parses bit string.
// The string format can be b'val', B'val' or 0bval, val must be 0 or 1.
// See https://dev.mysql.com/doc/refman/5.7/en/bit-value-literals.html
func ParseBitStr(s string) (BinaryLiteral, error) {
if len(s) == 0 {
return nil, errors.Errorf("invalid empty string for parsing bit type")
}
if s[0] == 'b' || s[0] == 'B' {
// format is b'val' or B'val'
s = strings.Trim(s[1:], "'")
} else if !strings.HasPrefix(s, "0b") {
// here means format is not b'val', B'val' or 0bval.
return nil, errors.Errorf("invalid bit type format %s", s)
} else {
s = s[2:]
}
if len(s) == 0 {
return ZeroBinaryLiteral, nil
}
alignedLength := (len(s) + 7) &^ 7
s = ("00000000" + s)[len(s)+8-alignedLength:] // Pad with zero (slice from `-alignedLength`)
byteLength := len(s) >> 3
buf := make([]byte, byteLength)
for i := range byteLength {
strPosition := i << 3
val, err := strconv.ParseUint(s[strPosition:strPosition+8], 2, 8)
if err != nil {
return nil, errors.Trace(err)
}
buf[i] = byte(val)
}
return buf, nil
}
// NewBitLiteral parses bit string as BitLiteral type.
func NewBitLiteral(s string) (BitLiteral, error) {
b, err := ParseBitStr(s)
if err != nil {
return BitLiteral{}, err
}
return BitLiteral(b), nil
}
// ToString implement ast.BinaryLiteral interface
func (b BitLiteral) ToString() string {
return BinaryLiteral(b).ToString()
}
// ParseHexStr parses hexadecimal string literal.
// See https://dev.mysql.com/doc/refman/5.7/en/hexadecimal-literals.html
func ParseHexStr(s string) (BinaryLiteral, error) {
if len(s) == 0 {
return nil, errors.Errorf("invalid empty string for parsing hexadecimal literal")
}
if s[0] == 'x' || s[0] == 'X' {
// format is x'val' or X'val'
s = strings.Trim(s[1:], "'")
if len(s)%2 != 0 {
return nil, errors.Errorf("invalid hexadecimal format, must even numbers, but %d", len(s))
}
} else if !strings.HasPrefix(s, "0x") {
// here means format is not x'val', X'val' or 0xval.
return nil, errors.Errorf("invalid hexadecimal format %s", s)
} else {
s = s[2:]
}
if len(s) == 0 {
return ZeroBinaryLiteral, nil
}
if len(s)%2 != 0 {
s = "0" + s
}
buf, err := hex.DecodeString(s)
if err != nil {
return nil, errors.Trace(err)
}
return buf, nil
}
// NewHexLiteral parses hexadecimal string as HexLiteral type.
func NewHexLiteral(s string) (HexLiteral, error) {
h, err := ParseHexStr(s)
if err != nil {
return HexLiteral{}, err
}
return HexLiteral(h), nil
}
// ToString implement ast.BinaryLiteral interface
func (b HexLiteral) ToString() string {
return BinaryLiteral(b).ToString()
}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package types
import (
"cmp"
"math"
"github.com/pingcap/tidb/pkg/util/collate"
)
// VecCompareUU returns []int64 comparing the []uint64 x to []uint64 y
func VecCompareUU(x, y []uint64, res []int64) {
n := len(x)
for i := range n {
if x[i] < y[i] {
res[i] = -1
} else if x[i] == y[i] {
res[i] = 0
} else {
res[i] = 1
}
}
}
// VecCompareII returns []int64 comparing the []int64 x to []int64 y
func VecCompareII(x, y, res []int64) {
n := len(x)
for i := range n {
if x[i] < y[i] {
res[i] = -1
} else if x[i] == y[i] {
res[i] = 0
} else {
res[i] = 1
}
}
}
// VecCompareUI returns []int64 comparing the []uint64 x to []int64y
func VecCompareUI(x []uint64, y, res []int64) {
n := len(x)
for i := range n {
if y[i] < 0 || x[i] > math.MaxInt64 {
res[i] = 1
} else if int64(x[i]) < y[i] {
res[i] = -1
} else if int64(x[i]) == y[i] {
res[i] = 0
} else {
res[i] = 1
}
}
}
// VecCompareIU returns []int64 comparing the []int64 x to []uint64y
func VecCompareIU(x []int64, y []uint64, res []int64) {
n := len(x)
for i := range n {
if x[i] < 0 || y[i] > math.MaxInt64 {
res[i] = -1
} else if x[i] < int64(y[i]) {
res[i] = -1
} else if x[i] == int64(y[i]) {
res[i] = 0
} else {
res[i] = 1
}
}
}
// CompareString returns an integer comparing the string x to y with the specified collation and length.
func CompareString(x, y, collation string) int {
return collate.GetCollator(collation).Compare(x, y)
}
// CompareInt return an integer comparing the integer x to y with signed or unsigned.
func CompareInt(arg0 int64, isUnsigned0 bool, arg1 int64, isUnsigned1 bool) int {
var res int
switch {
case isUnsigned0 && isUnsigned1:
res = cmp.Compare(uint64(arg0), uint64(arg1))
case isUnsigned0 && !isUnsigned1:
if arg1 < 0 || uint64(arg0) > math.MaxInt64 {
res = 1
} else {
res = cmp.Compare(arg0, arg1)
}
case !isUnsigned0 && isUnsigned1:
if arg0 < 0 || uint64(arg1) > math.MaxInt64 {
res = -1
} else {
res = cmp.Compare(arg0, arg1)
}
case !isUnsigned0 && !isUnsigned1:
res = cmp.Compare(arg0, arg1)
}
return res
}
// Copyright 2023 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package types
import (
"time"
contextutil "github.com/pingcap/tidb/pkg/util/context"
"github.com/pingcap/tidb/pkg/util/intest"
)
// StrictFlags is a flags with a fields unset and has the most strict behavior.
const StrictFlags Flags = 0
// Flags indicate how to handle the conversion of a value.
type Flags uint16
const (
// FlagIgnoreTruncateErr indicates to ignore the truncate error.
// If this flag is set, `FlagTruncateAsWarning` will be ignored.
FlagIgnoreTruncateErr Flags = 1 << iota
// FlagTruncateAsWarning indicates to append the truncate error to warnings instead of returning it to user.
FlagTruncateAsWarning
// FlagAllowNegativeToUnsigned indicates to allow the casting from negative to unsigned int.
// When this flag is not set by default, casting a negative value to unsigned
// results an overflow error, but if SQL mode is not strict, it's converted
// to 0 with a warning.
// Otherwise, a negative value will be cast to the corresponding unsigned value without any error.
// For example, when casting -1 to an unsigned bigint with `FlagAllowNegativeToUnsigned` set,
// we will get `18446744073709551615` which is the biggest unsigned value.
FlagAllowNegativeToUnsigned
// FlagIgnoreZeroDateErr indicates to ignore the zero-date error.
// See: https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html#sqlmode_no_zero_date for details about the "zero-date" error.
// If this flag is set, `FlagZeroDateAsWarning` will be ignored.
//
// TODO: `FlagIgnoreZeroDateErr` and `FlagZeroDateAsWarning` don't represent the comments right now, because the
// errors related with `time` and `duration` are handled directly according to SQL mode in many places (expression,
// ddl ...). These error handling will be refined in the future. Currently, the `FlagZeroDateAsWarning` is not used,
// and the `FlagIgnoreZeroDateErr` is used to allow or disallow casting zero to date in `alter` statement. See #25728
// This flag is the reverse of `NoZeroDate` in #30507. It's set to `true` for most context, and is only set to
// `false` for `alter` (and `create`) statements.
FlagIgnoreZeroDateErr
// FlagIgnoreZeroInDateErr indicates to ignore the zero-in-date error.
// See: https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html#sqlmode_no_zero_in_date for details about the "zero-in-date" error.
FlagIgnoreZeroInDateErr
// FlagIgnoreInvalidDateErr indicates to ignore the invalid-date error.
// See: https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html#sqlmode_allow_invalid_dates for details about the "invalid-date" error.
FlagIgnoreInvalidDateErr
// FlagSkipASCIICheck indicates to skip the ASCII check when converting the value to an ASCII string.
FlagSkipASCIICheck
// FlagSkipUTF8Check indicates to skip the UTF8 check when converting the value to an UTF8MB3 string.
FlagSkipUTF8Check
// FlagSkipUTF8MB4Check indicates to skip the UTF8MB4 check when converting the value to an UTF8 string.
FlagSkipUTF8MB4Check
// FlagCastTimeToYearThroughConcat indicates to cast time to year through concatenation. For example, `00:19:59` will be converted to '1959'
FlagCastTimeToYearThroughConcat
)
// AllowNegativeToUnsigned indicates whether the flag `FlagAllowNegativeToUnsigned` is set
func (f Flags) AllowNegativeToUnsigned() bool {
return f&FlagAllowNegativeToUnsigned != 0
}
// WithAllowNegativeToUnsigned returns a new flags with `FlagAllowNegativeToUnsigned` set/unset according to the clip parameter
func (f Flags) WithAllowNegativeToUnsigned(clip bool) Flags {
if clip {
return f | FlagAllowNegativeToUnsigned
}
return f &^ FlagAllowNegativeToUnsigned
}
// SkipASCIICheck indicates whether the flag `FlagSkipASCIICheck` is set
func (f Flags) SkipASCIICheck() bool {
return f&FlagSkipASCIICheck != 0
}
// WithSkipSACIICheck returns a new flags with `FlagSkipASCIICheck` set/unset according to the skip parameter
func (f Flags) WithSkipSACIICheck(skip bool) Flags {
if skip {
return f | FlagSkipASCIICheck
}
return f &^ FlagSkipASCIICheck
}
// SkipUTF8Check indicates whether the flag `FlagSkipUTF8Check` is set
func (f Flags) SkipUTF8Check() bool {
return f&FlagSkipUTF8Check != 0
}
// WithSkipUTF8Check returns a new flags with `FlagSkipUTF8Check` set/unset according to the skip parameter
func (f Flags) WithSkipUTF8Check(skip bool) Flags {
if skip {
return f | FlagSkipUTF8Check
}
return f &^ FlagSkipUTF8Check
}
// SkipUTF8MB4Check indicates whether the flag `FlagSkipUTF8MB4Check` is set
func (f Flags) SkipUTF8MB4Check() bool {
return f&FlagSkipUTF8MB4Check != 0
}
// WithSkipUTF8MB4Check returns a new flags with `FlagSkipUTF8MB4Check` set/unset according to the skip parameter
func (f Flags) WithSkipUTF8MB4Check(skip bool) Flags {
if skip {
return f | FlagSkipUTF8MB4Check
}
return f &^ FlagSkipUTF8MB4Check
}
// IgnoreTruncateErr indicates whether the flag `FlagIgnoreTruncateErr` is set
func (f Flags) IgnoreTruncateErr() bool {
return f&FlagIgnoreTruncateErr != 0
}
// WithIgnoreTruncateErr returns a new flags with `FlagIgnoreTruncateErr` set/unset according to the skip parameter
func (f Flags) WithIgnoreTruncateErr(ignore bool) Flags {
if ignore {
return f | FlagIgnoreTruncateErr
}
return f &^ FlagIgnoreTruncateErr
}
// TruncateAsWarning indicates whether the flag `FlagTruncateAsWarning` is set
func (f Flags) TruncateAsWarning() bool {
return f&FlagTruncateAsWarning != 0
}
// WithTruncateAsWarning returns a new flags with `FlagTruncateAsWarning` set/unset according to the skip parameter
func (f Flags) WithTruncateAsWarning(warn bool) Flags {
if warn {
return f | FlagTruncateAsWarning
}
return f &^ FlagTruncateAsWarning
}
// IgnoreZeroInDate indicates whether the flag `FlagIgnoreZeroInData` is set
func (f Flags) IgnoreZeroInDate() bool {
return f&FlagIgnoreZeroInDateErr != 0
}
// WithIgnoreZeroInDate returns a new flags with `FlagIgnoreZeroInDateErr` set/unset according to the ignore parameter
func (f Flags) WithIgnoreZeroInDate(ignore bool) Flags {
if ignore {
return f | FlagIgnoreZeroInDateErr
}
return f &^ FlagIgnoreZeroInDateErr
}
// IgnoreInvalidDateErr indicates whether the flag `FlagIgnoreInvalidDateErr` is set
func (f Flags) IgnoreInvalidDateErr() bool {
return f&FlagIgnoreInvalidDateErr != 0
}
// WithIgnoreInvalidDateErr returns a new flags with `FlagIgnoreInvalidDateErr` set/unset according to the ignore parameter
func (f Flags) WithIgnoreInvalidDateErr(ignore bool) Flags {
if ignore {
return f | FlagIgnoreInvalidDateErr
}
return f &^ FlagIgnoreInvalidDateErr
}
// IgnoreZeroDateErr indicates whether the flag `FlagIgnoreZeroDateErr` is set
func (f Flags) IgnoreZeroDateErr() bool {
return f&FlagIgnoreZeroDateErr != 0
}
// WithIgnoreZeroDateErr returns a new flags with `FlagIgnoreZeroDateErr` set/unset according to the ignore parameter
func (f Flags) WithIgnoreZeroDateErr(ignore bool) Flags {
if ignore {
return f | FlagIgnoreZeroDateErr
}
return f &^ FlagIgnoreZeroDateErr
}
// CastTimeToYearThroughConcat whether `FlagCastTimeToYearThroughConcat` is set
func (f Flags) CastTimeToYearThroughConcat() bool {
return f&FlagCastTimeToYearThroughConcat != 0
}
// WithCastTimeToYearThroughConcat returns a new flags with `FlagCastTimeToYearThroughConcat` set/unset according to the flag parameter
func (f Flags) WithCastTimeToYearThroughConcat(flag bool) Flags {
if flag {
return f | FlagCastTimeToYearThroughConcat
}
return f &^ FlagCastTimeToYearThroughConcat
}
// Context provides the information when converting between different types.
type Context struct {
flags Flags
loc *time.Location
warnHandler contextutil.WarnAppender
}
// NewContext creates a new `Context`
func NewContext(flags Flags, loc *time.Location, handler contextutil.WarnAppender) Context {
intest.Assert(loc != nil && handler != nil)
return Context{
flags: flags,
loc: loc,
warnHandler: handler,
}
}
// Flags returns the flags of the context
func (c *Context) Flags() Flags {
return c.flags
}
// WithFlags returns a new context with the flags set to the given value
func (c *Context) WithFlags(f Flags) Context {
ctx := *c
ctx.flags = f
return ctx
}
// WithLocation returns a new context with the given location
func (c *Context) WithLocation(loc *time.Location) Context {
intest.AssertNotNil(loc)
ctx := *c
ctx.loc = loc
return ctx
}
// Location returns the location of the context
func (c *Context) Location() *time.Location {
intest.AssertNotNil(c.loc)
if c.loc == nil {
// c.loc should always not be nil, just make the code safe here.
return time.UTC
}
return c.loc
}
// AppendWarning appends the error to warning. If the inner `warnHandler` is nil, do nothing.
func (c *Context) AppendWarning(err error) {
intest.Assert(c.warnHandler != nil)
if w := c.warnHandler; w != nil {
// warnHandler should always not be nil, check fn != nil here to just make code safe.
w.AppendWarning(err)
}
}
// DefaultStmtFlags is the default flags for statement context with the flag `FlagAllowNegativeToUnsigned` set.
// TODO: make DefaultStmtFlags to be equal with StrictFlags, and setting flag `FlagAllowNegativeToUnsigned`
// is only for make the code to be equivalent with the old implement during refactoring.
const DefaultStmtFlags = StrictFlags | FlagAllowNegativeToUnsigned | FlagIgnoreZeroDateErr
// DefaultStmtNoWarningContext is the context with default statement flags without any other special configuration
var DefaultStmtNoWarningContext = NewContext(DefaultStmtFlags, time.UTC, contextutil.IgnoreWarn)
// StrictContext is the most strict context which returns every error it meets
//
// this context should never append warnings
// However, the implementation of `types` may still append some warnings. TODO: remove them in the future.
var StrictContext = NewContext(StrictFlags, time.UTC, contextutil.IgnoreWarn)
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// Copyright 2014 The ql Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSES/QL-LICENSE file.
package types
import (
"math"
"math/big"
"strconv"
"strings"
"github.com/pingcap/errors"
"github.com/pingcap/tidb/pkg/parser/mysql"
"github.com/pingcap/tidb/pkg/util/hack"
)
func truncateStr(str string, flen int) string {
if flen != UnspecifiedLength && len(str) > flen {
str = str[:flen]
}
return str
}
// IntegerUnsignedUpperBound indicates the max uint64 values of different mysql types.
func IntegerUnsignedUpperBound(intType byte) uint64 {
switch intType {
case mysql.TypeTiny:
return math.MaxUint8
case mysql.TypeShort:
return math.MaxUint16
case mysql.TypeInt24:
return mysql.MaxUint24
case mysql.TypeLong:
return math.MaxUint32
case mysql.TypeLonglong:
return math.MaxUint64
case mysql.TypeBit:
return math.MaxUint64
case mysql.TypeEnum:
// enum can have at most 65535 distinct elements
// it would be better to use len(FieldType.GetElems()), but we only have a byte type here
return 65535
case mysql.TypeSet:
return math.MaxUint64
default:
panic("Input byte is not a mysql type")
}
}
// IntegerSignedUpperBound indicates the max int64 values of different mysql types.
func IntegerSignedUpperBound(intType byte) int64 {
switch intType {
case mysql.TypeTiny:
return math.MaxInt8
case mysql.TypeShort:
return math.MaxInt16
case mysql.TypeInt24:
return mysql.MaxInt24
case mysql.TypeLong:
return math.MaxInt32
case mysql.TypeLonglong:
return math.MaxInt64
case mysql.TypeEnum:
// enum can have at most 65535 distinct elements
// it would be better to use len(FieldType.GetElems()), but we only have a byte type here
return 65535
default:
panic("Input byte is not a mysql int type")
}
}
// IntegerSignedLowerBound indicates the min int64 values of different mysql types.
func IntegerSignedLowerBound(intType byte) int64 {
switch intType {
case mysql.TypeTiny:
return math.MinInt8
case mysql.TypeShort:
return math.MinInt16
case mysql.TypeInt24:
return mysql.MinInt24
case mysql.TypeLong:
return math.MinInt32
case mysql.TypeLonglong:
return math.MinInt64
case mysql.TypeEnum:
return 0
default:
panic("Input byte is not a mysql type")
}
}
// ConvertFloatToInt converts a float64 value to a int value.
// `tp` is used in err msg, if there is overflow, this func will report err according to `tp`
func ConvertFloatToInt(fval float64, lowerBound, upperBound int64, tp byte) (int64, error) {
val := RoundFloat(fval)
if val < float64(lowerBound) {
return lowerBound, overflow(val, tp)
}
if val >= float64(upperBound) {
if val == float64(upperBound) {
return upperBound, nil
}
return upperBound, overflow(val, tp)
}
return int64(val), nil
}
// ConvertIntToInt converts an int value to another int value of different precision.
func ConvertIntToInt(val int64, lowerBound int64, upperBound int64, tp byte) (int64, error) {
if val < lowerBound {
return lowerBound, overflow(val, tp)
}
if val > upperBound {
return upperBound, overflow(val, tp)
}
return val, nil
}
// ConvertUintToInt converts an uint value to an int value.
func ConvertUintToInt(val uint64, upperBound int64, tp byte) (int64, error) {
if val > uint64(upperBound) {
return upperBound, overflow(val, tp)
}
return int64(val), nil
}
// ConvertIntToUint converts an int value to an uint value.
func ConvertIntToUint(flags Flags, val int64, upperBound uint64, tp byte) (uint64, error) {
if val < 0 && !flags.AllowNegativeToUnsigned() {
return 0, overflow(val, tp)
}
if uint64(val) > upperBound {
return upperBound, overflow(val, tp)
}
return uint64(val), nil
}
// ConvertUintToUint converts an uint value to another uint value of different precision.
func ConvertUintToUint(val uint64, upperBound uint64, tp byte) (uint64, error) {
if val > upperBound {
return upperBound, overflow(val, tp)
}
return val, nil
}
// ConvertFloatToUint converts a float value to an uint value.
func ConvertFloatToUint(flags Flags, fval float64, upperBound uint64, tp byte) (uint64, error) {
val := RoundFloat(fval)
if val < 0 {
if !flags.AllowNegativeToUnsigned() {
return 0, overflow(val, tp)
}
return uint64(int64(val)), overflow(val, tp)
}
ret, acc := new(big.Float).SetFloat64(val).Uint64()
if acc == big.Below || ret > upperBound {
return upperBound, overflow(val, tp)
}
return ret, nil
}
// convertScientificNotation converts a decimal string with scientific notation to a normal decimal string.
// 1E6 => 1000000, .12345E+5 => 12345
func convertScientificNotation(str string) (string, error) {
// https://golang.org/ref/spec#Floating-point_literals
eIdx := -1
point := -1
for i := range len(str) {
if str[i] == '.' {
point = i
}
if str[i] == 'e' || str[i] == 'E' {
eIdx = i
if point == -1 {
point = i
}
break
}
}
if eIdx == -1 {
return str, nil
}
exp, err := strconv.ParseInt(str[eIdx+1:], 10, 64)
if err != nil {
return "", errors.WithStack(err)
}
f := str[:eIdx]
if exp == 0 {
return f, nil
} else if exp > 0 { // move point right
if point+int(exp) == len(f)-1 { // 123.456 >> 3 = 123456. = 123456
return f[:point] + f[point+1:], nil
} else if point+int(exp) < len(f)-1 { // 123.456 >> 2 = 12345.6
return f[:point] + f[point+1:point+1+int(exp)] + "." + f[point+1+int(exp):], nil
}
// 123.456 >> 5 = 12345600
return f[:point] + f[point+1:] + strings.Repeat("0", point+int(exp)-len(f)+1), nil
}
// move point left
exp = -exp
if int(exp) < point { // 123.456 << 2 = 1.23456
return f[:point-int(exp)] + "." + f[point-int(exp):point] + f[point+1:], nil
}
// 123.456 << 5 = 0.00123456
return "0." + strings.Repeat("0", int(exp)-point) + f[:point] + f[point+1:], nil
}
func convertDecimalStrToUint(str string, upperBound uint64, tp byte) (uint64, error) {
str, err := convertScientificNotation(str)
if err != nil {
return 0, err
}
var intStr, fracStr string
p := strings.Index(str, ".")
if p == -1 {
intStr = str
} else {
intStr = str[:p]
fracStr = str[p+1:]
}
intStr = strings.TrimLeft(intStr, "0")
if intStr == "" {
intStr = "0"
}
if intStr[0] == '-' {
return 0, overflow(str, tp)
}
var round uint64
if fracStr != "" && fracStr[0] >= '5' {
round++
}
upperStr := strconv.FormatUint(upperBound-round, 10)
if len(intStr) > len(upperStr) ||
(len(intStr) == len(upperStr) && intStr > upperStr) {
return upperBound, overflow(str, tp)
}
val, err := strconv.ParseUint(intStr, 10, 64)
if err != nil {
return val, overflow(str, tp)
}
return val + round, nil
}
// ConvertDecimalToUint converts a decimal to a uint by converting it to a string first to avoid float overflow (#10181).
func ConvertDecimalToUint(d *MyDecimal, upperBound uint64, tp byte) (uint64, error) {
return convertDecimalStrToUint(string(d.ToString()), upperBound, tp)
}
// StrToInt converts a string to an integer at the best-effort.
func StrToInt(ctx Context, str string, isFuncCast bool) (int64, error) {
str = strings.TrimSpace(str)
validPrefix, err := getValidIntPrefix(ctx, str, isFuncCast)
iVal, err1 := strconv.ParseInt(validPrefix, 10, 64)
if err1 != nil {
return iVal, ErrOverflow.GenWithStackByArgs("BIGINT", validPrefix)
}
return iVal, errors.Trace(err)
}
// StrToUint converts a string to an unsigned integer at the best-effort.
func StrToUint(ctx Context, str string, isFuncCast bool) (uint64, error) {
str = strings.TrimSpace(str)
validPrefix, err := getValidIntPrefix(ctx, str, isFuncCast)
uVal := uint64(0)
hasParseErr := false
if validPrefix[0] == '-' {
// only `-000*` is valid to be converted into unsigned integer
for _, v := range validPrefix[1:] {
if v != '0' {
hasParseErr = true
break
}
}
} else {
if validPrefix[0] == '+' {
validPrefix = validPrefix[1:]
}
v, e := strconv.ParseUint(validPrefix, 10, 64)
uVal, hasParseErr = v, e != nil
}
if hasParseErr {
return uVal, ErrOverflow.GenWithStackByArgs("BIGINT UNSIGNED", validPrefix)
}
return uVal, errors.Trace(err)
}
// StrToDateTime converts str to MySQL DateTime.
func StrToDateTime(ctx Context, str string, fsp int) (Time, error) {
return ParseTime(ctx, str, mysql.TypeDatetime, fsp)
}
// StrToDuration converts str to Duration. It returns Duration in normal case,
// and returns Time when str is in datetime format.
// when isDuration is true, the d is returned, when it is false, the t is returned.
// See https://dev.mysql.com/doc/refman/5.5/en/date-and-time-literals.html.
func StrToDuration(ctx Context, str string, fsp int) (d Duration, t Time, isDuration bool, err error) {
str = strings.TrimSpace(str)
length := len(str)
if length > 0 && str[0] == '-' {
length--
}
if n := strings.IndexByte(str, '.'); n >= 0 {
length = length - len(str[n:])
}
// Timestamp format is 'YYYYMMDDHHMMSS' or 'YYMMDDHHMMSS', which length is 12.
// See #3923, it explains what we do here.
if length >= 12 {
t, err = StrToDateTime(ctx, str, fsp)
if err == nil {
return d, t, false, nil
}
}
d, _, err = ParseDuration(ctx, str, fsp)
if ErrTruncatedWrongVal.Equal(err) {
err = ctx.HandleTruncate(err)
}
return d, t, true, errors.Trace(err)
}
// NumberToDuration converts number to Duration.
func NumberToDuration(number int64, fsp int) (Duration, error) {
if number > TimeMaxValue {
// Try to parse DATETIME.
if number >= 10000000000 { // '2001-00-00 00-00-00'
if t, err := ParseDatetimeFromNum(DefaultStmtNoWarningContext, number); err == nil {
dur, err1 := t.ConvertToDuration()
return dur, errors.Trace(err1)
}
}
dur := MaxMySQLDuration(fsp)
return dur, ErrOverflow.GenWithStackByArgs("Duration", strconv.Itoa(int(number)))
} else if number < -TimeMaxValue {
dur := MaxMySQLDuration(fsp)
dur.Duration = -dur.Duration
return dur, ErrOverflow.GenWithStackByArgs("Duration", strconv.Itoa(int(number)))
}
var neg bool
if neg = number < 0; neg {
number = -number
}
if number/10000 > TimeMaxHour || number%100 >= 60 || (number/100)%100 >= 60 {
return ZeroDuration, errors.Trace(ErrTruncatedWrongVal.GenWithStackByArgs(TimeStr, strconv.FormatInt(number, 10)))
}
dur := NewDuration(int(number/10000), int((number/100)%100), int(number%100), 0, fsp)
if neg {
dur.Duration = -dur.Duration
}
return dur, nil
}
// getValidIntPrefix gets prefix of the string which can be successfully parsed as int.
func getValidIntPrefix(ctx Context, str string, isFuncCast bool) (string, error) {
if !isFuncCast {
floatPrefix, err := getValidFloatPrefix(ctx, str, isFuncCast)
if err != nil {
return floatPrefix, errors.Trace(err)
}
return floatStrToIntStr(floatPrefix, str)
}
validLen := 0
for i := range len(str) {
c := str[i]
if (c == '+' || c == '-') && i == 0 {
continue
}
if c >= '0' && c <= '9' {
validLen = i + 1
continue
}
break
}
valid := str[:validLen]
if valid == "" {
valid = "0"
}
if validLen == 0 || validLen != len(str) {
return valid, errors.Trace(ctx.HandleTruncate(ErrTruncatedWrongVal.GenWithStackByArgs("INTEGER", str)))
}
return valid, nil
}
// roundIntStr is to round a **valid int string** base on the number following dot.
func roundIntStr(numNextDot byte, intStr string) string {
if numNextDot < '5' {
return intStr
}
retStr := []byte(intStr)
idx := len(intStr) - 1
for ; idx >= 1; idx-- {
if retStr[idx] != '9' {
retStr[idx]++
break
}
retStr[idx] = '0'
}
if idx == 0 {
if intStr[0] == '9' {
retStr[0] = '1'
retStr = append(retStr, '0')
} else if isDigit(intStr[0]) {
retStr[0]++
} else {
retStr[1] = '1'
retStr = append(retStr, '0')
}
}
return string(retStr)
}
var maxUintStr = strconv.FormatUint(math.MaxUint64, 10)
var minIntStr = strconv.FormatInt(math.MinInt64, 10)
// floatStrToIntStr converts a valid float string into valid integer string which can be parsed by
// strconv.ParseInt, we can't parse float first then convert it to string because precision will
// be lost. For example, the string value "18446744073709551615" which is the max number of unsigned
// int will cause some precision to lose. intStr[0] may be a positive and negative sign like '+' or '-'.
//
// This func will find serious overflow such as the len of intStr > 20 (without prefix `+/-`)
// however, it will not check whether the intStr overflow BIGINT.
func floatStrToIntStr(validFloat string, oriStr string) (intStr string, _ error) {
var dotIdx = -1
var eIdx = -1
for i := range len(validFloat) {
switch validFloat[i] {
case '.':
dotIdx = i
case 'e', 'E':
eIdx = i
}
}
if eIdx == -1 {
if dotIdx == -1 {
return validFloat, nil
}
var digits []byte
if validFloat[0] == '-' || validFloat[0] == '+' {
dotIdx--
digits = []byte(validFloat[1:])
} else {
digits = []byte(validFloat)
}
if dotIdx == 0 {
intStr = "0"
} else {
intStr = string(digits)[:dotIdx]
}
if len(digits) > dotIdx+1 {
intStr = roundIntStr(digits[dotIdx+1], intStr)
}
if (len(intStr) > 1 || intStr[0] != '0') && validFloat[0] == '-' {
intStr = "-" + intStr
}
return intStr, nil
}
// intCnt and digits contain the prefix `+/-` if validFloat[0] is `+/-`
var intCnt int
digits := make([]byte, 0, len(validFloat))
if dotIdx == -1 {
digits = append(digits, validFloat[:eIdx]...)
intCnt = len(digits)
} else {
digits = append(digits, validFloat[:dotIdx]...)
intCnt = len(digits)
digits = append(digits, validFloat[dotIdx+1:eIdx]...)
}
exp, err := strconv.Atoi(validFloat[eIdx+1:])
if err != nil {
if digits[0] == '-' {
intStr = minIntStr
} else {
intStr = maxUintStr
}
return intStr, ErrOverflow.GenWithStackByArgs("BIGINT", oriStr)
}
intCnt += exp
if exp >= 0 && (intCnt > 21 || intCnt < 0) {
// MaxInt64 has 19 decimal digits.
// MaxUint64 has 20 decimal digits.
// And the intCnt may contain the len of `+/-`,
// so I use 21 here as the early detection.
if digits[0] == '-' {
intStr = minIntStr
} else {
intStr = maxUintStr
}
return intStr, ErrOverflow.GenWithStackByArgs("BIGINT", oriStr)
}
if intCnt <= 0 {
intStr = "0"
if intCnt == 0 && len(digits) > 0 && isDigit(digits[0]) {
intStr = roundIntStr(digits[0], intStr)
}
return intStr, nil
}
if intCnt == 1 && (digits[0] == '-' || digits[0] == '+') {
intStr = "0"
if len(digits) > 1 {
intStr = roundIntStr(digits[1], intStr)
}
if intStr[0] == '1' {
intStr = string(digits[:1]) + intStr
}
return intStr, nil
}
if intCnt <= len(digits) {
intStr = string(digits[:intCnt])
if intCnt < len(digits) {
intStr = roundIntStr(digits[intCnt], intStr)
}
} else {
// convert scientific notation decimal number
extraZeroCount := intCnt - len(digits)
intStr = string(digits) + strings.Repeat("0", extraZeroCount)
}
return intStr, nil
}
// StrToFloat converts a string to a float64 at the best-effort.
func StrToFloat(ctx Context, str string, isFuncCast bool) (float64, error) {
str = strings.TrimSpace(str)
validStr, err := getValidFloatPrefix(ctx, str, isFuncCast)
f, err1 := strconv.ParseFloat(validStr, 64)
if err1 != nil {
if err2, ok := err1.(*strconv.NumError); ok {
// value will truncate to MAX/MIN if out of range.
if err2.Err == strconv.ErrRange {
err1 = ctx.HandleTruncate(ErrTruncatedWrongVal.GenWithStackByArgs("DOUBLE", str))
if math.IsInf(f, 1) {
f = math.MaxFloat64
} else if math.IsInf(f, -1) {
f = -math.MaxFloat64
}
}
}
return f, errors.Trace(err1)
}
return f, errors.Trace(err)
}
// ConvertJSONToInt64 casts JSON into int64.
func ConvertJSONToInt64(ctx Context, j BinaryJSON, unsigned bool) (int64, error) {
return ConvertJSONToInt(ctx, j, unsigned, mysql.TypeLonglong)
}
// ConvertJSONToInt casts JSON into int by type.
func ConvertJSONToInt(ctx Context, j BinaryJSON, unsigned bool, tp byte) (int64, error) {
switch j.TypeCode {
case JSONTypeCodeObject, JSONTypeCodeArray, JSONTypeCodeOpaque, JSONTypeCodeDate, JSONTypeCodeDatetime, JSONTypeCodeTimestamp, JSONTypeCodeDuration:
return 0, ctx.HandleTruncate(ErrTruncatedWrongVal.GenWithStackByArgs("INTEGER", j.String()))
case JSONTypeCodeLiteral:
switch j.Value[0] {
case JSONLiteralFalse:
return 0, nil
case JSONLiteralNil:
return 0, ctx.HandleTruncate(ErrTruncatedWrongVal.GenWithStackByArgs("INTEGER", j.String()))
default:
return 1, nil
}
case JSONTypeCodeInt64:
i := j.GetInt64()
if unsigned {
uBound := IntegerUnsignedUpperBound(tp)
u, err := ConvertIntToUint(ctx.Flags(), i, uBound, tp)
return int64(u), err
}
lBound := IntegerSignedLowerBound(tp)
uBound := IntegerSignedUpperBound(tp)
return ConvertIntToInt(i, lBound, uBound, tp)
case JSONTypeCodeUint64:
u := j.GetUint64()
if unsigned {
uBound := IntegerUnsignedUpperBound(tp)
u, err := ConvertUintToUint(u, uBound, tp)
return int64(u), err
}
uBound := IntegerSignedUpperBound(tp)
return ConvertUintToInt(u, uBound, tp)
case JSONTypeCodeFloat64:
f := j.GetFloat64()
if !unsigned {
lBound := IntegerSignedLowerBound(tp)
uBound := IntegerSignedUpperBound(tp)
u, e := ConvertFloatToInt(f, lBound, uBound, tp)
return u, e
}
bound := IntegerUnsignedUpperBound(tp)
u, err := ConvertFloatToUint(ctx.Flags(), f, bound, tp)
return int64(u), err
case JSONTypeCodeString:
str := string(hack.String(j.GetString()))
// The behavior of casting json string as an integer is consistent with casting a string as an integer.
// See the `builtinCastStringAsIntSig` in `expression` pkg. The only difference is that this function
// doesn't append any warning. This behavior is compatible with MySQL.
isNegative := len(str) > 1 && str[0] == '-'
if !isNegative {
r, err := StrToUint(ctx, str, false)
return int64(r), err
}
return StrToInt(ctx, str, false)
}
return 0, errors.New("Unknown type code in JSON")
}
// ConvertJSONToFloat casts JSON into float64.
func ConvertJSONToFloat(ctx Context, j BinaryJSON) (float64, error) {
switch j.TypeCode {
case JSONTypeCodeObject, JSONTypeCodeArray, JSONTypeCodeOpaque, JSONTypeCodeDate, JSONTypeCodeDatetime, JSONTypeCodeTimestamp, JSONTypeCodeDuration:
return 0, ctx.HandleTruncate(ErrTruncatedWrongVal.GenWithStackByArgs("FLOAT", j.String()))
case JSONTypeCodeLiteral:
switch j.Value[0] {
case JSONLiteralFalse:
return 0, nil
case JSONLiteralNil:
return 0, ctx.HandleTruncate(ErrTruncatedWrongVal.GenWithStackByArgs("FLOAT", j.String()))
default:
return 1, nil
}
case JSONTypeCodeInt64:
return float64(j.GetInt64()), nil
case JSONTypeCodeUint64:
return float64(j.GetUint64()), nil
case JSONTypeCodeFloat64:
return j.GetFloat64(), nil
case JSONTypeCodeString:
str := string(hack.String(j.GetString()))
return StrToFloat(ctx, str, false)
}
return 0, errors.New("Unknown type code in JSON")
}
// ConvertJSONToDecimal casts JSON into decimal.
func ConvertJSONToDecimal(ctx Context, j BinaryJSON) (*MyDecimal, error) {
var err error = nil
res := new(MyDecimal)
switch j.TypeCode {
case JSONTypeCodeObject, JSONTypeCodeArray, JSONTypeCodeOpaque, JSONTypeCodeDate, JSONTypeCodeDatetime, JSONTypeCodeTimestamp, JSONTypeCodeDuration:
err = ErrTruncatedWrongVal.GenWithStackByArgs("DECIMAL", j.String())
case JSONTypeCodeLiteral:
switch j.Value[0] {
case JSONLiteralFalse:
res = res.FromInt(0)
case JSONLiteralNil:
err = ErrTruncatedWrongVal.GenWithStackByArgs("DECIMAL", j.String())
default:
res = res.FromInt(1)
}
case JSONTypeCodeInt64:
res = res.FromInt(j.GetInt64())
case JSONTypeCodeUint64:
res = res.FromUint(j.GetUint64())
case JSONTypeCodeFloat64:
err = res.FromFloat64(j.GetFloat64())
case JSONTypeCodeString:
err = res.FromString(j.GetString())
}
err = ctx.HandleTruncate(err)
if err != nil {
return res, errors.Trace(err)
}
return res, errors.Trace(err)
}
// getValidFloatPrefix gets prefix of string which can be successfully parsed as float.
func getValidFloatPrefix(ctx Context, s string, isFuncCast bool) (valid string, err error) {
if isFuncCast && s == "" {
return "0", nil
}
var (
sawDot bool
sawDigit bool
validLen int
eIdx = -1
)
for i := range len(s) {
c := s[i]
if c == '+' || c == '-' {
if i != 0 && i != eIdx+1 { // "1e+1" is valid.
break
}
} else if c == '.' {
if sawDot || eIdx > 0 { // "1.1." or "1e1.1"
break
}
sawDot = true
if sawDigit { // "123." is valid.
validLen = i + 1
}
} else if c == 'e' || c == 'E' {
if !sawDigit { // "+.e"
break
}
if eIdx != -1 { // "1e5e"
break
}
eIdx = i
if i+1 == len(s) {
// ParseFloat doesn't accept 'e' as last char, MySQL does.
return s[:i], nil
}
} else if c == '\u0000' {
s = s[:validLen]
break
} else if c < '0' || c > '9' {
break
} else {
sawDigit = true
validLen = i + 1
}
}
valid = s[:validLen]
if valid == "" {
valid = "0"
}
if validLen == 0 || validLen != len(s) {
err = errors.Trace(ctx.HandleTruncate(ErrTruncatedWrongVal.GenWithStackByArgs("DOUBLE", s)))
}
return valid, err
}
// ToString converts an interface to a string.
func ToString(value any) (string, error) {
switch v := value.(type) {
case bool:
if v {
return "1", nil
}
return "0", nil
case int:
return strconv.FormatInt(int64(v), 10), nil
case int64:
return strconv.FormatInt(v, 10), nil
case uint64:
return strconv.FormatUint(v, 10), nil
case float32:
return strconv.FormatFloat(float64(v), 'f', -1, 32), nil
case float64:
return strconv.FormatFloat(v, 'f', -1, 64), nil
case string:
return v, nil
case []byte:
return string(v), nil
case Time:
return v.String(), nil
case Duration:
return v.String(), nil
case *MyDecimal:
return v.String(), nil
case BinaryLiteral:
return v.ToString(), nil
case Enum:
return v.String(), nil
case Set:
return v.String(), nil
case BinaryJSON:
return v.String(), nil
default:
return "", errors.Errorf("cannot convert %v(type %T) to string", value, value)
}
}
// Copyright 2016 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package types
import (
"fmt"
gotime "time"
"github.com/pingcap/errors"
)
// CoreTime is the internal struct type for Time.
type CoreTime uint64
// ZeroCoreTime is the zero value for TimeInternal type.
var ZeroCoreTime = CoreTime(0)
// String implements fmt.Stringer.
func (t CoreTime) String() string {
return fmt.Sprintf("{%d %d %d %d %d %d %d}", t.getYear(), t.getMonth(), t.getDay(), t.getHour(), t.getMinute(), t.getSecond(), t.getMicrosecond())
}
func (t CoreTime) getYear() uint16 {
return uint16((uint64(t) & yearBitFieldMask) >> yearBitFieldOffset)
}
func (t *CoreTime) setYear(year uint16) {
*(*uint64)(t) &= ^yearBitFieldMask
*(*uint64)(t) |= (uint64(year) << yearBitFieldOffset) & yearBitFieldMask
}
// Year returns the year value.
func (t CoreTime) Year() int {
return int(t.getYear())
}
func (t CoreTime) getMonth() uint8 {
return uint8((uint64(t) & monthBitFieldMask) >> monthBitFieldOffset)
}
func (t *CoreTime) setMonth(month uint8) {
*(*uint64)(t) &= ^monthBitFieldMask
*(*uint64)(t) |= (uint64(month) << monthBitFieldOffset) & monthBitFieldMask
}
// Month returns the month value.
func (t CoreTime) Month() int {
return int(t.getMonth())
}
func (t CoreTime) getDay() uint8 {
return uint8((uint64(t) & dayBitFieldMask) >> dayBitFieldOffset)
}
func (t *CoreTime) setDay(day uint8) {
*(*uint64)(t) &= ^dayBitFieldMask
*(*uint64)(t) |= (uint64(day) << dayBitFieldOffset) & dayBitFieldMask
}
// Day returns the day value.
func (t CoreTime) Day() int {
return int(t.getDay())
}
func (t CoreTime) getHour() uint8 {
return uint8((uint64(t) & hourBitFieldMask) >> hourBitFieldOffset)
}
func (t *CoreTime) setHour(hour uint8) {
*(*uint64)(t) &= ^hourBitFieldMask
*(*uint64)(t) |= (uint64(hour) << hourBitFieldOffset) & hourBitFieldMask
}
// Hour returns the hour value.
func (t CoreTime) Hour() int {
return int(t.getHour())
}
func (t CoreTime) getMinute() uint8 {
return uint8((uint64(t) & minuteBitFieldMask) >> minuteBitFieldOffset)
}
func (t *CoreTime) setMinute(minute uint8) {
*(*uint64)(t) &= ^minuteBitFieldMask
*(*uint64)(t) |= (uint64(minute) << minuteBitFieldOffset) & minuteBitFieldMask
}
// Minute returns the minute value.
func (t CoreTime) Minute() int {
return int(t.getMinute())
}
func (t CoreTime) getSecond() uint8 {
return uint8((uint64(t) & secondBitFieldMask) >> secondBitFieldOffset)
}
func (t *CoreTime) setSecond(second uint8) {
*(*uint64)(t) &= ^secondBitFieldMask
*(*uint64)(t) |= (uint64(second) << secondBitFieldOffset) & secondBitFieldMask
}
// Second returns the second value.
func (t CoreTime) Second() int {
return int(t.getSecond())
}
func (t CoreTime) getMicrosecond() uint32 {
return uint32((uint64(t) & microsecondBitFieldMask) >> microsecondBitFieldOffset)
}
func (t *CoreTime) setMicrosecond(microsecond uint32) {
*(*uint64)(t) &= ^microsecondBitFieldMask
*(*uint64)(t) |= (uint64(microsecond) << microsecondBitFieldOffset) & microsecondBitFieldMask
}
// Microsecond returns the microsecond value.
func (t CoreTime) Microsecond() int {
return int(t.getMicrosecond())
}
// Weekday returns weekday value.
func (t CoreTime) Weekday() gotime.Weekday {
// No need to consider timezone, use the date directly.
t1, err := t.GoTime(gotime.UTC)
// allow invalid dates
if err != nil {
return t1.Weekday()
}
return t1.Weekday()
}
// YearWeek returns year and week.
func (t CoreTime) YearWeek(mode int) (year int, week int) {
behavior := weekMode(mode) | weekBehaviourYear
return calcWeek(t, behavior)
}
// Week returns week value.
func (t CoreTime) Week(mode int) int {
if t.getMonth() == 0 || t.getDay() == 0 {
return 0
}
_, week := calcWeek(t, weekMode(mode))
return week
}
// YearDay returns year and day.
func (t CoreTime) YearDay() int {
if t.getMonth() == 0 || t.getDay() == 0 {
return 0
}
year, month, day := t.Year(), t.Month(), t.Day()
return calcDaynr(year, month, day) -
calcDaynr(year, 1, 1) + 1
}
// GoTime converts Time to GoTime.
func (t CoreTime) GoTime(loc *gotime.Location) (gotime.Time, error) {
// gotime.Time can't represent month 0 or day 0, date contains 0 would be converted to a nearest date,
// For example, 2006-12-00 00:00:00 would become 2015-11-30 23:59:59.
year, month, day, hour, minute, second, microsecond := t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute(), t.Second(), t.Microsecond()
tm := gotime.Date(year, gotime.Month(month), day, hour, minute, second, microsecond*1000, loc)
year2, month2, day2 := tm.Date()
hour2, minute2, second2 := tm.Clock()
microsec2 := tm.Nanosecond() / 1000
// This function will check the result, and return an error if it's not the same with the origin input .
if year2 != year || int(month2) != month || day2 != day ||
hour2 != hour || minute2 != minute || second2 != second ||
microsec2 != microsecond {
return tm, errors.Trace(ErrWrongValue.GenWithStackByArgs(TimeStr, t))
}
return tm, nil
}
// AdjustedGoTime converts Time to GoTime and adjust for invalid DST times
// like during the DST change with increased offset,
// normally moving to Daylight Saving Time.
// see https://github.com/pingcap/tidb/issues/28739
func (t CoreTime) AdjustedGoTime(loc *gotime.Location) (gotime.Time, error) {
tm, err := t.GoTime(loc)
if err == nil {
return tm, nil
}
// The converted go time did not map back to the same time, probably it was between a
// daylight saving transition, adjust the time to the closest Zone bound.
start, end := tm.ZoneBounds()
// time zone transitions are normally 1 hour, allow up to 4 hours before returning error
if start.Sub(tm).Abs().Hours() > 4.0 && end.Sub(tm).Abs().Hours() > 4.0 {
return tm, errors.Trace(ErrWrongValue.GenWithStackByArgs(TimeStr, tm))
}
// use the closest transition time
if tm.Sub(start).Abs() <= tm.Sub(end).Abs() {
return start, nil
}
return end, nil
}
// IsLeapYear returns if it's leap year.
func (t CoreTime) IsLeapYear() bool {
return isLeapYear(t.getYear())
}
func isLeapYear(year uint16) bool {
return (year%4 == 0 && year%100 != 0) || year%400 == 0
}
var daysByMonth = [12]int{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
// GetLastDay returns the last day of the month
func GetLastDay(year, month int) int {
var day = 0
if month > 0 && month <= 12 {
day = daysByMonth[month-1]
}
if month == 2 && isLeapYear(uint16(year)) {
day = 29
}
return day
}
func getFixDays(year, month, day int, ot gotime.Time) int {
if (year != 0 || month != 0) && day == 0 {
od := ot.Day()
t := ot.AddDate(year, month, day)
td := t.Day()
if od != td {
tm := int(t.Month()) - 1
tMax := GetLastDay(t.Year(), tm)
dd := tMax - od
return dd
}
}
return 0
}
// compareTime compare two Time.
// return:
//
// 0: if a == b
// 1: if a > b
//
// -1: if a < b
func compareTime(a, b CoreTime) int {
ta := datetimeToUint64(a)
tb := datetimeToUint64(b)
switch {
case ta < tb:
return -1
case ta > tb:
return 1
}
switch {
case a.Microsecond() < b.Microsecond():
return -1
case a.Microsecond() > b.Microsecond():
return 1
}
return 0
}
// AddDate fix gap between mysql and golang api
// When we execute select date_add('2018-01-31',interval 1 month) in mysql we got 2018-02-28
// but in tidb we got 2018-03-03.
// Dig it and we found it's caused by golang api time.Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) Time ,
// it says October 32 converts to November 1 ,it conflicts with mysql.
// See https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-add
func AddDate(year, month, day int64, ot gotime.Time) (nt gotime.Time, _ error) {
// We must limit the range of year, month and day to avoid overflow.
// The datetime range is from '1000-01-01 00:00:00.000000' to '9999-12-31 23:59:59.499999',
// so it is safe to limit the added value from -10000*365 to 10000*365.
const maxAdd = 10000 * 365
const minAdd = -maxAdd
if year > maxAdd || year < minAdd ||
month > maxAdd || month < minAdd ||
day > maxAdd || day < minAdd {
return nt, ErrDatetimeFunctionOverflow.GenWithStackByArgs("datetime")
}
df := getFixDays(int(year), int(month), int(day), ot)
if df != 0 {
nt = ot.AddDate(int(year), int(month), df)
} else {
nt = ot.AddDate(int(year), int(month), int(day))
}
if nt.Year() < 0 || nt.Year() > 9999 {
return nt, ErrDatetimeFunctionOverflow.GenWithStackByArgs("datetime")
}
return nt, nil
}
func calcTimeFromSec(to *CoreTime, seconds, microseconds int) {
to.setHour(uint8(seconds / 3600))
seconds = seconds % 3600
to.setMinute(uint8(seconds / 60))
to.setSecond(uint8(seconds % 60))
to.setMicrosecond(uint32(microseconds))
}
const secondsIn24Hour = 86400
func calcTimeDiffInternal(t1 CoreTime, year, month, day, hour, minute, second, microsecond, sign int) (seconds, microseconds int, neg bool) {
days := calcDaynr(t1.Year(), t1.Month(), t1.Day())
days2 := calcDaynr(year, month, day)
days -= sign * days2
tmp := (int64(days)*secondsIn24Hour+
int64(t1.Hour())*3600+int64(t1.Minute())*60+
int64(t1.Second())-
int64(sign)*(int64(hour)*3600+int64(minute)*60+
int64(second)))*
1e6 +
int64(t1.Microsecond()) - int64(sign)*int64(microsecond)
if tmp < 0 {
tmp = -tmp
neg = true
}
seconds = int(tmp / 1e6)
microseconds = int(tmp % 1e6)
return
}
// calcTimeDiff calculates difference between two datetime values as seconds + microseconds.
// sign can be +1 or -1, and t2 is preprocessed with sign first.
func calcTimeTimeDiff(t1, t2 CoreTime, sign int) (seconds, microseconds int, neg bool) {
return calcTimeDiffInternal(t1, t2.Year(), t2.Month(), t2.Day(), t2.Hour(), t2.Minute(), t2.Second(), t2.Microsecond(), sign)
}
// calcTimeDiff calculates difference between a datetime value and a duration as seconds + microseconds.
func calcTimeDurationDiff(t CoreTime, d Duration) (seconds, microseconds int, neg bool) {
sign, hh, mm, ss, micro := splitDuration(d.Duration)
return calcTimeDiffInternal(t, 0, 0, 0, hh, mm, ss, micro, -sign)
}
// datetimeToUint64 converts time value to integer in YYYYMMDDHHMMSS format.
func datetimeToUint64(t CoreTime) uint64 {
return uint64(t.Year())*1e10 +
uint64(t.Month())*1e8 +
uint64(t.Day())*1e6 +
uint64(t.Hour())*1e4 +
uint64(t.Minute())*1e2 +
uint64(t.Second())
}
// calcDaynr calculates days since 0000-00-00.
func calcDaynr(year, month, day int) int {
if year == 0 && month == 0 {
return 0
}
delsum := 365*year + 31*(month-1) + day
if month <= 2 {
year--
} else {
delsum -= (month*4 + 23) / 10
}
temp := ((year/100 + 1) * 3) / 4
return delsum + year/4 - temp
}
// DateDiff calculates number of days between two days.
func DateDiff(startTime, endTime CoreTime) int {
return calcDaynr(startTime.Year(), startTime.Month(), startTime.Day()) - calcDaynr(endTime.Year(), endTime.Month(), endTime.Day())
}
// calcDaysInYear calculates days in one year, it works with 0 <= year <= 99.
func calcDaysInYear(year int) int {
if (year&3) == 0 && (year%100 != 0 || (year%400 == 0 && (year != 0))) {
return 366
}
return 365
}
// calcWeekday calculates weekday from daynr, returns 0 for Monday, 1 for Tuesday ...
func calcWeekday(daynr int, sundayFirstDayOfWeek bool) int {
daynr += 5
if sundayFirstDayOfWeek {
daynr++
}
return daynr % 7
}
type weekBehaviour uint
const (
// weekBehaviourMondayFirst set Monday as first day of week; otherwise Sunday is first day of week
weekBehaviourMondayFirst weekBehaviour = 1 << iota
// If set, Week is in range 1-53, otherwise Week is in range 0-53.
// Note that this flag is only relevant if WEEK_JANUARY is not set.
weekBehaviourYear
// If not set, Weeks are numbered according to ISO 8601:1988.
// If set, the week that contains the first 'first-day-of-week' is week 1.
weekBehaviourFirstWeekday
)
func (v weekBehaviour) test(flag weekBehaviour) bool {
return (v & flag) != 0
}
func weekMode(mode int) weekBehaviour {
weekFormat := weekBehaviour(mode & 7)
if (weekFormat & weekBehaviourMondayFirst) == 0 {
weekFormat ^= weekBehaviourFirstWeekday
}
return weekFormat
}
// calcWeek calculates week and year for the time.
func calcWeek(t CoreTime, wb weekBehaviour) (year int, week int) {
var days int
ty, tm, td := int(t.getYear()), int(t.getMonth()), int(t.getDay())
daynr := calcDaynr(ty, tm, td)
firstDaynr := calcDaynr(ty, 1, 1)
mondayFirst := wb.test(weekBehaviourMondayFirst)
weekYear := wb.test(weekBehaviourYear)
firstWeekday := wb.test(weekBehaviourFirstWeekday)
weekday := calcWeekday(firstDaynr, !mondayFirst)
year = ty
if tm == 1 && td <= 7-weekday {
if !weekYear &&
((firstWeekday && weekday != 0) || (!firstWeekday && weekday >= 4)) {
week = 0
return
}
weekYear = true
year--
days = calcDaysInYear(year)
firstDaynr -= days
weekday = (weekday + 53*7 - days) % 7
}
if (firstWeekday && weekday != 0) ||
(!firstWeekday && weekday >= 4) {
days = daynr - (firstDaynr + 7 - weekday)
} else {
days = daynr - (firstDaynr - weekday)
}
if weekYear && days >= 52*7 {
weekday = (weekday + calcDaysInYear(year)) % 7
if (!firstWeekday && weekday < 4) ||
(firstWeekday && weekday == 0) {
year++
week = 1
return
}
}
week = days/7 + 1
return
}
// mixDateAndDuration mixes a date value and a duration value.
func mixDateAndDuration(date *CoreTime, dur Duration) {
if dur.Duration >= 0 && dur.Hour() < 24 {
_, hh, mm, ss, frac := splitDuration(dur.Duration)
date.setHour(uint8(hh))
date.setMinute(uint8(mm))
date.setSecond(uint8(ss))
date.setMicrosecond(uint32(frac))
return
}
// Time is negative or outside of 24 hours internal.
seconds, microseconds, _ := calcTimeDurationDiff(*date, dur)
// If we want to use this function with arbitrary dates, this code will need
// to cover cases when time is negative and "date < -time".
days := seconds / secondsIn24Hour
calcTimeFromSec(date, seconds%secondsIn24Hour, microseconds)
year, month, day := getDateFromDaynr(uint(days))
date.setYear(uint16(year))
date.setMonth(uint8(month))
date.setDay(uint8(day))
}
// getDateFromDaynr changes a daynr to year, month and day,
// daynr 0 is returned as date 00.00.00
func getDateFromDaynr(daynr uint) (year uint, month uint, day uint) {
if daynr <= 365 || daynr >= 3652500 {
return
}
year = daynr * 100 / 36525
temp := (((year-1)/100 + 1) * 3) / 4
dayOfYear := daynr - year*365 - (year-1)/4 + temp
daysInYear := calcDaysInYear(int(year))
for dayOfYear > uint(daysInYear) {
dayOfYear -= uint(daysInYear)
year++
daysInYear = calcDaysInYear(int(year))
}
leapDay := uint(0)
if daysInYear == 366 {
if dayOfYear > 31+28 {
dayOfYear--
if dayOfYear == 31+28 {
// Handle leapyears leapday.
leapDay = 1
}
}
}
month = 1
for _, days := range daysByMonth {
if dayOfYear <= uint(days) {
break
}
dayOfYear -= uint(days)
month++
}
day = dayOfYear + leapDay
return
}
const (
intervalYEAR = "YEAR"
intervalQUARTER = "QUARTER"
intervalMONTH = "MONTH"
intervalWEEK = "WEEK"
intervalDAY = "DAY"
intervalHOUR = "HOUR"
intervalMINUTE = "MINUTE"
intervalSECOND = "SECOND"
intervalMICROSECOND = "MICROSECOND"
)
func timestampDiff(intervalType string, t1, t2 CoreTime) int64 {
seconds, microseconds, neg := calcTimeTimeDiff(t2, t1, 1)
months := uint(0)
if intervalType == intervalYEAR || intervalType == intervalQUARTER ||
intervalType == intervalMONTH {
var (
yearBeg, yearEnd, monthBeg, monthEnd, dayBeg, dayEnd uint
secondBeg, secondEnd, microsecondBeg, microsecondEnd uint
)
if neg {
yearBeg = uint(t2.Year())
yearEnd = uint(t1.Year())
monthBeg = uint(t2.Month())
monthEnd = uint(t1.Month())
dayBeg = uint(t2.Day())
dayEnd = uint(t1.Day())
secondBeg = uint(t2.Hour()*3600 + t2.Minute()*60 + t2.Second())
secondEnd = uint(t1.Hour()*3600 + t1.Minute()*60 + t1.Second())
microsecondBeg = uint(t2.Microsecond())
microsecondEnd = uint(t1.Microsecond())
} else {
yearBeg = uint(t1.Year())
yearEnd = uint(t2.Year())
monthBeg = uint(t1.Month())
monthEnd = uint(t2.Month())
dayBeg = uint(t1.Day())
dayEnd = uint(t2.Day())
secondBeg = uint(t1.Hour()*3600 + t1.Minute()*60 + t1.Second())
secondEnd = uint(t2.Hour()*3600 + t2.Minute()*60 + t2.Second())
microsecondBeg = uint(t1.Microsecond())
microsecondEnd = uint(t2.Microsecond())
}
// calc years
years := yearEnd - yearBeg
if monthEnd < monthBeg ||
(monthEnd == monthBeg && dayEnd < dayBeg) {
years--
}
// calc months
months = 12 * years
if monthEnd < monthBeg ||
(monthEnd == monthBeg && dayEnd < dayBeg) {
months += 12 - (monthBeg - monthEnd)
} else {
months += monthEnd - monthBeg
}
if dayEnd < dayBeg {
months--
} else if (dayEnd == dayBeg) &&
((secondEnd < secondBeg) ||
(secondEnd == secondBeg && microsecondEnd < microsecondBeg)) {
months--
}
}
negV := int64(1)
if neg {
negV = -1
}
switch intervalType {
case intervalYEAR:
return int64(months) / 12 * negV
case intervalQUARTER:
return int64(months) / 3 * negV
case intervalMONTH:
return int64(months) * negV
case intervalWEEK:
return int64(seconds) / secondsIn24Hour / 7 * negV
case intervalDAY:
return int64(seconds) / secondsIn24Hour * negV
case intervalHOUR:
return int64(seconds) / 3600 * negV
case intervalMINUTE:
return int64(seconds) / 60 * negV
case intervalSECOND:
return int64(seconds) * negV
case intervalMICROSECOND:
// In MySQL difference between any two valid datetime values
// in microseconds fits into longlong.
return int64(seconds*1000000+microseconds) * negV
}
return 0
}
// Copyright 2016 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package types
import (
"bytes"
"cmp"
gjson "encoding/json"
"fmt"
"math"
"slices"
"strconv"
"strings"
"time"
"unicode"
"unicode/utf8"
"unsafe"
"github.com/pingcap/errors"
"github.com/pingcap/tidb/pkg/parser/charset"
"github.com/pingcap/tidb/pkg/parser/mysql"
"github.com/pingcap/tidb/pkg/parser/terror"
"github.com/pingcap/tidb/pkg/parser/types"
"github.com/pingcap/tidb/pkg/planner/cascades/base"
"github.com/pingcap/tidb/pkg/util/collate"
"github.com/pingcap/tidb/pkg/util/hack"
"github.com/pingcap/tidb/pkg/util/intest"
"github.com/pingcap/tidb/pkg/util/logutil"
"go.uber.org/zap"
)
// Kind constants.
const (
KindNull byte = 0
KindInt64 byte = 1
KindUint64 byte = 2
KindFloat32 byte = 3
KindFloat64 byte = 4
KindString byte = 5
KindBytes byte = 6
KindBinaryLiteral byte = 7 // Used for BIT / HEX literals.
KindMysqlDecimal byte = 8
KindMysqlDuration byte = 9
KindMysqlEnum byte = 10
KindMysqlBit byte = 11 // Used for BIT table column values.
KindMysqlSet byte = 12
KindMysqlTime byte = 13
KindInterface byte = 14
KindMinNotNull byte = 15
KindMaxValue byte = 16
KindRaw byte = 17
KindMysqlJSON byte = 18
KindVectorFloat32 byte = 19
)
// Datum is a data box holds different kind of data.
// It has better performance and is easier to use than `interface{}`.
type Datum struct {
k byte // datum kind.
decimal uint16 // decimal can hold uint16 values.
length uint32 // length can hold uint32 values.
i int64 // i can hold int64 uint64 float64 values.
collation string // collation hold the collation information for string value.
b []byte // b can hold string or []byte values.
x any // x hold all other types.
}
// EmptyDatumSize is the size of empty datum.
// 72 = 1 + 1 (byte) + 2 (uint16) + 4 (uint32) + 8 (int64) + 16 (string) + 24 ([]byte) + 16 (interface{})
const EmptyDatumSize = int64(unsafe.Sizeof(Datum{}))
// Clone create a deep copy of the Datum.
func (d *Datum) Clone() *Datum {
ret := new(Datum)
d.Copy(ret)
return ret
}
// Copy deep copies a Datum into destination.
func (d *Datum) Copy(dst *Datum) {
*dst = *d
if d.b != nil {
dst.b = make([]byte, len(d.b))
copy(dst.b, d.b)
}
switch dst.Kind() {
case KindMysqlDecimal:
d := *d.GetMysqlDecimal()
dst.SetMysqlDecimal(&d)
case KindMysqlTime:
dst.SetMysqlTime(d.GetMysqlTime())
}
}
// Kind gets the kind of the datum.
func (d *Datum) Kind() byte {
return d.k
}
// Collation gets the collation of the datum.
func (d *Datum) Collation() string {
return d.collation
}
// SetCollation sets the collation of the datum.
func (d *Datum) SetCollation(collation string) {
d.collation = collation
}
// Frac gets the frac of the datum.
func (d *Datum) Frac() int {
return int(d.decimal)
}
// SetFrac sets the frac of the datum.
func (d *Datum) SetFrac(frac int) {
d.decimal = uint16(frac)
}
// Length gets the length of the datum.
func (d *Datum) Length() int {
return int(d.length)
}
// SetLength sets the length of the datum.
func (d *Datum) SetLength(l int) {
d.length = uint32(l)
}
// IsNull checks if datum is null.
func (d *Datum) IsNull() bool {
return d.k == KindNull
}
// GetInt64 gets int64 value.
func (d *Datum) GetInt64() int64 {
return d.i
}
// SetInt64 sets int64 value.
func (d *Datum) SetInt64(i int64) {
d.k = KindInt64
d.i = i
}
// GetUint64 gets uint64 value.
func (d *Datum) GetUint64() uint64 {
return uint64(d.i)
}
// SetUint64 sets uint64 value.
func (d *Datum) SetUint64(i uint64) {
d.k = KindUint64
d.i = int64(i)
}
// GetFloat64 gets float64 value.
func (d *Datum) GetFloat64() float64 {
return math.Float64frombits(uint64(d.i))
}
// SetFloat64 sets float64 value.
func (d *Datum) SetFloat64(f float64) {
d.k = KindFloat64
d.i = int64(math.Float64bits(f))
}
// GetFloat32 gets float32 value.
func (d *Datum) GetFloat32() float32 {
return float32(math.Float64frombits(uint64(d.i)))
}
// SetFloat32 sets float32 value.
func (d *Datum) SetFloat32(f float32) {
d.k = KindFloat32
d.i = int64(math.Float64bits(float64(f)))
}
// SetFloat32FromF64 sets float32 values from f64
func (d *Datum) SetFloat32FromF64(f float64) {
d.k = KindFloat32
d.i = int64(math.Float64bits(f))
}
// GetString gets string value.
func (d *Datum) GetString() string {
return string(hack.String(d.b))
}
// GetBinaryStringEncoded gets the string value encoded with given charset.
func (d *Datum) GetBinaryStringEncoded() string {
coll, err := charset.GetCollationByName(d.Collation())
if err != nil {
logutil.BgLogger().Warn("unknown collation", zap.Error(err))
return d.GetString()
}
enc := charset.FindEncodingTakeUTF8AsNoop(coll.CharsetName)
replace, _ := enc.Transform(nil, d.GetBytes(), charset.OpEncodeNoErr)
return string(hack.String(replace))
}
// GetBinaryStringDecoded gets the string value decoded with given charset.
func (d *Datum) GetBinaryStringDecoded(flags Flags, chs string) (string, error) {
enc, skip := findEncoding(flags, chs)
if skip {
return d.GetString(), nil
}
trim, err := enc.Transform(nil, d.GetBytes(), charset.OpDecode)
return string(hack.String(trim)), err
}
// GetStringWithCheck gets the string and checks if it is valid in a given charset.
func (d *Datum) GetStringWithCheck(flags Flags, chs string) (string, error) {
enc, skip := findEncoding(flags, chs)
if skip {
return d.GetString(), nil
}
str := d.GetBytes()
if !enc.IsValid(str) {
replace, err := enc.Transform(nil, str, charset.OpReplace)
return string(hack.String(replace)), err
}
return d.GetString(), nil
}
func findEncoding(flags Flags, chs string) (enc charset.Encoding, skip bool) {
enc = charset.FindEncoding(chs)
if enc.Tp() == charset.EncodingTpUTF8 && flags.SkipUTF8Check() ||
enc.Tp() == charset.EncodingTpASCII && flags.SkipASCIICheck() {
return nil, true
}
if chs == charset.CharsetUTF8 && !flags.SkipUTF8MB4Check() {
enc = charset.EncodingUTF8MB3StrictImpl
}
return enc, false
}
// SetString sets string value.
func (d *Datum) SetString(s string, collation string) {
d.k = KindString
sink(s)
d.b = hack.Slice(s)
d.collation = collation
}
// sink prevents s from being allocated on the stack.
var sink = func(s string) {
}
// GetBytes gets bytes value.
func (d *Datum) GetBytes() []byte {
if d.b != nil {
return d.b
}
return []byte{}
}
// SetBytes sets bytes value to datum.
func (d *Datum) SetBytes(b []byte) {
d.k = KindBytes
d.b = b
d.collation = charset.CollationBin
}
// SetBytesAsString sets bytes value to datum as string type.
func (d *Datum) SetBytesAsString(b []byte, collation string, length uint32) {
d.k = KindString
d.b = b
d.length = length
d.collation = collation
}
// GetInterface gets interface value.
func (d *Datum) GetInterface() any {
return d.x
}
// SetInterface sets interface to datum.
func (d *Datum) SetInterface(x any) {
d.k = KindInterface
d.x = x
}
// SetNull sets datum to nil.
func (d *Datum) SetNull() {
d.k = KindNull
d.x = nil
}
// SetMinNotNull sets datum to minNotNull value.
func (d *Datum) SetMinNotNull() {
d.k = KindMinNotNull
d.x = nil
}
// GetBinaryLiteral4Cmp gets Bit value, and remove it's prefix 0 for comparison.
func (d *Datum) GetBinaryLiteral4Cmp() BinaryLiteral {
bitLen := len(d.b)
if bitLen == 0 {
return d.b
}
for i := range bitLen {
// Remove the prefix 0 in the bit array.
if d.b[i] != 0 {
return d.b[i:]
}
}
// The result is 0x000...00, we just the return 0x00.
return d.b[bitLen-1:]
}
// GetBinaryLiteral gets Bit value
func (d *Datum) GetBinaryLiteral() BinaryLiteral {
return d.b
}
// GetMysqlBit gets MysqlBit value
func (d *Datum) GetMysqlBit() BinaryLiteral {
return d.GetBinaryLiteral()
}
// SetBinaryLiteral sets Bit value
func (d *Datum) SetBinaryLiteral(b BinaryLiteral) {
d.k = KindBinaryLiteral
d.b = b
d.collation = charset.CollationBin
}
// SetMysqlBit sets MysqlBit value
func (d *Datum) SetMysqlBit(b BinaryLiteral) {
d.k = KindMysqlBit
d.b = b
}
// GetMysqlDecimal gets decimal value
func (d *Datum) GetMysqlDecimal() *MyDecimal {
return d.x.(*MyDecimal)
}
// SetMysqlDecimal sets decimal value
func (d *Datum) SetMysqlDecimal(b *MyDecimal) {
d.k = KindMysqlDecimal
d.x = b
}
// GetMysqlDuration gets Duration value
func (d *Datum) GetMysqlDuration() Duration {
return Duration{Duration: time.Duration(d.i), Fsp: int(int8(d.decimal))}
}
// SetMysqlDuration sets Duration value
func (d *Datum) SetMysqlDuration(b Duration) {
d.k = KindMysqlDuration
d.i = int64(b.Duration)
d.decimal = uint16(b.Fsp)
}
// GetMysqlEnum gets Enum value
func (d *Datum) GetMysqlEnum() Enum {
str := string(hack.String(d.b))
return Enum{Value: uint64(d.i), Name: str}
}
// SetMysqlEnum sets Enum value
func (d *Datum) SetMysqlEnum(b Enum, collation string) {
d.k = KindMysqlEnum
d.i = int64(b.Value)
sink(b.Name)
d.collation = collation
d.b = hack.Slice(b.Name)
}
// GetMysqlSet gets Set value
func (d *Datum) GetMysqlSet() Set {
str := string(hack.String(d.b))
return Set{Value: uint64(d.i), Name: str}
}
// SetMysqlSet sets Set value
func (d *Datum) SetMysqlSet(b Set, collation string) {
d.k = KindMysqlSet
d.i = int64(b.Value)
sink(b.Name)
d.collation = collation
d.b = hack.Slice(b.Name)
}
// GetMysqlJSON gets json.BinaryJSON value
func (d *Datum) GetMysqlJSON() BinaryJSON {
return BinaryJSON{TypeCode: byte(d.i), Value: d.b}
}
// SetMysqlJSON sets json.BinaryJSON value
func (d *Datum) SetMysqlJSON(b BinaryJSON) {
d.k = KindMysqlJSON
d.i = int64(b.TypeCode)
d.b = b.Value
}
// SetVectorFloat32 sets VectorFloat32 value
func (d *Datum) SetVectorFloat32(vec VectorFloat32) {
d.k = KindVectorFloat32
d.b = vec.ZeroCopySerialize()
}
// GetVectorFloat32 gets VectorFloat32 value
func (d *Datum) GetVectorFloat32() VectorFloat32 {
v, _, err := ZeroCopyDeserializeVectorFloat32(d.b)
if err != nil {
panic(err)
}
return v
}
// GetMysqlTime gets types.Time value
func (d *Datum) GetMysqlTime() Time {
return d.x.(Time)
}
// SetMysqlTime sets types.Time value
func (d *Datum) SetMysqlTime(b Time) {
d.k = KindMysqlTime
d.x = b
}
// SetRaw sets raw value.
func (d *Datum) SetRaw(b []byte) {
d.k = KindRaw
d.b = b
}
// GetRaw gets raw value.
func (d *Datum) GetRaw() []byte {
return d.b
}
// SetAutoID set the auto increment ID according to its int flag.
// Don't use it directly, useless wrapped with setDatumAutoIDAndCast.
func (d *Datum) SetAutoID(id int64, flag uint) {
if mysql.HasUnsignedFlag(flag) {
d.SetUint64(uint64(id))
} else {
d.SetInt64(id)
}
}
// String returns a human-readable description of Datum. It is intended only for debugging.
func (d Datum) String() string {
var t string
switch d.k {
case KindNull:
t = "KindNull"
case KindInt64:
t = "KindInt64"
case KindUint64:
t = "KindUint64"
case KindFloat32:
t = "KindFloat32"
case KindFloat64:
t = "KindFloat64"
case KindString:
t = "KindString"
case KindBytes:
t = "KindBytes"
case KindBinaryLiteral:
t = "KindBinaryLiteral"
case KindMysqlDecimal:
t = "KindMysqlDecimal"
case KindMysqlDuration:
t = "KindMysqlDuration"
case KindMysqlEnum:
t = "KindMysqlEnum"
case KindMysqlBit:
t = "KindMysqlBit"
case KindMysqlSet:
t = "KindMysqlSet"
case KindMysqlTime:
t = "KindMysqlTime"
case KindInterface:
t = "KindInterface"
case KindMinNotNull:
t = "KindMinNotNull"
case KindMaxValue:
t = "KindMaxValue"
case KindRaw:
t = "KindRaw"
case KindMysqlJSON:
t = "KindMysqlJSON"
case KindVectorFloat32:
t = "KindVectorFloat32"
default:
t = "Unknown"
}
v := d.GetValue()
switch v.(type) {
case []byte, string:
quote := `"`
// We only need the escape functionality of %q, the quoting is not needed,
// so we trim the \" prefix and suffix here.
v = strings.TrimSuffix(
strings.TrimPrefix(
fmt.Sprintf("%q", v),
quote),
quote)
}
return fmt.Sprintf("%v %v", t, v)
}
// GetValue gets the value of the datum of any kind.
func (d *Datum) GetValue() any {
switch d.k {
case KindInt64:
return d.GetInt64()
case KindUint64:
return d.GetUint64()
case KindFloat32:
return d.GetFloat32()
case KindFloat64:
return d.GetFloat64()
case KindString:
return d.GetString()
case KindBytes:
return d.GetBytes()
case KindMysqlDecimal:
return d.GetMysqlDecimal()
case KindMysqlDuration:
return d.GetMysqlDuration()
case KindMysqlEnum:
return d.GetMysqlEnum()
case KindBinaryLiteral, KindMysqlBit:
return d.GetBinaryLiteral()
case KindMysqlSet:
return d.GetMysqlSet()
case KindMysqlJSON:
return d.GetMysqlJSON()
case KindMysqlTime:
return d.GetMysqlTime()
case KindVectorFloat32:
return d.GetVectorFloat32()
default:
return d.GetInterface()
}
}
// TruncatedStringify returns the %v representation of the datum
// but truncated (for example, for strings, only first 64 bytes is printed).
// This function is useful in contexts like EXPLAIN.
func (d *Datum) TruncatedStringify() string {
switch d.k {
case KindString, KindBytes:
return truncateStringIfNeeded(d.GetString())
case KindMysqlJSON:
return truncateStringIfNeeded(d.GetMysqlJSON().String())
case KindVectorFloat32:
// Vector supports native efficient truncation.
return d.GetVectorFloat32().TruncatedString()
case KindInt64:
return strconv.FormatInt(d.GetInt64(), 10)
case KindUint64:
return strconv.FormatUint(d.GetUint64(), 10)
default:
// For other types, no truncation is needed.
return fmt.Sprintf("%v", d.GetValue())
}
}
func truncateStringIfNeeded(str string) string {
const maxLen = 64
if len(str) > maxLen {
const suffix = "...(len:"
lenStr := strconv.Itoa(len(str))
buf := bytes.NewBuffer(make([]byte, 0, maxLen+len(suffix)+len(lenStr)+1))
buf.WriteString(str[:maxLen])
buf.WriteString(suffix)
buf.WriteString(lenStr)
buf.WriteByte(')')
return buf.String()
}
return str
}
// SetValueWithDefaultCollation sets any kind of value.
func (d *Datum) SetValueWithDefaultCollation(val any) {
switch x := val.(type) {
case nil:
d.SetNull()
case bool:
if x {
d.SetInt64(1)
} else {
d.SetInt64(0)
}
case int:
d.SetInt64(int64(x))
case int64:
d.SetInt64(x)
case uint64:
d.SetUint64(x)
case float32:
d.SetFloat32(x)
case float64:
d.SetFloat64(x)
case string:
d.SetString(x, mysql.DefaultCollationName)
case []byte:
d.SetBytes(x)
case *MyDecimal:
d.SetMysqlDecimal(x)
case Duration:
d.SetMysqlDuration(x)
case Enum:
d.SetMysqlEnum(x, mysql.DefaultCollationName)
case BinaryLiteral:
d.SetBinaryLiteral(x)
case BitLiteral: // Store as BinaryLiteral for Bit and Hex literals
d.SetBinaryLiteral(BinaryLiteral(x))
case HexLiteral:
d.SetBinaryLiteral(BinaryLiteral(x))
case Set:
d.SetMysqlSet(x, mysql.DefaultCollationName)
case BinaryJSON:
d.SetMysqlJSON(x)
case Time:
d.SetMysqlTime(x)
case VectorFloat32:
d.SetVectorFloat32(x)
default:
d.SetInterface(x)
}
}
// SetValue sets any kind of value.
func (d *Datum) SetValue(val any, tp *types.FieldType) {
switch x := val.(type) {
case nil:
d.SetNull()
case bool:
if x {
d.SetInt64(1)
} else {
d.SetInt64(0)
}
case int:
d.SetInt64(int64(x))
case int64:
d.SetInt64(x)
case uint64:
d.SetUint64(x)
case float32:
d.SetFloat32(x)
case float64:
d.SetFloat64(x)
case string:
d.SetString(x, tp.GetCollate())
case []byte:
d.SetBytes(x)
case *MyDecimal:
d.SetMysqlDecimal(x)
case Duration:
d.SetMysqlDuration(x)
case Enum:
d.SetMysqlEnum(x, tp.GetCollate())
case BinaryLiteral:
d.SetBinaryLiteral(x)
case BitLiteral: // Store as BinaryLiteral for Bit and Hex literals
d.SetBinaryLiteral(BinaryLiteral(x))
case HexLiteral:
d.SetBinaryLiteral(BinaryLiteral(x))
case Set:
d.SetMysqlSet(x, tp.GetCollate())
case BinaryJSON:
d.SetMysqlJSON(x)
case Time:
d.SetMysqlTime(x)
case VectorFloat32:
d.SetVectorFloat32(x)
default:
d.SetInterface(x)
}
}
// Hash64ForDatum is a hash function for initialized by codec package.
var Hash64ForDatum func(h base.Hasher, d *Datum)
// Hash64 implements base.HashEquals<0th> interface.
func (d *Datum) Hash64(h base.Hasher) {
Hash64ForDatum(h, d)
}
// Equals implements base.HashEquals.<1st> interface.
func (d *Datum) Equals(other any) bool {
if other == nil {
return false
}
var d2 *Datum
switch x := other.(type) {
case *Datum:
d2 = x
case Datum:
d2 = &x
default:
return false
}
ok := d.k == d2.k &&
d.decimal == d2.decimal &&
d.length == d2.length &&
d.i == d2.i &&
d.collation == d2.collation &&
string(d.b) == string(d2.b)
if !ok {
return false
}
// compare x
switch d.k {
case KindMysqlDecimal:
return d.GetMysqlDecimal().Compare(d2.GetMysqlDecimal()) == 0
case KindMysqlTime:
return d.GetMysqlTime().Compare(d2.GetMysqlTime()) == 0
default:
return true
}
}
// Compare compares datum to another datum.
// Notes: don't rely on datum.collation to get the collator, it's tend to buggy.
func (d *Datum) Compare(ctx Context, ad *Datum, comparer collate.Collator) (int, error) {
if d.k == KindMysqlJSON && ad.k != KindMysqlJSON {
cmp, err := ad.Compare(ctx, d, comparer)
return cmp * -1, errors.Trace(err)
}
switch ad.k {
case KindNull:
if d.k == KindNull {
return 0, nil
}
return 1, nil
case KindMinNotNull:
if d.k == KindNull {
return -1, nil
} else if d.k == KindMinNotNull {
return 0, nil
}
return 1, nil
case KindMaxValue:
if d.k == KindMaxValue {
return 0, nil
}
return -1, nil
case KindInt64:
return d.compareInt64(ctx, ad.GetInt64())
case KindUint64:
return d.compareUint64(ctx, ad.GetUint64())
case KindFloat32, KindFloat64:
return d.compareFloat64(ctx, ad.GetFloat64())
case KindString:
return d.compareString(ctx, ad.GetString(), comparer)
case KindBytes:
return d.compareString(ctx, ad.GetString(), comparer)
case KindMysqlDecimal:
return d.compareMysqlDecimal(ctx, ad.GetMysqlDecimal())
case KindMysqlDuration:
return d.compareMysqlDuration(ctx, ad.GetMysqlDuration())
case KindMysqlEnum:
return d.compareMysqlEnum(ctx, ad.GetMysqlEnum(), comparer)
case KindBinaryLiteral, KindMysqlBit:
return d.compareBinaryLiteral(ctx, ad.GetBinaryLiteral4Cmp(), comparer)
case KindMysqlSet:
return d.compareMysqlSet(ctx, ad.GetMysqlSet(), comparer)
case KindMysqlJSON:
return d.compareMysqlJSON(ad.GetMysqlJSON())
case KindMysqlTime:
return d.compareMysqlTime(ctx, ad.GetMysqlTime())
case KindVectorFloat32:
return d.compareVectorFloat32(ctx, ad.GetVectorFloat32())
default:
return 0, nil
}
}
func (d *Datum) compareInt64(ctx Context, i int64) (int, error) {
switch d.k {
case KindMaxValue:
return 1, nil
case KindInt64:
return cmp.Compare(d.i, i), nil
case KindUint64:
if i < 0 || d.GetUint64() > math.MaxInt64 {
return 1, nil
}
return cmp.Compare(d.i, i), nil
default:
return d.compareFloat64(ctx, float64(i))
}
}
func (d *Datum) compareUint64(ctx Context, u uint64) (int, error) {
switch d.k {
case KindMaxValue:
return 1, nil
case KindInt64:
if d.i < 0 || u > math.MaxInt64 {
return -1, nil
}
return cmp.Compare(d.i, int64(u)), nil
case KindUint64:
return cmp.Compare(d.GetUint64(), u), nil
default:
return d.compareFloat64(ctx, float64(u))
}
}
func (d *Datum) compareFloat64(ctx Context, f float64) (int, error) {
switch d.k {
case KindNull, KindMinNotNull:
return -1, nil
case KindMaxValue:
return 1, nil
case KindInt64:
return cmp.Compare(float64(d.i), f), nil
case KindUint64:
return cmp.Compare(float64(d.GetUint64()), f), nil
case KindFloat32, KindFloat64:
return cmp.Compare(d.GetFloat64(), f), nil
case KindString, KindBytes:
fVal, err := StrToFloat(ctx, d.GetString(), false)
return cmp.Compare(fVal, f), errors.Trace(err)
case KindMysqlDecimal:
fVal, err := d.GetMysqlDecimal().ToFloat64()
return cmp.Compare(fVal, f), errors.Trace(err)
case KindMysqlDuration:
fVal := d.GetMysqlDuration().Seconds()
return cmp.Compare(fVal, f), nil
case KindMysqlEnum:
fVal := d.GetMysqlEnum().ToNumber()
return cmp.Compare(fVal, f), nil
case KindBinaryLiteral, KindMysqlBit:
val, err := d.GetBinaryLiteral4Cmp().ToInt(ctx)
fVal := float64(val)
return cmp.Compare(fVal, f), errors.Trace(err)
case KindMysqlSet:
fVal := d.GetMysqlSet().ToNumber()
return cmp.Compare(fVal, f), nil
case KindMysqlTime:
fVal, err := d.GetMysqlTime().ToNumber().ToFloat64()
return cmp.Compare(fVal, f), errors.Trace(err)
default:
return -1, nil
}
}
func (d *Datum) compareString(ctx Context, s string, comparer collate.Collator) (int, error) {
switch d.k {
case KindNull, KindMinNotNull:
return -1, nil
case KindMaxValue:
return 1, nil
case KindString, KindBytes:
return comparer.Compare(d.GetString(), s), nil
case KindMysqlDecimal:
dec := new(MyDecimal)
err := ctx.HandleTruncate(dec.FromString(hack.Slice(s)))
return d.GetMysqlDecimal().Compare(dec), errors.Trace(err)
case KindMysqlTime:
dt, err := ParseDatetime(ctx, s)
return d.GetMysqlTime().Compare(dt), errors.Trace(err)
case KindMysqlDuration:
dur, _, err := ParseDuration(ctx, s, MaxFsp)
return d.GetMysqlDuration().Compare(dur), errors.Trace(err)
case KindMysqlSet:
return comparer.Compare(d.GetMysqlSet().String(), s), nil
case KindMysqlEnum:
return comparer.Compare(d.GetMysqlEnum().String(), s), nil
case KindBinaryLiteral, KindMysqlBit:
return comparer.Compare(d.GetBinaryLiteral4Cmp().ToString(), s), nil
default:
fVal, err := StrToFloat(ctx, s, false)
if err != nil {
return 0, errors.Trace(err)
}
return d.compareFloat64(ctx, fVal)
}
}
func (d *Datum) compareMysqlDecimal(ctx Context, dec *MyDecimal) (int, error) {
switch d.k {
case KindNull, KindMinNotNull:
return -1, nil
case KindMaxValue:
return 1, nil
case KindMysqlDecimal:
return d.GetMysqlDecimal().Compare(dec), nil
case KindString, KindBytes:
dDec := new(MyDecimal)
err := ctx.HandleTruncate(dDec.FromString(d.GetBytes()))
return dDec.Compare(dec), errors.Trace(err)
default:
dVal, err := d.ConvertTo(ctx, NewFieldType(mysql.TypeNewDecimal))
if err != nil {
return 0, errors.Trace(err)
}
return dVal.GetMysqlDecimal().Compare(dec), nil
}
}
func (d *Datum) compareMysqlDuration(ctx Context, dur Duration) (int, error) {
switch d.k {
case KindNull, KindMinNotNull:
return -1, nil
case KindMaxValue:
return 1, nil
case KindMysqlDuration:
return d.GetMysqlDuration().Compare(dur), nil
case KindString, KindBytes:
dDur, _, err := ParseDuration(ctx, d.GetString(), MaxFsp)
return dDur.Compare(dur), errors.Trace(err)
default:
return d.compareFloat64(ctx, dur.Seconds())
}
}
func (d *Datum) compareMysqlEnum(sc Context, enum Enum, comparer collate.Collator) (int, error) {
switch d.k {
case KindNull, KindMinNotNull:
return -1, nil
case KindMaxValue:
return 1, nil
case KindString, KindBytes, KindMysqlEnum, KindMysqlSet:
return comparer.Compare(d.GetString(), enum.String()), nil
default:
return d.compareFloat64(sc, enum.ToNumber())
}
}
func (d *Datum) compareBinaryLiteral(ctx Context, b BinaryLiteral, comparer collate.Collator) (int, error) {
switch d.k {
case KindNull, KindMinNotNull:
return -1, nil
case KindMaxValue:
return 1, nil
case KindString, KindBytes:
fallthrough // in this case, d is converted to Binary and then compared with b
case KindBinaryLiteral, KindMysqlBit:
return comparer.Compare(d.GetBinaryLiteral4Cmp().ToString(), b.ToString()), nil
default:
val, err := b.ToInt(ctx)
if err != nil {
return 0, errors.Trace(err)
}
result, err := d.compareFloat64(ctx, float64(val))
return result, errors.Trace(err)
}
}
func (d *Datum) compareMysqlSet(ctx Context, set Set, comparer collate.Collator) (int, error) {
switch d.k {
case KindNull, KindMinNotNull:
return -1, nil
case KindMaxValue:
return 1, nil
case KindString, KindBytes, KindMysqlEnum, KindMysqlSet:
return comparer.Compare(d.GetString(), set.String()), nil
default:
return d.compareFloat64(ctx, set.ToNumber())
}
}
func (d *Datum) compareMysqlJSON(target BinaryJSON) (int, error) {
// json is not equal with NULL
if d.k == KindNull {
return 1, nil
}
origin, err := d.ToMysqlJSON()
if err != nil {
return 0, errors.Trace(err)
}
return CompareBinaryJSON(origin, target), nil
}
func (d *Datum) compareMysqlTime(ctx Context, time Time) (int, error) {
switch d.k {
case KindNull, KindMinNotNull:
return -1, nil
case KindMaxValue:
return 1, nil
case KindString, KindBytes:
dt, err := ParseDatetime(ctx, d.GetString())
return dt.Compare(time), errors.Trace(err)
case KindMysqlTime:
return d.GetMysqlTime().Compare(time), nil
default:
fVal, err := time.ToNumber().ToFloat64()
if err != nil {
return 0, errors.Trace(err)
}
return d.compareFloat64(ctx, fVal)
}
}
func (d *Datum) compareVectorFloat32(ctx Context, vec VectorFloat32) (int, error) {
switch d.k {
case KindNull, KindMinNotNull:
return -1, nil
case KindMaxValue:
return 1, nil
case KindVectorFloat32:
return d.GetVectorFloat32().Compare(vec), nil
// Note: We expect cast is applied before compare, when comparing with String and other vector types.
default:
return 0, errors.New("cannot compare vector and non-vector, cast is required")
}
}
// ConvertTo converts a datum to the target field type.
// change this method need sync modification to type2Kind in rowcodec/types.go
func (d *Datum) ConvertTo(ctx Context, target *FieldType) (Datum, error) {
if d.k == KindNull {
return Datum{}, nil
}
switch target.GetType() { // TODO: implement mysql types convert when "CAST() AS" syntax are supported.
case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong:
unsigned := mysql.HasUnsignedFlag(target.GetFlag())
if unsigned {
return d.convertToUint(ctx, target)
}
return d.convertToInt(ctx, target)
case mysql.TypeFloat, mysql.TypeDouble:
return d.convertToFloat(ctx, target)
case mysql.TypeBlob, mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob,
mysql.TypeString, mysql.TypeVarchar, mysql.TypeVarString:
return d.convertToString(ctx, target)
case mysql.TypeTimestamp:
return d.convertToMysqlTimestamp(ctx, target)
case mysql.TypeDatetime, mysql.TypeDate:
return d.convertToMysqlTime(ctx, target)
case mysql.TypeDuration:
return d.convertToMysqlDuration(ctx, target)
case mysql.TypeNewDecimal:
return d.convertToMysqlDecimal(ctx, target)
case mysql.TypeYear:
return d.ConvertToMysqlYear(ctx, target)
case mysql.TypeEnum:
return d.convertToMysqlEnum(ctx, target)
case mysql.TypeBit:
return d.convertToMysqlBit(ctx, target)
case mysql.TypeSet:
return d.convertToMysqlSet(ctx, target)
case mysql.TypeJSON:
return d.convertToMysqlJSON(target)
case mysql.TypeTiDBVectorFloat32:
return d.convertToVectorFloat32(ctx, target)
case mysql.TypeNull:
return Datum{}, nil
default:
panic("should never happen")
}
}
func (d *Datum) convertToFloat(ctx Context, target *FieldType) (Datum, error) {
var (
f float64
ret Datum
err error
)
switch d.k {
case KindNull:
return ret, nil
case KindInt64:
f = float64(d.GetInt64())
case KindUint64:
f = float64(d.GetUint64())
case KindFloat32, KindFloat64:
f = d.GetFloat64()
case KindString, KindBytes:
f, err = StrToFloat(ctx, d.GetString(), false)
case KindMysqlTime:
f, err = d.GetMysqlTime().ToNumber().ToFloat64()
case KindMysqlDuration:
f, err = d.GetMysqlDuration().ToNumber().ToFloat64()
case KindMysqlDecimal:
f, err = d.GetMysqlDecimal().ToFloat64()
case KindMysqlSet:
f = d.GetMysqlSet().ToNumber()
case KindMysqlEnum:
f = d.GetMysqlEnum().ToNumber()
case KindBinaryLiteral, KindMysqlBit:
val, err1 := d.GetBinaryLiteral().ToInt(ctx)
f, err = float64(val), err1
case KindMysqlJSON:
f, err = ConvertJSONToFloat(ctx, d.GetMysqlJSON())
default:
return invalidConv(d, target.GetType())
}
f, err1 := ProduceFloatWithSpecifiedTp(f, target)
if err == nil && err1 != nil {
err = err1
}
if target.GetType() == mysql.TypeFloat {
ret.SetFloat32(float32(f))
} else {
ret.SetFloat64(f)
}
return ret, errors.Trace(err)
}
// ProduceFloatWithSpecifiedTp produces a new float64 according to `flen` and `decimal`.
func ProduceFloatWithSpecifiedTp(f float64, target *FieldType) (_ float64, err error) {
if math.IsNaN(f) {
return 0, overflow(f, target.GetType())
}
if math.IsInf(f, 0) {
return f, overflow(f, target.GetType())
}
// For float and following double type, we will only truncate it for float(M, D) format.
// If no D is set, we will handle it like origin float whether M is set or not.
if target.GetFlen() != UnspecifiedLength && target.GetDecimal() != UnspecifiedLength {
f, err = TruncateFloat(f, target.GetFlen(), target.GetDecimal())
}
if mysql.HasUnsignedFlag(target.GetFlag()) && f < 0 {
return 0, overflow(f, target.GetType())
}
if err != nil {
// We must return the error got from TruncateFloat after checking whether the target is unsigned to make sure
// the returned float is not negative when the target type is unsigned.
return f, errors.Trace(err)
}
if target.GetType() == mysql.TypeFloat && (f > math.MaxFloat32 || f < -math.MaxFloat32) {
if f > 0 {
return math.MaxFloat32, overflow(f, target.GetType())
}
return -math.MaxFloat32, overflow(f, target.GetType())
}
return f, errors.Trace(err)
}
func (d *Datum) convertToString(ctx Context, target *FieldType) (Datum, error) {
var (
ret Datum
s string
err error
)
switch d.k {
case KindInt64:
s = strconv.FormatInt(d.GetInt64(), 10)
case KindUint64:
s = strconv.FormatUint(d.GetUint64(), 10)
case KindFloat32:
s = strconv.FormatFloat(d.GetFloat64(), 'f', -1, 32)
case KindFloat64:
s = strconv.FormatFloat(d.GetFloat64(), 'f', -1, 64)
case KindString, KindBytes:
fromBinary := d.Collation() == charset.CollationBin
toBinary := target.GetCharset() == charset.CharsetBin
if fromBinary && toBinary {
s = d.GetString()
} else if fromBinary {
s, err = d.GetBinaryStringDecoded(ctx.Flags(), target.GetCharset())
} else if toBinary {
s = d.GetBinaryStringEncoded()
} else {
s, err = d.GetStringWithCheck(ctx.Flags(), target.GetCharset())
}
case KindMysqlTime:
s = d.GetMysqlTime().String()
case KindMysqlDuration:
s = d.GetMysqlDuration().String()
case KindMysqlDecimal:
s = d.GetMysqlDecimal().String()
case KindMysqlEnum:
s = d.GetMysqlEnum().String()
case KindMysqlSet:
s = d.GetMysqlSet().String()
case KindBinaryLiteral:
s, err = d.GetBinaryStringDecoded(ctx.Flags(), target.GetCharset())
case KindMysqlBit:
// https://github.com/pingcap/tidb/issues/31124.
// Consider converting to uint first.
val, err := d.GetBinaryLiteral().ToInt(ctx)
// The length of BIT is limited to 64, so this function will never fail / truncated.
intest.AssertNoError(err)
if err != nil {
s = d.GetBinaryLiteral().ToString()
} else {
s = strconv.FormatUint(val, 10)
}
case KindMysqlJSON:
s = d.GetMysqlJSON().String()
case KindVectorFloat32:
s = d.GetVectorFloat32().String()
default:
return invalidConv(d, target.GetType())
}
if err == nil {
s, err = ProduceStrWithSpecifiedTp(s, target, ctx, true)
}
ret.SetString(s, target.GetCollate())
if target.GetCharset() == charset.CharsetBin {
ret.k = KindBytes
}
return ret, errors.Trace(err)
}
// ProduceStrWithSpecifiedTp produces a new string according to `flen` and `chs`. Param `padZero` indicates
// whether we should pad `\0` for `binary(flen)` type.
func ProduceStrWithSpecifiedTp(s string, tp *FieldType, ctx Context, padZero bool) (_ string, err error) {
flen, chs := tp.GetFlen(), tp.GetCharset()
if flen >= 0 {
// overflowed stores the part of the string that is out of the length constraint, it is later checked to see if the
// overflowed part is all whitespaces
var overflowed string
var characterLen int
var needCalculateLen bool
// For mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob, mysql.TypeBlob(defined in tidb)
// and tinytext, text, mediumtext, longtext(not explicitly defined in tidb, corresponding to blob(s) in tidb) flen is the store length limit regardless of charset.
if chs != charset.CharsetBin {
switch tp.GetType() {
case mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob, mysql.TypeBlob:
characterLen = len(s)
// We need to truncate the value to a proper length that contains complete word.
if characterLen > flen {
var r rune
var size int
var tempStr string
var truncateLen int
// Find the truncate position.
for truncateLen = flen; truncateLen > 0; truncateLen-- {
tempStr = truncateStr(s, truncateLen)
r, size = utf8.DecodeLastRuneInString(tempStr)
if r == utf8.RuneError && size == 0 {
// Empty string
continue
} else if r == utf8.RuneError && size == 1 {
// Invalid string
continue
}
// Get the truncate position
break
}
overflowed = s[truncateLen:]
s = truncateStr(s, truncateLen)
}
default:
if len(s) > flen {
characterLen = utf8.RuneCountInString(s)
if characterLen > flen {
// 1. If len(s) is 0 and flen is 0, truncateLen will be 0, don't truncate s.
// CREATE TABLE t (a char(0));
// INSERT INTO t VALUES (``);
// 2. If len(s) is 10 and flen is 0, truncateLen will be 0 too, but we still need to truncate s.
// SELECT 1, CAST(1234 AS CHAR(0));
// So truncateLen is not a suitable variable to determine to do truncate or not.
var runeCount int
var truncateLen int
for i := range s {
if runeCount == flen {
truncateLen = i
break
}
runeCount++
}
overflowed = s[truncateLen:]
s = truncateStr(s, truncateLen)
} else {
needCalculateLen = true
}
}
}
} else if len(s) > flen {
characterLen = len(s)
overflowed = s[flen:]
s = truncateStr(s, flen)
}
if len(overflowed) != 0 {
trimmed := strings.TrimRight(overflowed, " \t\n\r")
if len(trimmed) == 0 && !IsBinaryStr(tp) && IsTypeChar(tp.GetType()) {
if tp.GetType() == mysql.TypeVarchar {
if needCalculateLen {
characterLen = utf8.RuneCountInString(s)
}
ctx.AppendWarning(ErrTruncated.FastGen("Data truncated, field len %d, data len %d", flen, characterLen))
}
} else {
if needCalculateLen {
characterLen = utf8.RuneCountInString(s)
}
err = ErrDataTooLong.FastGen("Data Too Long, field len %d, data len %d", flen, characterLen)
}
}
if tp.GetType() == mysql.TypeString && IsBinaryStr(tp) && len(s) < flen && padZero {
padding := make([]byte, flen-len(s))
s = string(append([]byte(s), padding...))
}
}
return s, errors.Trace(ctx.HandleTruncate(err))
}
func (d *Datum) convertToInt(ctx Context, target *FieldType) (Datum, error) {
i64, err := d.toSignedInteger(ctx, target.GetType())
return NewIntDatum(i64), errors.Trace(err)
}
func (d *Datum) convertToUint(ctx Context, target *FieldType) (Datum, error) {
tp := target.GetType()
upperBound := IntegerUnsignedUpperBound(tp)
var (
val uint64
err error
ret Datum
)
switch d.k {
case KindInt64:
val, err = ConvertIntToUint(ctx.Flags(), d.GetInt64(), upperBound, tp)
case KindUint64:
val, err = ConvertUintToUint(d.GetUint64(), upperBound, tp)
case KindFloat32, KindFloat64:
val, err = ConvertFloatToUint(ctx.Flags(), d.GetFloat64(), upperBound, tp)
case KindString, KindBytes:
var err1 error
val, err1 = StrToUint(ctx, d.GetString(), false)
val, err = ConvertUintToUint(val, upperBound, tp)
if err == nil {
err = err1
}
case KindMysqlTime:
dec := d.GetMysqlTime().ToNumber()
err = dec.Round(dec, 0, ModeHalfUp)
ival, err1 := dec.ToInt()
if err == nil {
err = err1
}
val, err1 = ConvertIntToUint(ctx.Flags(), ival, upperBound, tp)
if err == nil {
err = err1
}
case KindMysqlDuration:
dec := d.GetMysqlDuration().ToNumber()
err = dec.Round(dec, 0, ModeHalfUp)
var err1 error
val, err1 = ConvertDecimalToUint(dec, upperBound, tp)
if err == nil {
err = err1
}
case KindMysqlDecimal:
val, err = ConvertDecimalToUint(d.GetMysqlDecimal(), upperBound, tp)
case KindMysqlEnum:
val, err = ConvertFloatToUint(ctx.Flags(), d.GetMysqlEnum().ToNumber(), upperBound, tp)
case KindMysqlSet:
val, err = ConvertFloatToUint(ctx.Flags(), d.GetMysqlSet().ToNumber(), upperBound, tp)
case KindBinaryLiteral, KindMysqlBit:
val, err = d.GetBinaryLiteral().ToInt(ctx)
if err == nil {
val, err = ConvertUintToUint(val, upperBound, tp)
}
case KindMysqlJSON:
var i64 int64
i64, err = ConvertJSONToInt(ctx, d.GetMysqlJSON(), true, tp)
val = uint64(i64)
default:
return invalidConv(d, target.GetType())
}
ret.SetUint64(val)
if err != nil {
return ret, errors.Trace(err)
}
return ret, nil
}
func (d *Datum) convertToMysqlTimestamp(ctx Context, target *FieldType) (Datum, error) {
var (
ret Datum
t Time
err error
)
fsp := DefaultFsp
if target.GetDecimal() != UnspecifiedLength {
fsp = target.GetDecimal()
}
switch d.k {
case KindMysqlTime:
t, err = d.GetMysqlTime().Convert(ctx, target.GetType())
if err != nil {
// t might be an invalid Timestamp, but should still be comparable, since same representation (KindMysqlTime)
ret.SetMysqlTime(t)
return ret, errors.Trace(ErrWrongValue.GenWithStackByArgs(TimestampStr, t.String()))
}
t, err = t.RoundFrac(ctx, fsp)
case KindMysqlDuration:
t, err = d.GetMysqlDuration().ConvertToTime(ctx, mysql.TypeTimestamp)
if err != nil {
ret.SetMysqlTime(t)
return ret, errors.Trace(err)
}
t, err = t.RoundFrac(ctx, fsp)
case KindString, KindBytes:
t, err = ParseTime(ctx, d.GetString(), mysql.TypeTimestamp, fsp)
case KindInt64:
t, err = ParseTimeFromNum(ctx, d.GetInt64(), mysql.TypeTimestamp, fsp)
case KindMysqlDecimal:
t, err = ParseTimeFromFloatString(ctx, d.GetMysqlDecimal().String(), mysql.TypeTimestamp, fsp)
case KindMysqlJSON:
j := d.GetMysqlJSON()
var s string
s, err = j.Unquote()
if err != nil {
ret.SetMysqlTime(t)
return ret, err
}
t, err = ParseTime(ctx, s, mysql.TypeTimestamp, fsp)
default:
return invalidConv(d, mysql.TypeTimestamp)
}
t.SetType(mysql.TypeTimestamp)
ret.SetMysqlTime(t)
if err != nil {
return ret, errors.Trace(err)
}
return ret, nil
}
func (d *Datum) convertToMysqlTime(ctx Context, target *FieldType) (Datum, error) {
tp := target.GetType()
fsp := DefaultFsp
if target.GetDecimal() != UnspecifiedLength {
fsp = target.GetDecimal()
}
var (
ret Datum
t Time
err error
)
switch d.k {
case KindMysqlTime:
t, err = d.GetMysqlTime().Convert(ctx, tp)
if err != nil {
ret.SetMysqlTime(t)
return ret, errors.Trace(err)
}
t, err = t.RoundFrac(ctx, fsp)
case KindMysqlDuration:
t, err = d.GetMysqlDuration().ConvertToTime(ctx, tp)
if err != nil {
ret.SetMysqlTime(t)
return ret, errors.Trace(err)
}
t, err = t.RoundFrac(ctx, fsp)
case KindMysqlDecimal:
t, err = ParseTimeFromFloatString(ctx, d.GetMysqlDecimal().String(), tp, fsp)
case KindString, KindBytes:
t, err = ParseTime(ctx, d.GetString(), tp, fsp)
case KindInt64:
t, err = ParseTimeFromNum(ctx, d.GetInt64(), tp, fsp)
case KindUint64:
intOverflow64 := d.GetInt64() < 0
if intOverflow64 {
uNum := strconv.FormatUint(d.GetUint64(), 10)
t, err = ZeroDate, ErrWrongValue.GenWithStackByArgs(TimeStr, uNum)
} else {
t, err = ParseTimeFromNum(ctx, d.GetInt64(), tp, fsp)
}
case KindMysqlJSON:
j := d.GetMysqlJSON()
var s string
s, err = j.Unquote()
if err != nil {
ret.SetMysqlTime(t)
return ret, err
}
t, err = ParseTime(ctx, s, tp, fsp)
default:
return invalidConv(d, tp)
}
if tp == mysql.TypeDate {
// Truncate hh:mm:ss part if the type is Date.
t.SetCoreTime(FromDate(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0))
}
ret.SetMysqlTime(t)
if err != nil {
return ret, errors.Trace(err)
}
return ret, nil
}
func (d *Datum) convertToMysqlDuration(typeCtx Context, target *FieldType) (Datum, error) {
tp := target.GetType()
fsp := DefaultFsp
if target.GetDecimal() != UnspecifiedLength {
fsp = target.GetDecimal()
}
var ret Datum
switch d.k {
case KindMysqlTime:
dur, err := d.GetMysqlTime().ConvertToDuration()
if err != nil {
ret.SetMysqlDuration(dur)
return ret, errors.Trace(err)
}
dur, err = dur.RoundFrac(fsp, typeCtx.Location())
ret.SetMysqlDuration(dur)
if err != nil {
return ret, errors.Trace(err)
}
case KindMysqlDuration:
dur, err := d.GetMysqlDuration().RoundFrac(fsp, typeCtx.Location())
ret.SetMysqlDuration(dur)
if err != nil {
return ret, errors.Trace(err)
}
case KindInt64, KindUint64, KindFloat32, KindFloat64, KindMysqlDecimal:
// TODO: We need a ParseDurationFromNum to avoid the cost of converting a num to string.
timeStr, err := d.ToString()
if err != nil {
return ret, errors.Trace(err)
}
timeNum, err := d.ToInt64(typeCtx)
if err != nil {
return ret, errors.Trace(err)
}
// For huge numbers(>'0001-00-00 00-00-00') try full DATETIME in ParseDuration.
if timeNum > MaxDuration && timeNum < 10000000000 {
// mysql return max in no strict sql mode.
ret.SetMysqlDuration(Duration{Duration: MaxTime, Fsp: 0})
return ret, ErrWrongValue.GenWithStackByArgs(TimeStr, timeStr)
}
if timeNum < -MaxDuration {
return ret, ErrWrongValue.GenWithStackByArgs(TimeStr, timeStr)
}
t, _, err := ParseDuration(typeCtx, timeStr, fsp)
ret.SetMysqlDuration(t)
if err != nil {
return ret, errors.Trace(err)
}
case KindString, KindBytes:
t, _, err := ParseDuration(typeCtx, d.GetString(), fsp)
ret.SetMysqlDuration(t)
if err != nil {
return ret, errors.Trace(err)
}
case KindMysqlJSON:
j := d.GetMysqlJSON()
s, err := j.Unquote()
if err != nil {
return ret, errors.Trace(err)
}
t, _, err := ParseDuration(typeCtx, s, fsp)
ret.SetMysqlDuration(t)
if err != nil {
return ret, errors.Trace(err)
}
default:
return invalidConv(d, tp)
}
return ret, nil
}
func (d *Datum) convertToMysqlDecimal(ctx Context, target *FieldType) (Datum, error) {
var ret Datum
ret.SetLength(target.GetFlen())
ret.SetFrac(target.GetDecimal())
var dec = &MyDecimal{}
var err error
switch d.k {
case KindInt64:
dec.FromInt(d.GetInt64())
case KindUint64:
dec.FromUint(d.GetUint64())
case KindFloat32, KindFloat64:
err = dec.FromFloat64(d.GetFloat64())
case KindString, KindBytes:
err = dec.FromString(d.GetBytes())
case KindMysqlDecimal:
*dec = *d.GetMysqlDecimal()
case KindMysqlTime:
dec = d.GetMysqlTime().ToNumber()
case KindMysqlDuration:
dec = d.GetMysqlDuration().ToNumber()
case KindMysqlEnum:
err = dec.FromFloat64(d.GetMysqlEnum().ToNumber())
case KindMysqlSet:
err = dec.FromFloat64(d.GetMysqlSet().ToNumber())
case KindBinaryLiteral, KindMysqlBit:
val, err1 := d.GetBinaryLiteral().ToInt(ctx)
err = err1
dec.FromUint(val)
case KindMysqlJSON:
f, err1 := ConvertJSONToDecimal(ctx, d.GetMysqlJSON())
if err1 != nil {
return ret, errors.Trace(err1)
}
dec = f
default:
return invalidConv(d, target.GetType())
}
dec1, err1 := ProduceDecWithSpecifiedTp(ctx, dec, target)
// If there is a error, dec1 may be nil.
if dec1 != nil {
dec = dec1
}
if err == nil && err1 != nil {
err = err1
}
if dec.negative && mysql.HasUnsignedFlag(target.GetFlag()) {
*dec = zeroMyDecimal
if err == nil {
err = ErrOverflow.GenWithStackByArgs("DECIMAL", fmt.Sprintf("(%d, %d)", target.GetFlen(), target.GetDecimal()))
}
}
ret.SetMysqlDecimal(dec)
return ret, err
}
// ProduceDecWithSpecifiedTp produces a new decimal according to `flen` and `decimal`.
func ProduceDecWithSpecifiedTp(ctx Context, dec *MyDecimal, tp *FieldType) (_ *MyDecimal, err error) {
flen, decimal := tp.GetFlen(), tp.GetDecimal()
if flen != UnspecifiedLength && decimal != UnspecifiedLength {
if flen < decimal {
return nil, ErrMBiggerThanD.GenWithStackByArgs("")
}
var old *MyDecimal
if int(dec.digitsFrac) > decimal {
old = new(MyDecimal)
*old = *dec
}
if int(dec.digitsFrac) != decimal {
// Error doesn't matter because the following code will check the new decimal
// and set error if any.
_ = dec.Round(dec, decimal, ModeHalfUp)
}
_, digitsInt := dec.removeLeadingZeros()
// After rounding decimal, the new decimal may have a longer integer length which may be longer than expected.
// So the check of integer length must be after rounding.
// E.g. "99.9999", flen 5, decimal 3, Round("99.9999", 3, ModelHalfUp) -> "100.000".
if flen-decimal < digitsInt {
// Integer length is longer, choose the max or min decimal.
dec = NewMaxOrMinDec(dec.IsNegative(), flen, decimal)
// select cast(111 as decimal(1)) causes a warning in MySQL.
err = ErrOverflow.GenWithStackByArgs("DECIMAL", fmt.Sprintf("(%d, %d)", flen, decimal))
} else if old != nil && dec.Compare(old) != 0 {
ctx.AppendWarning(ErrTruncatedWrongVal.FastGenByArgs("DECIMAL", old))
}
}
unsigned := mysql.HasUnsignedFlag(tp.GetFlag())
if unsigned && dec.IsNegative() {
dec = dec.FromUint(0)
}
return dec, err
}
// ConvertToMysqlYear converts a datum to MySQLYear.
func (d *Datum) ConvertToMysqlYear(ctx Context, target *FieldType) (Datum, error) {
var (
ret Datum
y int64
err error
adjust bool
)
switch d.k {
case KindString, KindBytes:
s := d.GetString()
trimS := strings.TrimSpace(s)
y, err = StrToInt(ctx, trimS, false)
if err != nil {
ret.SetInt64(0)
return ret, errors.Trace(err)
}
// condition:
// parsed to 0, not a string of length 4, the first valid char is a 0 digit
if len(s) != 4 && y == 0 && strings.HasPrefix(trimS, "0") {
adjust = true
}
case KindMysqlTime:
y = int64(d.GetMysqlTime().Year())
case KindMysqlDuration:
y, err = d.GetMysqlDuration().ConvertToYear(ctx)
case KindMysqlJSON:
y, err = ConvertJSONToInt64(ctx, d.GetMysqlJSON(), false)
if err != nil {
ret.SetInt64(0)
return ret, errors.Trace(err)
}
default:
ret, err = d.convertToInt(ctx, NewFieldType(mysql.TypeLonglong))
if err != nil {
_, err = invalidConv(d, target.GetType())
ret.SetInt64(0)
return ret, err
}
y = ret.GetInt64()
}
// Duration has been adjusted in `Duration.ConvertToYear()`
if d.k != KindMysqlDuration {
y, err = AdjustYear(y, adjust)
}
ret.SetInt64(y)
return ret, errors.Trace(err)
}
func (d *Datum) convertToMysqlBit(ctx Context, target *FieldType) (Datum, error) {
var ret Datum
var uintValue uint64
var err error
switch d.k {
case KindString, KindBytes:
uintValue, err = BinaryLiteral(d.b).ToInt(ctx)
case KindInt64:
// if input kind is int64 (signed), when trans to bit, we need to treat it as unsigned
d.k = KindUint64
fallthrough
default:
uintDatum, err1 := d.convertToUint(ctx, target)
uintValue, err = uintDatum.GetUint64(), err1
}
// Avoid byte size panic, never goto this branch.
if target.GetFlen() <= 0 || target.GetFlen() >= 128 {
return Datum{}, errors.Trace(ErrDataTooLong.GenWithStack("Data Too Long, field len %d", target.GetFlen()))
}
if target.GetFlen() < 64 && uintValue >= 1<<(uint64(target.GetFlen())) {
uintValue = (1 << (uint64(target.GetFlen()))) - 1
err = ErrDataTooLong.GenWithStack("Data Too Long, field len %d", target.GetFlen())
}
byteSize := (target.GetFlen() + 7) >> 3
ret.SetMysqlBit(NewBinaryLiteralFromUint(uintValue, byteSize))
return ret, errors.Trace(err)
}
func (d *Datum) convertToMysqlEnum(ctx Context, target *FieldType) (Datum, error) {
var (
ret Datum
e Enum
err error
)
switch d.k {
case KindString, KindBytes, KindBinaryLiteral:
e, err = ParseEnum(target.GetElems(), d.GetString(), target.GetCollate())
case KindMysqlEnum:
if d.i == 0 {
// MySQL enum zero value has an empty string name(Enum{Name: '', Value: 0}). It is
// different from the normal enum string value(Enum{Name: '', Value: n}, n > 0).
e = Enum{}
} else {
e, err = ParseEnum(target.GetElems(), d.GetMysqlEnum().Name, target.GetCollate())
}
case KindMysqlSet:
e, err = ParseEnum(target.GetElems(), d.GetMysqlSet().Name, target.GetCollate())
default:
var uintDatum Datum
uintDatum, err = d.convertToUint(ctx, target)
if err == nil {
e, err = ParseEnumValue(target.GetElems(), uintDatum.GetUint64())
} else {
err = errors.Wrap(ErrTruncated, "convert to MySQL enum failed: "+err.Error())
}
}
ret.SetMysqlEnum(e, target.GetCollate())
return ret, err
}
func (d *Datum) convertToMysqlSet(ctx Context, target *FieldType) (Datum, error) {
var (
ret Datum
s Set
err error
)
switch d.k {
case KindString, KindBytes, KindBinaryLiteral:
s, err = ParseSet(target.GetElems(), d.GetString(), target.GetCollate())
case KindMysqlEnum:
s, err = ParseSet(target.GetElems(), d.GetMysqlEnum().Name, target.GetCollate())
case KindMysqlSet:
s, err = ParseSet(target.GetElems(), d.GetMysqlSet().Name, target.GetCollate())
case KindVectorFloat32:
return invalidConv(d, mysql.TypeSet)
default:
var uintDatum Datum
uintDatum, err = d.convertToUint(ctx, target)
if err == nil {
s, err = ParseSetValue(target.GetElems(), uintDatum.GetUint64())
}
}
if err != nil {
err = errors.Wrap(ErrTruncated, "convert to MySQL set failed: "+err.Error())
}
ret.SetMysqlSet(s, target.GetCollate())
return ret, err
}
func (d *Datum) convertToMysqlJSON(_ *FieldType) (ret Datum, err error) {
switch d.k {
case KindString, KindBytes:
var j BinaryJSON
if j, err = ParseBinaryJSONFromString(d.GetString()); err == nil {
ret.SetMysqlJSON(j)
}
case KindMysqlSet, KindMysqlEnum:
var j BinaryJSON
var s string
if s, err = d.ToString(); err == nil {
if j, err = ParseBinaryJSONFromString(s); err == nil {
ret.SetMysqlJSON(j)
}
}
case KindInt64:
i64 := d.GetInt64()
ret.SetMysqlJSON(CreateBinaryJSON(i64))
case KindUint64:
u64 := d.GetUint64()
ret.SetMysqlJSON(CreateBinaryJSON(u64))
case KindFloat32, KindFloat64:
f64 := d.GetFloat64()
ret.SetMysqlJSON(CreateBinaryJSON(f64))
case KindMysqlDecimal:
var f64 float64
if f64, err = d.GetMysqlDecimal().ToFloat64(); err == nil {
ret.SetMysqlJSON(CreateBinaryJSON(f64))
}
case KindMysqlJSON:
ret = *d
case KindMysqlTime:
tm := d.GetMysqlTime()
ret.SetMysqlJSON(CreateBinaryJSON(tm))
case KindMysqlDuration:
dur := d.GetMysqlDuration()
ret.SetMysqlJSON(CreateBinaryJSON(dur))
case KindBinaryLiteral:
err = ErrInvalidJSONCharset.GenWithStackByArgs(charset.CharsetBin)
default:
var s string
if s, err = d.ToString(); err == nil {
// TODO: fix precision of MysqlTime. For example,
// On MySQL 5.7 CAST(NOW() AS JSON) -> "2011-11-11 11:11:11.111111",
// But now we can only return "2011-11-11 11:11:11".
ret.SetMysqlJSON(CreateBinaryJSON(s))
}
}
return ret, errors.Trace(err)
}
func (d *Datum) convertToVectorFloat32(_ Context, target *FieldType) (ret Datum, err error) {
switch d.k {
case KindVectorFloat32:
v := d.GetVectorFloat32()
if err = v.CheckDimsFitColumn(target.GetFlen()); err != nil {
return ret, errors.Trace(err)
}
ret = *d
case KindString, KindBytes:
var v VectorFloat32
if v, err = ParseVectorFloat32(d.GetString()); err != nil {
return ret, errors.Trace(err)
}
if err = v.CheckDimsFitColumn(target.GetFlen()); err != nil {
return ret, errors.Trace(err)
}
ret.SetVectorFloat32(v)
default:
return invalidConv(d, mysql.TypeTiDBVectorFloat32)
}
return ret, errors.Trace(err)
}
// ToBool converts to a bool.
// We will use 1 for true, and 0 for false.
func (d *Datum) ToBool(ctx Context) (int64, error) {
var err error
isZero := false
switch d.Kind() {
case KindInt64:
isZero = d.GetInt64() == 0
case KindUint64:
isZero = d.GetUint64() == 0
case KindFloat32:
isZero = d.GetFloat64() == 0
case KindFloat64:
isZero = d.GetFloat64() == 0
case KindString, KindBytes:
iVal, err1 := StrToFloat(ctx, d.GetString(), false)
isZero, err = iVal == 0, err1
case KindMysqlTime:
isZero = d.GetMysqlTime().IsZero()
case KindMysqlDuration:
isZero = d.GetMysqlDuration().Duration == 0
case KindMysqlDecimal:
isZero = d.GetMysqlDecimal().IsZero()
case KindMysqlEnum:
isZero = d.GetMysqlEnum().ToNumber() == 0
case KindMysqlSet:
isZero = d.GetMysqlSet().ToNumber() == 0
case KindBinaryLiteral, KindMysqlBit:
val, err1 := d.GetBinaryLiteral().ToInt(ctx)
isZero, err = val == 0, err1
case KindMysqlJSON:
val := d.GetMysqlJSON()
isZero = val.IsZero()
case KindVectorFloat32:
isZero = d.GetVectorFloat32().IsZeroValue()
default:
return 0, errors.Errorf("cannot convert %v(type %T) to bool", d.GetValue(), d.GetValue())
}
var ret int64
if isZero {
ret = 0
} else {
ret = 1
}
if err != nil {
return ret, errors.Trace(err)
}
return ret, nil
}
// ConvertDatumToDecimal converts datum to decimal.
func ConvertDatumToDecimal(ctx Context, d Datum) (*MyDecimal, error) {
dec := new(MyDecimal)
var err error
switch d.Kind() {
case KindInt64:
dec.FromInt(d.GetInt64())
case KindUint64:
dec.FromUint(d.GetUint64())
case KindFloat32:
err = dec.FromFloat64(float64(d.GetFloat32()))
case KindFloat64:
err = dec.FromFloat64(d.GetFloat64())
case KindString:
err = ctx.HandleTruncate(dec.FromString(d.GetBytes()))
case KindMysqlDecimal:
*dec = *d.GetMysqlDecimal()
case KindMysqlEnum:
dec.FromUint(d.GetMysqlEnum().Value)
case KindMysqlSet:
dec.FromUint(d.GetMysqlSet().Value)
case KindBinaryLiteral, KindMysqlBit:
val, err1 := d.GetBinaryLiteral().ToInt(ctx)
dec.FromUint(val)
err = err1
case KindMysqlJSON:
f, err1 := ConvertJSONToDecimal(ctx, d.GetMysqlJSON())
if err1 != nil {
return nil, errors.Trace(err1)
}
dec = f
default:
err = errors.Errorf("can't convert %v to decimal", d.GetValue())
}
return dec, errors.Trace(err)
}
// ToDecimal converts to a decimal.
func (d *Datum) ToDecimal(ctx Context) (*MyDecimal, error) {
switch d.Kind() {
case KindMysqlTime:
return d.GetMysqlTime().ToNumber(), nil
case KindMysqlDuration:
return d.GetMysqlDuration().ToNumber(), nil
default:
return ConvertDatumToDecimal(ctx, *d)
}
}
// ToInt64 converts to a int64.
func (d *Datum) ToInt64(ctx Context) (int64, error) {
if d.Kind() == KindMysqlBit {
uintVal, err := d.GetBinaryLiteral().ToInt(ctx)
return int64(uintVal), err
}
return d.toSignedInteger(ctx, mysql.TypeLonglong)
}
func (d *Datum) toSignedInteger(ctx Context, tp byte) (int64, error) {
lowerBound := IntegerSignedLowerBound(tp)
upperBound := IntegerSignedUpperBound(tp)
switch d.Kind() {
case KindInt64:
return ConvertIntToInt(d.GetInt64(), lowerBound, upperBound, tp)
case KindUint64:
return ConvertUintToInt(d.GetUint64(), upperBound, tp)
case KindFloat32:
return ConvertFloatToInt(float64(d.GetFloat32()), lowerBound, upperBound, tp)
case KindFloat64:
return ConvertFloatToInt(d.GetFloat64(), lowerBound, upperBound, tp)
case KindString, KindBytes:
iVal, err := StrToInt(ctx, d.GetString(), false)
iVal, err2 := ConvertIntToInt(iVal, lowerBound, upperBound, tp)
if err == nil {
err = err2
}
return iVal, errors.Trace(err)
case KindMysqlTime:
// 2011-11-10 11:11:11.999999 -> 20111110111112
// 2011-11-10 11:59:59.999999 -> 20111110120000
t, err := d.GetMysqlTime().RoundFrac(ctx, DefaultFsp)
if err != nil {
return 0, errors.Trace(err)
}
ival, err := t.ToNumber().ToInt()
ival, err2 := ConvertIntToInt(ival, lowerBound, upperBound, tp)
if err == nil {
err = err2
}
return ival, errors.Trace(err)
case KindMysqlDuration:
// 11:11:11.999999 -> 111112
// 11:59:59.999999 -> 120000
dur, err := d.GetMysqlDuration().RoundFrac(DefaultFsp, ctx.Location())
if err != nil {
return 0, errors.Trace(err)
}
ival, err := dur.ToNumber().ToInt()
ival, err2 := ConvertIntToInt(ival, lowerBound, upperBound, tp)
if err == nil {
err = err2
}
return ival, errors.Trace(err)
case KindMysqlDecimal:
var to MyDecimal
err := d.GetMysqlDecimal().Round(&to, 0, ModeHalfUp)
ival, err1 := to.ToInt()
if err == nil {
err = err1
}
ival, err2 := ConvertIntToInt(ival, lowerBound, upperBound, tp)
if err == nil {
err = err2
}
return ival, errors.Trace(err)
case KindMysqlEnum:
fval := d.GetMysqlEnum().ToNumber()
return ConvertFloatToInt(fval, lowerBound, upperBound, tp)
case KindMysqlSet:
fval := d.GetMysqlSet().ToNumber()
return ConvertFloatToInt(fval, lowerBound, upperBound, tp)
case KindMysqlJSON:
return ConvertJSONToInt(ctx, d.GetMysqlJSON(), false, tp)
case KindBinaryLiteral, KindMysqlBit:
val, err := d.GetBinaryLiteral().ToInt(ctx)
if err != nil {
return 0, errors.Trace(err)
}
ival, err := ConvertUintToInt(val, upperBound, tp)
return ival, errors.Trace(err)
default:
return 0, errors.Errorf("cannot convert %v(type %T) to int64", d.GetValue(), d.GetValue())
}
}
// ToFloat64 converts to a float64
func (d *Datum) ToFloat64(ctx Context) (float64, error) {
switch d.Kind() {
case KindInt64:
return float64(d.GetInt64()), nil
case KindUint64:
return float64(d.GetUint64()), nil
case KindFloat32:
return float64(d.GetFloat32()), nil
case KindFloat64:
return d.GetFloat64(), nil
case KindString:
return StrToFloat(ctx, d.GetString(), false)
case KindBytes:
return StrToFloat(ctx, string(d.GetBytes()), false)
case KindMysqlTime:
f, err := d.GetMysqlTime().ToNumber().ToFloat64()
return f, errors.Trace(err)
case KindMysqlDuration:
f, err := d.GetMysqlDuration().ToNumber().ToFloat64()
return f, errors.Trace(err)
case KindMysqlDecimal:
f, err := d.GetMysqlDecimal().ToFloat64()
return f, errors.Trace(err)
case KindMysqlEnum:
return d.GetMysqlEnum().ToNumber(), nil
case KindMysqlSet:
return d.GetMysqlSet().ToNumber(), nil
case KindBinaryLiteral, KindMysqlBit:
val, err := d.GetBinaryLiteral().ToInt(ctx)
return float64(val), errors.Trace(err)
case KindMysqlJSON:
f, err := ConvertJSONToFloat(ctx, d.GetMysqlJSON())
return f, errors.Trace(err)
default:
return 0, errors.Errorf("cannot convert %v(type %T) to float64", d.GetValue(), d.GetValue())
}
}
// ToString gets the string representation of the datum.
func (d *Datum) ToString() (string, error) {
switch d.Kind() {
case KindInt64:
return strconv.FormatInt(d.GetInt64(), 10), nil
case KindUint64:
return strconv.FormatUint(d.GetUint64(), 10), nil
case KindFloat32:
return strconv.FormatFloat(float64(d.GetFloat32()), 'f', -1, 32), nil
case KindFloat64:
return strconv.FormatFloat(d.GetFloat64(), 'f', -1, 64), nil
case KindString:
return d.GetString(), nil
case KindBytes:
return d.GetString(), nil
case KindMysqlTime:
return d.GetMysqlTime().String(), nil
case KindMysqlDuration:
return d.GetMysqlDuration().String(), nil
case KindMysqlDecimal:
return d.GetMysqlDecimal().String(), nil
case KindMysqlEnum:
return d.GetMysqlEnum().String(), nil
case KindMysqlSet:
return d.GetMysqlSet().String(), nil
case KindMysqlJSON:
return d.GetMysqlJSON().String(), nil
case KindBinaryLiteral, KindMysqlBit:
return d.GetBinaryLiteral().ToString(), nil
case KindVectorFloat32:
return d.GetVectorFloat32().String(), nil
case KindNull:
return "", nil
default:
return "", errors.Errorf("cannot convert %v(type %T) to string", d.GetValue(), d.GetValue())
}
}
// ToBytes gets the bytes representation of the datum.
func (d *Datum) ToBytes() ([]byte, error) {
switch d.k {
case KindString, KindBytes:
return d.GetBytes(), nil
default:
str, err := d.ToString()
if err != nil {
return nil, errors.Trace(err)
}
return []byte(str), nil
}
}
// ToHashKey gets the bytes representation of the datum considering collation.
func (d *Datum) ToHashKey() ([]byte, error) {
switch d.k {
case KindString, KindBytes:
return collate.GetCollator(d.Collation()).Key(d.GetString()), nil
default:
str, err := d.ToString()
if err != nil {
return nil, errors.Trace(err)
}
return collate.GetCollator(d.Collation()).Key(str), nil
}
}
// ToMysqlJSON is similar to convertToMysqlJSON, except the
// latter parses from string, but the former uses it as primitive.
func (d *Datum) ToMysqlJSON() (j BinaryJSON, err error) {
var in any
switch d.Kind() {
case KindMysqlJSON:
j = d.GetMysqlJSON()
return
case KindInt64:
in = d.GetInt64()
case KindUint64:
in = d.GetUint64()
case KindFloat32, KindFloat64:
in = d.GetFloat64()
case KindMysqlDecimal:
in, err = d.GetMysqlDecimal().ToFloat64()
case KindString, KindBytes:
in = d.GetString()
case KindBinaryLiteral, KindMysqlBit:
in = d.GetBinaryLiteral().ToString()
case KindNull:
in = nil
case KindMysqlTime:
in = d.GetMysqlTime()
case KindMysqlDuration:
in = d.GetMysqlDuration()
default:
in, err = d.ToString()
}
if err != nil {
err = errors.Trace(err)
return
}
j = CreateBinaryJSON(in)
return
}
// MemUsage gets the memory usage of datum.
func (d *Datum) MemUsage() (sum int64) {
// d.x is not considered now since MemUsage is now only used by analyze samples which is bytesDatum
return EmptyDatumSize + int64(cap(d.b)) + int64(len(d.collation))
}
type jsonDatum struct {
K byte `json:"k"`
Decimal uint16 `json:"decimal,omitempty"`
Length uint32 `json:"length,omitempty"`
I int64 `json:"i,omitempty"`
Collation string `json:"collation,omitempty"`
B []byte `json:"b,omitempty"`
Time Time `json:"time,omitempty"`
MyDecimal *MyDecimal `json:"mydecimal,omitempty"`
}
// MarshalJSON implements Marshaler.MarshalJSON interface.
func (d *Datum) MarshalJSON() ([]byte, error) {
jd := &jsonDatum{
K: d.k,
Decimal: d.decimal,
Length: d.length,
I: d.i,
Collation: d.collation,
B: d.b,
}
switch d.k {
case KindMysqlTime:
jd.Time = d.GetMysqlTime()
case KindMysqlDecimal:
jd.MyDecimal = d.GetMysqlDecimal()
default:
if d.x != nil {
return nil, fmt.Errorf("unsupported type: %d", d.k)
}
}
return gjson.Marshal(jd)
}
// UnmarshalJSON implements Unmarshaler.UnmarshalJSON interface.
func (d *Datum) UnmarshalJSON(data []byte) error {
var jd jsonDatum
if err := gjson.Unmarshal(data, &jd); err != nil {
return err
}
d.k = jd.K
d.decimal = jd.Decimal
d.length = jd.Length
d.i = jd.I
d.collation = jd.Collation
d.b = jd.B
switch jd.K {
case KindMysqlTime:
d.SetMysqlTime(jd.Time)
case KindMysqlDecimal:
d.SetMysqlDecimal(jd.MyDecimal)
}
return nil
}
func invalidConv(d *Datum, tp byte) (Datum, error) {
return Datum{}, errors.Errorf("cannot convert datum from %s to type %s", KindStr(d.Kind()), TypeStr(tp))
}
// NewDatum creates a new Datum from an interface{}.
func NewDatum(in any) (d Datum) {
switch x := in.(type) {
case []any:
d.SetValueWithDefaultCollation(MakeDatums(x...))
default:
d.SetValueWithDefaultCollation(in)
}
return d
}
// NewIntDatum creates a new Datum from an int64 value.
func NewIntDatum(i int64) (d Datum) {
d.SetInt64(i)
return d
}
// NewUintDatum creates a new Datum from an uint64 value.
func NewUintDatum(i uint64) (d Datum) {
d.SetUint64(i)
return d
}
// NewBytesDatum creates a new Datum from a byte slice.
func NewBytesDatum(b []byte) (d Datum) {
d.SetBytes(b)
return d
}
// NewStringDatum creates a new Datum from a string.
func NewStringDatum(s string) (d Datum) {
d.SetString(s, mysql.DefaultCollationName)
return d
}
// NewCollationStringDatum creates a new Datum from a string with collation.
func NewCollationStringDatum(s string, collation string) (d Datum) {
d.SetString(s, collation)
return d
}
// NewFloat64Datum creates a new Datum from a float64 value.
func NewFloat64Datum(f float64) (d Datum) {
d.SetFloat64(f)
return d
}
// NewFloat32Datum creates a new Datum from a float32 value.
func NewFloat32Datum(f float32) (d Datum) {
d.SetFloat32(f)
return d
}
// NewDurationDatum creates a new Datum from a Duration value.
func NewDurationDatum(dur Duration) (d Datum) {
d.SetMysqlDuration(dur)
return d
}
// NewTimeDatum creates a new Time from a Time value.
func NewTimeDatum(t Time) (d Datum) {
d.SetMysqlTime(t)
return d
}
// NewDecimalDatum creates a new Datum from a MyDecimal value.
func NewDecimalDatum(dec *MyDecimal) (d Datum) {
d.SetMysqlDecimal(dec)
return d
}
// NewJSONDatum creates a new Datum from a BinaryJSON value
func NewJSONDatum(j BinaryJSON) (d Datum) {
d.SetMysqlJSON(j)
return d
}
// NewVectorFloat32Datum creates a new Datum from a VectorFloat32 value
func NewVectorFloat32Datum(v VectorFloat32) (d Datum) {
d.SetVectorFloat32(v)
return d
}
// NewBinaryLiteralDatum creates a new BinaryLiteral Datum for a BinaryLiteral value.
func NewBinaryLiteralDatum(b BinaryLiteral) (d Datum) {
d.SetBinaryLiteral(b)
return d
}
// NewMysqlBitDatum creates a new MysqlBit Datum for a BinaryLiteral value.
func NewMysqlBitDatum(b BinaryLiteral) (d Datum) {
d.SetMysqlBit(b)
return d
}
// NewMysqlEnumDatum creates a new MysqlEnum Datum for a Enum value.
func NewMysqlEnumDatum(e Enum) (d Datum) {
d.SetMysqlEnum(e, mysql.DefaultCollationName)
return d
}
// NewCollateMysqlEnumDatum create a new MysqlEnum Datum for a Enum value with collation information.
func NewCollateMysqlEnumDatum(e Enum, collation string) (d Datum) {
d.SetMysqlEnum(e, collation)
return d
}
// NewMysqlSetDatum creates a new MysqlSet Datum for a Enum value.
func NewMysqlSetDatum(e Set, collation string) (d Datum) {
d.SetMysqlSet(e, collation)
return d
}
// MakeDatums creates datum slice from interfaces.
func MakeDatums(args ...any) []Datum {
datums := make([]Datum, len(args))
for i, v := range args {
datums[i] = NewDatum(v)
}
return datums
}
// MinNotNullDatum returns a datum represents minimum not null value.
func MinNotNullDatum() Datum {
return Datum{k: KindMinNotNull}
}
// MaxValueDatum returns a datum represents max value.
func MaxValueDatum() Datum {
return Datum{k: KindMaxValue}
}
// SortDatums sorts a slice of datum.
func SortDatums(ctx Context, datums []Datum) error {
var err error
slices.SortFunc(datums, func(a, b Datum) int {
var cmp int
cmp, err = a.Compare(ctx, &b, collate.GetCollator(b.Collation()))
if err != nil {
return 0
}
return cmp
})
if err != nil {
err = errors.Trace(err)
}
return err
}
// Check if a string is considered printable
//
// Checks
// 1. Must be valid UTF-8
// 2. Must not contain control characters like NUL (0x0) and backspace (0x8)
func isPrintable(s string) bool {
if !utf8.ValidString(s) {
return false
}
for _, r := range s {
if unicode.IsControl(r) {
return false
}
}
return true
}
// DatumsToString converts several datums to formatted string.
func DatumsToString(datums []Datum, handleSpecialValue bool) (string, error) {
return datumsToString(datums, handleSpecialValue, false)
}
// DatumsToStringSmart is like DatumsToString, but with smart detection of non-printable data
func DatumsToStringSmart(datums []Datum, handleSpecialValue bool) (string, error) {
return datumsToString(datums, handleSpecialValue, true)
}
func datumsToString(datums []Datum, handleSpecialValue bool, binaryAsHex bool) (string, error) {
n := len(datums)
builder := &strings.Builder{}
builder.Grow(8 * n)
if n > 1 {
builder.WriteString("(")
}
for i, datum := range datums {
if i > 0 {
builder.WriteString(", ")
}
if handleSpecialValue {
switch datum.Kind() {
case KindNull:
builder.WriteString("NULL")
continue
case KindMinNotNull:
builder.WriteString("-inf")
continue
case KindMaxValue:
builder.WriteString("+inf")
continue
}
}
str, err := datum.ToString()
if err != nil {
return "", errors.Trace(err)
}
const logDatumLen = 2048
originalLen := -1
if len(str) > logDatumLen {
originalLen = len(str)
str = str[:logDatumLen]
}
if datum.Kind() == KindString {
if !binaryAsHex || isPrintable(str) {
builder.WriteString(`"`)
builder.WriteString(str)
builder.WriteString(`"`)
} else {
// Print as hex-literal instead
fmt.Fprintf(builder, "0x%X", str)
}
} else {
builder.WriteString(str)
}
if originalLen != -1 {
builder.WriteString(" len(")
builder.WriteString(strconv.Itoa(originalLen))
builder.WriteString(")")
}
}
if n > 1 {
builder.WriteString(")")
}
return builder.String(), nil
}
// DatumsToStrNoErr converts some datums to a formatted string.
// If an error occurs, it will print a log instead of returning an error.
func DatumsToStrNoErr(datums []Datum) string {
str, err := DatumsToString(datums, true)
terror.Log(errors.Trace(err))
return str
}
// DatumsToStrNoErrSmart converts some datums to a formatted string.
// If an error occurs, it will print a log instead of returning an error.
// It also enables detection of non-pritable arguments
func DatumsToStrNoErrSmart(datums []Datum) string {
str, err := DatumsToStringSmart(datums, true)
terror.Log(errors.Trace(err))
return str
}
// CloneRow deep copies a Datum slice.
func CloneRow(dr []Datum) []Datum {
c := make([]Datum, len(dr))
for i, d := range dr {
d.Copy(&c[i])
}
return c
}
// GetMaxValue returns the max value datum for each type.
func GetMaxValue(ft *FieldType) (maxVal Datum) {
switch ft.GetType() {
case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong:
if mysql.HasUnsignedFlag(ft.GetFlag()) {
maxVal.SetUint64(IntegerUnsignedUpperBound(ft.GetType()))
} else {
maxVal.SetInt64(IntegerSignedUpperBound(ft.GetType()))
}
case mysql.TypeFloat:
maxVal.SetFloat32(float32(GetMaxFloat(ft.GetFlen(), ft.GetDecimal())))
case mysql.TypeDouble:
maxVal.SetFloat64(GetMaxFloat(ft.GetFlen(), ft.GetDecimal()))
case mysql.TypeString, mysql.TypeVarString, mysql.TypeVarchar, mysql.TypeBlob, mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob:
// codec.Encode KindMaxValue, to avoid import circle
bytes := []byte{250}
maxVal.SetString(string(bytes), ft.GetCollate())
case mysql.TypeNewDecimal:
maxVal.SetMysqlDecimal(NewMaxOrMinDec(false, ft.GetFlen(), ft.GetDecimal()))
case mysql.TypeDuration:
maxVal.SetMysqlDuration(Duration{Duration: MaxTime})
case mysql.TypeDate, mysql.TypeDatetime, mysql.TypeTimestamp:
if ft.GetType() == mysql.TypeDate || ft.GetType() == mysql.TypeDatetime {
maxVal.SetMysqlTime(NewTime(MaxDatetime, ft.GetType(), 0))
} else {
maxVal.SetMysqlTime(MaxTimestamp)
}
}
return
}
// GetMinValue returns the min value datum for each type.
func GetMinValue(ft *FieldType) (minVal Datum) {
switch ft.GetType() {
case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong:
if mysql.HasUnsignedFlag(ft.GetFlag()) {
minVal.SetUint64(0)
} else {
minVal.SetInt64(IntegerSignedLowerBound(ft.GetType()))
}
case mysql.TypeFloat:
minVal.SetFloat32(float32(-GetMaxFloat(ft.GetFlen(), ft.GetDecimal())))
case mysql.TypeDouble:
minVal.SetFloat64(-GetMaxFloat(ft.GetFlen(), ft.GetDecimal()))
case mysql.TypeString, mysql.TypeVarString, mysql.TypeVarchar, mysql.TypeBlob, mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob:
// codec.Encode KindMinNotNull, to avoid import circle
bytes := []byte{1}
minVal.SetString(string(bytes), ft.GetCollate())
case mysql.TypeNewDecimal:
minVal.SetMysqlDecimal(NewMaxOrMinDec(true, ft.GetFlen(), ft.GetDecimal()))
case mysql.TypeDuration:
minVal.SetMysqlDuration(Duration{Duration: MinTime})
case mysql.TypeDate, mysql.TypeDatetime, mysql.TypeTimestamp:
if ft.GetType() == mysql.TypeDate || ft.GetType() == mysql.TypeDatetime {
minVal.SetMysqlTime(NewTime(MinDatetime, ft.GetType(), 0))
} else {
minVal.SetMysqlTime(MinTimestamp)
}
}
return
}
// RoundingType is used to indicate the rounding type for reversing evaluation.
type RoundingType uint8
const (
// Ceiling means rounding up.
Ceiling RoundingType = iota
// Floor means rounding down.
Floor
)
func getDatumBound(retType *FieldType, rType RoundingType) Datum {
if rType == Ceiling {
return GetMaxValue(retType)
}
return GetMinValue(retType)
}
// ChangeReverseResultByUpperLowerBound is for expression's reverse evaluation.
// Here is an example for what's effort for the function: CastRealAsInt(t.a),
//
// if the type of column `t.a` is mysql.TypeDouble, and there is a row that t.a == MaxFloat64
// then the cast function will arrive a result MaxInt64. But when we do the reverse evaluation,
// if the result is MaxInt64, and the rounding type is ceiling. Then we should get the MaxFloat64
// instead of float64(MaxInt64).
//
// Another example: cast(1.1 as signed) = 1,
//
// when we get the answer 1, we can only reversely evaluate 1.0 as the column value. So in this
// case, we should judge whether the rounding type are ceiling. If it is, then we should plus one for
// 1.0 and get the reverse result 2.0.
func ChangeReverseResultByUpperLowerBound(
ctx Context,
retType *FieldType,
res Datum,
rType RoundingType) (Datum, error) {
d, err := res.ConvertTo(ctx, retType)
if terror.ErrorEqual(err, ErrOverflow) {
return d, nil
}
if err != nil {
return d, err
}
resRetType := FieldType{}
switch res.Kind() {
case KindInt64:
resRetType.SetType(mysql.TypeLonglong)
case KindUint64:
resRetType.SetType(mysql.TypeLonglong)
resRetType.AddFlag(mysql.UnsignedFlag)
case KindFloat32:
resRetType.SetType(mysql.TypeFloat)
case KindFloat64:
resRetType.SetType(mysql.TypeDouble)
case KindMysqlDecimal:
resRetType.SetType(mysql.TypeNewDecimal)
resRetType.SetFlenUnderLimit(int(res.GetMysqlDecimal().GetDigitsFrac() + res.GetMysqlDecimal().GetDigitsInt()))
resRetType.SetDecimalUnderLimit(int(res.GetMysqlDecimal().GetDigitsInt()))
}
bound := getDatumBound(&resRetType, rType)
cmp, err := d.Compare(ctx, &bound, collate.GetCollator(resRetType.GetCollate()))
if err != nil {
return d, err
}
if cmp == 0 {
d = getDatumBound(retType, rType)
} else if rType == Ceiling {
switch retType.GetType() {
case mysql.TypeShort:
if mysql.HasUnsignedFlag(retType.GetFlag()) {
if d.GetUint64() != math.MaxUint16 {
d.SetUint64(d.GetUint64() + 1)
}
} else {
if d.GetInt64() != math.MaxInt16 {
d.SetInt64(d.GetInt64() + 1)
}
}
case mysql.TypeLong:
if mysql.HasUnsignedFlag(retType.GetFlag()) {
if d.GetUint64() != math.MaxUint32 {
d.SetUint64(d.GetUint64() + 1)
}
} else {
if d.GetInt64() != math.MaxInt32 {
d.SetInt64(d.GetInt64() + 1)
}
}
case mysql.TypeLonglong:
if mysql.HasUnsignedFlag(retType.GetFlag()) {
if d.GetUint64() != math.MaxUint64 {
d.SetUint64(d.GetUint64() + 1)
}
} else {
if d.GetInt64() != math.MaxInt64 {
d.SetInt64(d.GetInt64() + 1)
}
}
case mysql.TypeFloat:
if d.GetFloat32() != math.MaxFloat32 {
d.SetFloat32(d.GetFloat32() + 1.0)
}
case mysql.TypeDouble:
if d.GetFloat64() != math.MaxFloat64 {
d.SetFloat64(d.GetFloat64() + 1.0)
}
case mysql.TypeNewDecimal:
if d.GetMysqlDecimal().Compare(NewMaxOrMinDec(false, retType.GetFlen(), retType.GetDecimal())) != 0 {
var decimalOne, newD MyDecimal
one := decimalOne.FromInt(1)
err = DecimalAdd(d.GetMysqlDecimal(), one, &newD)
if err != nil {
return d, err
}
d = NewDecimalDatum(&newD)
}
}
}
return d, nil
}
const (
sizeOfEmptyDatum = int(unsafe.Sizeof(Datum{}))
sizeOfMysqlTime = int(unsafe.Sizeof(ZeroTime))
sizeOfMyDecimal = MyDecimalStructSize
)
// EstimatedMemUsage returns the estimated bytes consumed of a one-dimensional
// or two-dimensional datum array.
func EstimatedMemUsage(array []Datum, numOfRows int) int64 {
if numOfRows == 0 {
return 0
}
var bytesConsumed int64
for _, d := range array {
bytesConsumed += d.EstimatedMemUsage()
}
return bytesConsumed * int64(numOfRows)
}
// EstimatedMemUsage returns the estimated bytes consumed of a Datum.
func (d Datum) EstimatedMemUsage() int64 {
bytesConsumed := sizeOfEmptyDatum
switch d.Kind() {
case KindMysqlDecimal:
bytesConsumed += sizeOfMyDecimal
case KindMysqlTime:
bytesConsumed += sizeOfMysqlTime
case KindVectorFloat32:
bytesConsumed += d.GetVectorFloat32().EstimatedMemUsage()
default:
bytesConsumed += len(d.b)
}
return int64(bytesConsumed)
}
// DatumsContainNull return true if any value is null
func DatumsContainNull(vals []Datum) bool {
for _, val := range vals {
if val.IsNull() {
return true
}
}
return false
}
// Copyright 2016 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package types
import (
"github.com/pingcap/errors"
"github.com/pingcap/tidb/pkg/parser/opcode"
)
// ComputePlus computes the result of a+b.
func ComputePlus(a, b Datum) (d Datum, err error) {
switch a.Kind() {
case KindInt64:
switch b.Kind() {
case KindInt64:
r, err1 := AddInt64(a.GetInt64(), b.GetInt64())
d.SetInt64(r)
return d, errors.Trace(err1)
case KindUint64:
r, err1 := AddInteger(b.GetUint64(), a.GetInt64())
d.SetUint64(r)
return d, errors.Trace(err1)
}
case KindUint64:
switch b.Kind() {
case KindInt64:
r, err1 := AddInteger(a.GetUint64(), b.GetInt64())
d.SetUint64(r)
return d, errors.Trace(err1)
case KindUint64:
r, err1 := AddUint64(a.GetUint64(), b.GetUint64())
d.SetUint64(r)
return d, errors.Trace(err1)
}
case KindFloat64:
if b.Kind() == KindFloat64 {
r := a.GetFloat64() + b.GetFloat64()
d.SetFloat64(r)
return d, nil
}
case KindMysqlDecimal:
if b.Kind() == KindMysqlDecimal {
r := new(MyDecimal)
err = DecimalAdd(a.GetMysqlDecimal(), b.GetMysqlDecimal(), r)
d.SetMysqlDecimal(r)
d.SetFrac(max(a.Frac(), b.Frac()))
return d, err
}
}
_, err = InvOp2(a.GetValue(), b.GetValue(), opcode.Plus)
return d, err
}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package types
import (
"fmt"
"strconv"
"github.com/pingcap/errors"
"github.com/pingcap/tidb/pkg/util/collate"
"github.com/pingcap/tidb/pkg/util/stringutil"
)
// Enum is for MySQL enum type.
type Enum struct {
Name string
Value uint64
}
// Copy deep copy an Enum.
func (e Enum) Copy() Enum {
return Enum{
Name: stringutil.Copy(e.Name),
Value: e.Value,
}
}
// String implements fmt.Stringer interface.
func (e Enum) String() string {
return e.Name
}
// ToNumber changes enum index to float64 for numeric operation.
func (e Enum) ToNumber() float64 {
return float64(e.Value)
}
// ParseEnum creates a Enum with item name or value.
func ParseEnum(elems []string, name string, collation string) (Enum, error) {
if enumName, err := ParseEnumName(elems, name, collation); err == nil {
return enumName, nil
}
// name doesn't exist, maybe an integer?
if num, err := strconv.ParseUint(name, 0, 64); err == nil {
return ParseEnumValue(elems, num)
}
errMsg := fmt.Sprintf("convert to MySQL enum failed: item %s is not in enum %v", name, elems)
return Enum{}, errors.Wrap(ErrTruncated, errMsg)
}
// ParseEnumName creates a Enum with item name.
func ParseEnumName(elems []string, name string, collation string) (Enum, error) {
ctor := collate.GetCollator(collation)
for i, n := range elems {
if ctor.Compare(n, name) == 0 {
return Enum{Name: n, Value: uint64(i) + 1}, nil
}
}
errMsg := fmt.Sprintf("convert to MySQL enum failed: item %s is not in enum %v", name, elems)
return Enum{}, errors.Wrap(ErrTruncated, errMsg)
}
// ParseEnumValue creates a Enum with special number.
func ParseEnumValue(elems []string, number uint64) (Enum, error) {
if number == 0 || number > uint64(len(elems)) {
errMsg := fmt.Sprintf("convert to MySQL enum failed: number %d overflow enum boundary [1, %d]", number, len(elems))
return Enum{}, errors.Wrap(ErrTruncated, errMsg)
}
return Enum{Name: elems[number-1], Value: number}, nil
}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// Copyright 2014 The ql Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSES/QL-LICENSE file.
package types
import (
"io"
"github.com/pingcap/errors"
"github.com/pingcap/tidb/pkg/parser/charset"
"github.com/pingcap/tidb/pkg/parser/mysql"
"github.com/pingcap/tidb/pkg/parser/opcode"
"github.com/pingcap/tidb/pkg/parser/terror"
ast "github.com/pingcap/tidb/pkg/parser/types"
"github.com/pingcap/tidb/pkg/util/collate"
)
// IsTypeBlob returns a boolean indicating whether the tp is a blob type.
var IsTypeBlob = ast.IsTypeBlob
// IsTypeChar returns a boolean indicating
// whether the tp is the char type like a string type or a varchar type.
var IsTypeChar = ast.IsTypeChar
// IsTypeVector returns whether tp is a vector type.
var IsTypeVector = ast.IsTypeVector
// IsTypeVarchar returns a boolean indicating
// whether the tp is the varchar type like a varstring type or a varchar type.
func IsTypeVarchar(tp byte) bool {
return tp == mysql.TypeVarString || tp == mysql.TypeVarchar
}
// IsTypeUnspecified returns a boolean indicating whether the tp is the Unspecified type.
func IsTypeUnspecified(tp byte) bool {
return tp == mysql.TypeUnspecified
}
// IsTypePrefixable returns a boolean indicating
// whether an index on a column with the tp can be defined with a prefix.
func IsTypePrefixable(tp byte) bool {
return IsTypeBlob(tp) || IsTypeChar(tp)
}
// IsTypeFractionable returns a boolean indicating
// whether the tp can has time fraction.
func IsTypeFractionable(tp byte) bool {
return tp == mysql.TypeDatetime || tp == mysql.TypeDuration || tp == mysql.TypeTimestamp
}
// IsTypeTime returns a boolean indicating
// whether the tp is time type like datetime, date or timestamp.
func IsTypeTime(tp byte) bool {
return tp == mysql.TypeDatetime || tp == mysql.TypeDate || tp == mysql.TypeTimestamp
}
// IsTypeFloat indicates whether the type is TypeFloat
func IsTypeFloat(tp byte) bool {
return tp == mysql.TypeFloat
}
// IsTypeInteger returns a boolean indicating whether the tp is integer type.
func IsTypeInteger(tp byte) bool {
switch tp {
case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong, mysql.TypeYear:
return true
}
return false
}
// IsTypeStoredAsInteger returns a boolean indicating whether the tp is stored as integer type.
func IsTypeStoredAsInteger(tp byte) bool {
switch tp {
case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong:
return true
case mysql.TypeYear:
return true
// Enum and Set are stored as integer type but they can not be pushed down to TiFlash
// case mysql.TypeEnum, mysql.TypeSet:
// return true
case mysql.TypeDatetime, mysql.TypeDate, mysql.TypeTimestamp, mysql.TypeDuration:
return true
}
return false
}
// IsTypeNumeric returns a boolean indicating whether the tp is numeric type.
func IsTypeNumeric(tp byte) bool {
switch tp {
case mysql.TypeBit, mysql.TypeTiny, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong, mysql.TypeNewDecimal,
mysql.TypeFloat, mysql.TypeDouble, mysql.TypeShort:
return true
}
return false
}
// IsTypeBit returns a boolean indicating whether the tp is bit type.
func IsTypeBit(ft *FieldType) bool {
return ft.GetType() == mysql.TypeBit
}
// IsTemporalWithDate returns a boolean indicating
// whether the tp is time type with date.
func IsTemporalWithDate(tp byte) bool {
return IsTypeTime(tp)
}
// IsBinaryStr returns a boolean indicating
// whether the field type is a binary string type.
func IsBinaryStr(ft *FieldType) bool {
return ft.GetCollate() == charset.CollationBin && IsString(ft.GetType())
}
// IsNonBinaryStr returns a boolean indicating
// whether the field type is a non-binary string type.
func IsNonBinaryStr(ft *FieldType) bool {
if ft.GetCollate() != charset.CollationBin && IsString(ft.GetType()) {
return true
}
return false
}
// NeedRestoredData returns if a type needs restored data.
// If the type is char and the collation is _bin, NeedRestoredData() returns false.
func NeedRestoredData(ft *FieldType) bool {
if collate.NewCollationEnabled() &&
IsNonBinaryStr(ft) &&
(!collate.IsBinCollation(ft.GetCollate()) || IsTypeVarchar(ft.GetType())) &&
ft.GetCollate() != "utf8mb4_0900_bin" {
return true
}
return false
}
// IsString returns a boolean indicating
// whether the field type is a string type.
func IsString(tp byte) bool {
return IsTypeChar(tp) || IsTypeBlob(tp) || IsTypeVarchar(tp) || IsTypeUnspecified(tp)
}
// IsStringKind returns a boolean indicating whether the tp is a string type.
func IsStringKind(kind byte) bool {
return kind == KindString || kind == KindBytes
}
var kind2Str = map[byte]string{
KindNull: "null",
KindInt64: "bigint",
KindUint64: "unsigned bigint",
KindFloat32: "float",
KindFloat64: "double",
KindString: "char",
KindBytes: "bytes",
KindBinaryLiteral: "bit/hex literal",
KindMysqlDecimal: "decimal",
KindMysqlDuration: "time",
KindMysqlEnum: "enum",
KindMysqlBit: "bit",
KindMysqlSet: "set",
KindMysqlTime: "datetime",
KindInterface: "interface",
KindMinNotNull: "min_not_null",
KindMaxValue: "max_value",
KindRaw: "raw",
KindMysqlJSON: "json",
KindVectorFloat32: "vector",
}
// TypeStr converts tp to a string.
var TypeStr = ast.TypeStr
// KindStr converts kind to a string.
func KindStr(kind byte) (r string) {
return kind2Str[kind]
}
// TypeToStr converts a field to a string.
// It is used for converting Text to Blob,
// or converting Char to Binary.
// Args:
//
// tp: type enum
// cs: charset
var TypeToStr = ast.TypeToStr
// EOFAsNil filtrates errors,
// If err is equal to io.EOF returns nil.
func EOFAsNil(err error) error {
if terror.ErrorEqual(err, io.EOF) {
return nil
}
return errors.Trace(err)
}
// InvOp2 returns an invalid operation error.
func InvOp2(x, y any, o opcode.Op) (any, error) {
return nil, errors.Errorf("Invalid operation: %v %v %v (mismatched types %T and %T)", x, o, y, x, y)
}
// overflow returns an overflowed error.
func overflow(v any, tp byte) error {
return ErrOverflow.GenWithStack("constant %v overflows %s", v, TypeStr(tp))
}
// IsTypeTemporal checks if a type is a temporal type.
func IsTypeTemporal(tp byte) bool {
switch tp {
case mysql.TypeDuration, mysql.TypeDatetime, mysql.TypeTimestamp,
mysql.TypeDate, mysql.TypeNewDate:
return true
}
return false
}
// Copyright 2019 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package types
import (
"bytes"
"github.com/pingcap/tidb/pkg/parser/ast"
"github.com/pingcap/tidb/pkg/util/size"
)
// FieldName records the names used for mysql protocol.
type FieldName struct {
OrigTblName ast.CIStr
OrigColName ast.CIStr
DBName ast.CIStr
TblName ast.CIStr
ColName ast.CIStr
Hidden bool
// NotExplicitUsable is used for mark whether a column can be explicit used in SQL.
// update stmt can write `writeable` column implicitly but cannot use non-public columns explicit.
// e.g. update t set a = 10 where b = 10; which `b` is in `writeOnly` state
NotExplicitUsable bool
Redundant bool
}
const emptyName = "EMPTY_NAME"
// String implements Stringer interface.
func (name *FieldName) String() string {
if name.Hidden {
return emptyName
}
bs := make([]byte, 0, len(name.DBName.L)+1+len(name.TblName.L)+1+len(name.ColName.L))
builder := bytes.NewBuffer(bs)
if name.DBName.L != "" {
builder.WriteString(name.DBName.L + ".")
}
if name.TblName.L != "" {
builder.WriteString(name.TblName.L + ".")
}
builder.WriteString(name.ColName.L)
return builder.String()
}
// MemoryUsage return the memory usage of FieldName
func (name *FieldName) MemoryUsage() (sum int64) {
if name == nil {
return
}
sum = name.OrigTblName.MemoryUsage() + name.OrigColName.MemoryUsage() + name.DBName.MemoryUsage() +
name.TblName.MemoryUsage() + name.ColName.MemoryUsage() + size.SizeOfBool*3
return
}
// Clone returns a shallow copy of the FieldName struct.
// All fields are value types (CIStr, bool), so a shallow copy is a full copy.
func (name *FieldName) Clone() *FieldName {
cloned := *name
return &cloned
}
// NameSlice is the slice of the *fieldName
type NameSlice []*FieldName
// Shallow is a shallow copy, only making a new slice.
func (s NameSlice) Shallow() NameSlice {
ret := make(NameSlice, len(s))
copy(ret, s)
return ret
}
// EmptyName is to occupy the position in the name slice. If it's set, that column's name is hidden.
var EmptyName = &FieldName{Hidden: true}
// FindAstColName checks whether the given ast.ColumnName is appeared in this slice.
func (s NameSlice) FindAstColName(name *ast.ColumnName) bool {
for _, fieldName := range s {
if (name.Schema.L == "" || name.Schema.L == fieldName.DBName.L) &&
(name.Table.L == "" || name.Table.L == fieldName.TblName.L) &&
name.Name.L == fieldName.ColName.L {
return true
}
}
return false
}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package types
import (
"fmt"
"strconv"
"github.com/pingcap/errors"
"github.com/pingcap/tidb/pkg/parser/charset"
"github.com/pingcap/tidb/pkg/parser/mysql"
ast "github.com/pingcap/tidb/pkg/parser/types"
"github.com/pingcap/tidb/pkg/util/collate"
"github.com/pingcap/tidb/pkg/util/dbterror"
"github.com/pingcap/tidb/pkg/util/mathutil"
)
// UnspecifiedLength is unspecified length.
const UnspecifiedLength = -1
// ErrorLength is error length for blob or text.
const ErrorLength = 0
// FieldType records field type information.
type FieldType = ast.FieldType
// NewFieldType returns a FieldType,
// with a type and other information about field type.
func NewFieldType(tp byte) *FieldType {
charset1, collate1 := DefaultCharsetForType(tp)
flen, decimal := minFlenAndDecimalForType(tp)
return NewFieldTypeBuilder().
SetType(tp).
SetCharset(charset1).
SetCollate(collate1).
SetFlen(flen).
SetDecimal(decimal).
BuildP()
}
// NewFieldTypeWithCollation returns a FieldType,
// with a type and other information about field type.
func NewFieldTypeWithCollation(tp byte, collation string, length int) *FieldType {
coll, _ := charset.GetCollationByName(collation)
return NewFieldTypeBuilder().SetType(tp).SetFlen(length).SetCharset(coll.CharsetName).SetCollate(collation).SetDecimal(UnspecifiedLength).BuildP()
}
// AggFieldType aggregates field types for a multi-argument function like `IF`, `IFNULL`, `COALESCE`
// whose return type is determined by the arguments' FieldTypes.
// Aggregation is performed by MergeFieldType function.
func AggFieldType(tps []*FieldType) *FieldType {
var currType FieldType
isMixedSign := false
for i, t := range tps {
if i == 0 && currType.GetType() == mysql.TypeUnspecified {
currType = *t
continue
}
mtp := mergeFieldType(currType.GetType(), t.GetType())
isMixedSign = isMixedSign || (mysql.HasUnsignedFlag(currType.GetFlag()) != mysql.HasUnsignedFlag(t.GetFlag()))
currType.SetType(mtp)
currType.SetFlag(mergeTypeFlag(currType.GetFlag(), t.GetFlag()))
}
// integral promotion when tps contains signed and unsigned
if isMixedSign && IsTypeInteger(currType.GetType()) {
bumpRange := false // indicate one of tps bump currType range
for _, t := range tps {
bumpRange = bumpRange || (mysql.HasUnsignedFlag(t.GetFlag()) && (t.GetType() == currType.GetType() ||
t.GetType() == mysql.TypeBit))
}
if bumpRange {
switch currType.GetType() {
case mysql.TypeTiny:
currType.SetType(mysql.TypeShort)
case mysql.TypeShort:
currType.SetType(mysql.TypeInt24)
case mysql.TypeInt24:
currType.SetType(mysql.TypeLong)
case mysql.TypeLong:
currType.SetType(mysql.TypeLonglong)
case mysql.TypeLonglong:
currType.SetType(mysql.TypeNewDecimal)
}
}
}
if mysql.HasUnsignedFlag(currType.GetFlag()) && !isMixedSign {
currType.AddFlag(mysql.UnsignedFlag)
}
return &currType
}
// TryToFixFlenOfDatetime try to fix flen of Datetime for specific func or other field merge cases
func TryToFixFlenOfDatetime(resultTp *FieldType) {
if resultTp.GetType() == mysql.TypeDatetime {
resultTp.SetFlen(mysql.MaxDatetimeWidthNoFsp)
if resultTp.GetDecimal() > 0 {
resultTp.SetFlen(resultTp.GetFlen() + resultTp.GetDecimal() + 1)
}
}
}
// AggregateEvalType aggregates arguments' EvalType of a multi-argument function.
func AggregateEvalType(fts []*FieldType, flag *uint) EvalType {
var (
aggregatedEvalType = ETString
unsigned bool
gotFirst bool
gotBinString bool
)
lft := fts[0]
for _, ft := range fts {
if ft.GetType() == mysql.TypeNull {
continue
}
et := ft.EvalType()
rft := ft
if (IsTypeBlob(ft.GetType()) || IsTypeVarchar(ft.GetType()) || IsTypeChar(ft.GetType())) && mysql.HasBinaryFlag(ft.GetFlag()) {
gotBinString = true
}
if !gotFirst {
gotFirst = true
aggregatedEvalType = et
unsigned = mysql.HasUnsignedFlag(ft.GetFlag())
} else {
aggregatedEvalType = mergeEvalType(aggregatedEvalType, et, lft, rft, unsigned, mysql.HasUnsignedFlag(ft.GetFlag()))
unsigned = unsigned && mysql.HasUnsignedFlag(ft.GetFlag())
}
lft = rft
}
SetTypeFlag(flag, mysql.UnsignedFlag, unsigned)
SetTypeFlag(flag, mysql.BinaryFlag, !aggregatedEvalType.IsStringKind() || gotBinString)
return aggregatedEvalType
}
func mergeEvalType(lhs, rhs EvalType, lft, rft *FieldType, isLHSUnsigned, isRHSUnsigned bool) EvalType {
if lft.GetType() == mysql.TypeUnspecified || rft.GetType() == mysql.TypeUnspecified {
if lft.GetType() == rft.GetType() {
return ETString
}
if lft.GetType() == mysql.TypeUnspecified {
lhs = rhs
} else {
rhs = lhs
}
}
if lhs.IsStringKind() || rhs.IsStringKind() {
return ETString
} else if lhs == ETReal || rhs == ETReal {
return ETReal
} else if lhs == ETDecimal || rhs == ETDecimal || isLHSUnsigned != isRHSUnsigned {
return ETDecimal
}
return ETInt
}
// SetTypeFlag turns the flagItem on or off.
func SetTypeFlag(flag *uint, flagItem uint, on bool) {
if on {
*flag |= flagItem
} else {
*flag &= ^flagItem
}
}
// InferParamTypeFromDatum is used for plan cache to infer the type of a parameter from its datum.
func InferParamTypeFromDatum(d *Datum, tp *FieldType) {
InferParamTypeFromUnderlyingValue(d.GetValue(), tp)
if IsStringKind(d.k) {
// consider charset and collation here
c, err := collate.GetCollationByName(d.collation)
if err != nil || c == nil {
return // use default charset and collation
}
tp.SetCharset(c.CharsetName)
tp.SetCollate(d.collation)
}
}
// InferParamTypeFromUnderlyingValue is used for plan cache to infer the type of a parameter from its underlying value.
func InferParamTypeFromUnderlyingValue(value any, tp *FieldType) {
switch value.(type) {
case nil:
// For NULL parameters, use TypeNull to ensure consistent behavior with literal NULL values
// in control flow functions like CASE WHEN. Previously using TypeVarString caused incorrect
// type inference in prepared statements (issue #62564).
tp.SetType(mysql.TypeNull)
tp.SetFlen(0)
tp.SetDecimal(0)
// Set default charset and collation instead of binary charset to avoid breaking JSON functions
// (see PR #54145 which fixed JSON function argument verification issues).
tp.SetCharset(mysql.DefaultCharset)
tp.SetCollate(mysql.DefaultCollationName)
default:
DefaultTypeForValue(value, tp, mysql.DefaultCharset, mysql.DefaultCollationName)
if hasVariantFieldLength(tp) {
tp.SetFlen(UnspecifiedLength)
}
if tp.GetType() == mysql.TypeUnspecified {
tp.SetType(mysql.TypeVarString)
}
}
}
func hasVariantFieldLength(tp *FieldType) bool {
switch tp.GetType() {
case mysql.TypeLonglong, mysql.TypeVarString, mysql.TypeDouble, mysql.TypeBlob,
mysql.TypeBit, mysql.TypeDuration, mysql.TypeEnum, mysql.TypeSet:
return true
}
return false
}
// DefaultTypeForValue returns the default FieldType for the value.
func DefaultTypeForValue(value any, tp *FieldType, char string, collate string) {
if value != nil {
tp.AddFlag(mysql.NotNullFlag)
}
switch x := value.(type) {
case nil:
tp.SetType(mysql.TypeNull)
tp.SetFlen(0)
tp.SetDecimal(0)
SetBinChsClnFlag(tp)
case bool:
tp.SetType(mysql.TypeLonglong)
tp.SetFlen(1)
tp.SetDecimal(0)
tp.AddFlag(mysql.IsBooleanFlag)
SetBinChsClnFlag(tp)
case int:
tp.SetType(mysql.TypeLonglong)
tp.SetFlen(mathutil.StrLenOfInt64Fast(int64(x)))
tp.SetDecimal(0)
SetBinChsClnFlag(tp)
case int64:
tp.SetType(mysql.TypeLonglong)
tp.SetFlen(mathutil.StrLenOfInt64Fast(x))
tp.SetDecimal(0)
SetBinChsClnFlag(tp)
case uint64:
tp.SetType(mysql.TypeLonglong)
tp.AddFlag(mysql.UnsignedFlag)
tp.SetFlen(mathutil.StrLenOfUint64Fast(x))
tp.SetDecimal(0)
SetBinChsClnFlag(tp)
case string:
tp.SetType(mysql.TypeVarString)
// TODO: tp.flen should be len(x) * 3 (max bytes length of CharsetUTF8)
tp.SetFlen(len(x))
tp.SetDecimal(UnspecifiedLength)
tp.SetCharset(char)
tp.SetCollate(collate)
case float32:
tp.SetType(mysql.TypeFloat)
s := strconv.FormatFloat(float64(x), 'f', -1, 32)
tp.SetFlen(len(s))
tp.SetDecimal(UnspecifiedLength)
SetBinChsClnFlag(tp)
case float64:
tp.SetType(mysql.TypeDouble)
s := strconv.FormatFloat(x, 'f', -1, 64)
tp.SetFlen(len(s))
tp.SetDecimal(UnspecifiedLength)
SetBinChsClnFlag(tp)
case []byte:
tp.SetType(mysql.TypeBlob)
tp.SetFlen(len(x))
tp.SetDecimal(UnspecifiedLength)
SetBinChsClnFlag(tp)
case BitLiteral:
tp.SetType(mysql.TypeVarString)
tp.SetFlen(len(x) * 3)
tp.SetDecimal(0)
SetBinChsClnFlag(tp)
case HexLiteral:
tp.SetType(mysql.TypeVarString)
tp.SetFlen(len(x) * 3)
tp.SetDecimal(0)
tp.AddFlag(mysql.UnsignedFlag)
SetBinChsClnFlag(tp)
case BinaryLiteral:
tp.SetType(mysql.TypeVarString)
tp.SetFlen(len(x))
tp.SetDecimal(0)
SetBinChsClnFlag(tp)
tp.DelFlag(mysql.BinaryFlag)
tp.AddFlag(mysql.UnsignedFlag)
case Time:
tp.SetType(x.Type())
switch x.Type() {
case mysql.TypeDate:
tp.SetFlen(mysql.MaxDateWidth)
tp.SetDecimal(UnspecifiedLength)
case mysql.TypeDatetime, mysql.TypeTimestamp:
tp.SetFlen(mysql.MaxDatetimeWidthNoFsp)
if x.Fsp() > DefaultFsp { // consider point('.') and the fractional part.
tp.SetFlen(tp.GetFlen() + x.Fsp() + 1)
}
tp.SetDecimal(x.Fsp())
}
SetBinChsClnFlag(tp)
case Duration:
tp.SetType(mysql.TypeDuration)
tp.SetFlen(len(x.String()))
if x.Fsp > DefaultFsp { // consider point('.') and the fractional part.
tp.SetFlen(x.Fsp + 1)
}
tp.SetDecimal(x.Fsp)
SetBinChsClnFlag(tp)
case *MyDecimal:
tp.SetType(mysql.TypeNewDecimal)
tp.SetFlenUnderLimit(len(x.ToString()))
tp.SetDecimalUnderLimit(int(x.digitsFrac))
// Add the length for `.`.
tp.SetFlenUnderLimit(tp.GetFlen() + 1)
SetBinChsClnFlag(tp)
case Enum:
tp.SetType(mysql.TypeEnum)
tp.SetFlen(len(x.Name))
tp.SetDecimal(UnspecifiedLength)
SetBinChsClnFlag(tp)
case Set:
tp.SetType(mysql.TypeSet)
tp.SetFlen(len(x.Name))
tp.SetDecimal(UnspecifiedLength)
SetBinChsClnFlag(tp)
case BinaryJSON:
tp.SetType(mysql.TypeJSON)
tp.SetFlen(UnspecifiedLength)
tp.SetDecimal(0)
tp.SetCharset(charset.CharsetUTF8MB4)
tp.SetCollate(charset.CollationUTF8MB4)
case VectorFloat32:
tp.SetType(mysql.TypeTiDBVectorFloat32)
tp.SetFlen(UnspecifiedLength)
tp.SetDecimal(0)
SetBinChsClnFlag(tp)
default:
tp.SetType(mysql.TypeUnspecified)
tp.SetFlen(UnspecifiedLength)
tp.SetDecimal(UnspecifiedLength)
tp.SetCharset(charset.CharsetUTF8MB4)
tp.SetCollate(charset.CollationUTF8MB4)
}
}
// minFlenAndDecimalForType returns the minimum flen/decimal that can hold all the data for `tp`.
func minFlenAndDecimalForType(tp byte) (int, int) {
switch tp {
case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong, mysql.TypeYear:
return mysql.GetDefaultFieldLengthAndDecimal(tp)
default:
// todo support non-integer type
return UnspecifiedLength, UnspecifiedLength
}
}
// DefaultCharsetForType returns the default charset/collation for mysql type.
func DefaultCharsetForType(tp byte) (defaultCharset string, defaultCollation string) {
switch tp {
case mysql.TypeVarString, mysql.TypeString, mysql.TypeVarchar:
// Default charset for string types is utf8mb4.
return mysql.DefaultCharset, mysql.DefaultCollationName
}
return charset.CharsetBin, charset.CollationBin
}
// mergeFieldType merges two MySQL type to a new type.
// This is used in hybrid field type expression.
// For example "select case c when 1 then 2 when 2 then 'tidb' from t;"
// The result field type of the case expression is the merged type of the two when clause.
// See https://github.com/mysql/mysql-server/blob/8.0/sql/field.cc#L1042
//
// This function doesn't handle the range bump: for example, when the unsigned long is merged with signed long,
// the result should be longlong. However, this function returns long for this case. Please use `AggFieldType`
// function if you need to handle the range bump.
func mergeFieldType(a byte, b byte) byte {
ia := getFieldTypeIndex(a)
ib := getFieldTypeIndex(b)
return fieldTypeMergeRules[ia][ib]
}
// mergeTypeFlag merges two MySQL type flag to a new one
// currently only NotNullFlag and UnsignedFlag is checked
// todo more flag need to be checked
func mergeTypeFlag(a, b uint) uint {
return a & (b&mysql.NotNullFlag | ^mysql.NotNullFlag) & (b&mysql.UnsignedFlag | ^mysql.UnsignedFlag)
}
var (
fieldTypeIndexes = map[byte]int{
mysql.TypeUnspecified: 0,
mysql.TypeTiny: 1,
mysql.TypeShort: 2,
mysql.TypeLong: 3,
mysql.TypeFloat: 4,
mysql.TypeDouble: 5,
mysql.TypeNull: 6,
mysql.TypeTimestamp: 7,
mysql.TypeLonglong: 8,
mysql.TypeInt24: 9,
mysql.TypeDate: 10,
mysql.TypeDuration: 11,
mysql.TypeDatetime: 12,
mysql.TypeYear: 13,
mysql.TypeNewDate: 14,
mysql.TypeVarchar: 15,
mysql.TypeBit: 16,
mysql.TypeJSON: 17,
mysql.TypeNewDecimal: 18,
mysql.TypeEnum: 19,
mysql.TypeSet: 20,
mysql.TypeTinyBlob: 21,
mysql.TypeMediumBlob: 22,
mysql.TypeLongBlob: 23,
mysql.TypeBlob: 24,
mysql.TypeVarString: 25,
mysql.TypeString: 26,
mysql.TypeGeometry: 27,
mysql.TypeTiDBVectorFloat32: 28,
}
)
func getFieldTypeIndex(tp byte) int {
return fieldTypeIndexes[tp]
}
// https://github.com/mysql/mysql-server/blob/8.0/sql/field.cc#L248
var fieldTypeMergeRules = [29][29]byte{
/* mysql.TypeUnspecified -> */
{
// mysql.TypeUnspecified mysql.TypeTiny
mysql.TypeNewDecimal, mysql.TypeNewDecimal,
// mysql.TypeShort mysql.TypeLong
mysql.TypeNewDecimal, mysql.TypeNewDecimal,
// mysql.TypeFloat mysql.TypeDouble
mysql.TypeDouble, mysql.TypeDouble,
// mysql.TypeNull mysql.TypeTimestamp
mysql.TypeNewDecimal, mysql.TypeVarchar,
// mysql.TypeLonglong mysql.TypeInt24
mysql.TypeUnspecified, mysql.TypeUnspecified,
// mysql.TypeDate mysql.TypeTime
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeDatetime mysql.TypeYear
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
// mysql.TypeJSON
mysql.TypeVarchar,
// mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeNewDecimal, mysql.TypeVarchar,
// mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
// mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
// mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
// mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
// mysql.TypeTiDBVectorFloat32
mysql.TypeVarchar,
},
/* mysql.TypeTiny -> */
{
// mysql.TypeUnspecified mysql.TypeTiny
mysql.TypeNewDecimal, mysql.TypeTiny,
// mysql.TypeShort mysql.TypeLong
mysql.TypeShort, mysql.TypeLong,
// mysql.TypeFloat mysql.TypeDouble
mysql.TypeFloat, mysql.TypeDouble,
// mysql.TypeNull mysql.TypeTimestamp
mysql.TypeTiny, mysql.TypeVarchar,
// mysql.TypeLonglong mysql.TypeInt24
mysql.TypeLonglong, mysql.TypeInt24,
// mysql.TypeDate mysql.TypeTime
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeDatetime mysql.TypeYear
mysql.TypeVarchar, mysql.TypeTiny,
// mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeBit <16>-<244>
mysql.TypeLonglong,
// mysql.TypeJSON
mysql.TypeVarchar,
// mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeNewDecimal, mysql.TypeVarchar,
// mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
// mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
// mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
// mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
// mysql.TypeTiDBVectorFloat32
mysql.TypeVarchar,
},
/* mysql.TypeShort -> */
{
// mysql.TypeUnspecified mysql.TypeTiny
mysql.TypeNewDecimal, mysql.TypeShort,
// mysql.TypeShort mysql.TypeLong
mysql.TypeShort, mysql.TypeLong,
// mysql.TypeFloat mysql.TypeDouble
mysql.TypeFloat, mysql.TypeDouble,
// mysql.TypeNull mysql.TypeTimestamp
mysql.TypeShort, mysql.TypeVarchar,
// mysql.TypeLonglong mysql.TypeInt24
mysql.TypeLonglong, mysql.TypeInt24,
// mysql.TypeDate mysql.TypeTime
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeDatetime mysql.TypeYear
mysql.TypeVarchar, mysql.TypeShort,
// mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeBit <16>-<244>
mysql.TypeLonglong,
// mysql.TypeJSON
mysql.TypeVarchar,
// mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeNewDecimal, mysql.TypeVarchar,
// mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
// mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
// mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
// mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
// mysql.TypeTiDBVectorFloat32
mysql.TypeVarchar,
},
/* mysql.TypeLong -> */
{
// mysql.TypeUnspecified mysql.TypeTiny
mysql.TypeNewDecimal, mysql.TypeLong,
// mysql.TypeShort mysql.TypeLong
mysql.TypeLong, mysql.TypeLong,
// mysql.TypeFloat mysql.TypeDouble
mysql.TypeDouble, mysql.TypeDouble,
// mysql.TypeNull mysql.TypeTimestamp
mysql.TypeLong, mysql.TypeVarchar,
// mysql.TypeLonglong mysql.TypeInt24
mysql.TypeLonglong, mysql.TypeLong,
// mysql.TypeDate mysql.TypeTime
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeDatetime mysql.TypeYear
mysql.TypeVarchar, mysql.TypeLong,
// mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeBit <16>-<244>
mysql.TypeLonglong,
// mysql.TypeJSON
mysql.TypeVarchar,
// mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeNewDecimal, mysql.TypeVarchar,
// mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
// mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
// mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
// mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
// mysql.TypeTiDBVectorFloat32
mysql.TypeVarchar,
},
/* mysql.TypeFloat -> */
{
// mysql.TypeUnspecified mysql.TypeTiny
mysql.TypeDouble, mysql.TypeFloat,
// mysql.TypeShort mysql.TypeLong
mysql.TypeFloat, mysql.TypeDouble,
// mysql.TypeFloat mysql.TypeDouble
mysql.TypeFloat, mysql.TypeDouble,
// mysql.TypeNull mysql.TypeTimestamp
mysql.TypeFloat, mysql.TypeVarchar,
// mysql.TypeLonglong mysql.TypeInt24
mysql.TypeFloat, mysql.TypeFloat,
// mysql.TypeDate mysql.TypeTime
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeDatetime mysql.TypeYear
mysql.TypeVarchar, mysql.TypeFloat,
// mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeBit <16>-<244>
mysql.TypeDouble,
// mysql.TypeJSON
mysql.TypeVarchar,
// mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeDouble, mysql.TypeVarchar,
// mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
// mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
// mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
// mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
// mysql.TypeTiDBVectorFloat32
mysql.TypeVarchar,
},
/* mysql.TypeDouble -> */
{
// mysql.TypeUnspecified mysql.TypeTiny
mysql.TypeDouble, mysql.TypeDouble,
// mysql.TypeShort mysql.TypeLong
mysql.TypeDouble, mysql.TypeDouble,
// mysql.TypeFloat mysql.TypeDouble
mysql.TypeDouble, mysql.TypeDouble,
// mysql.TypeNull mysql.TypeTimestamp
mysql.TypeDouble, mysql.TypeVarchar,
// mysql.TypeLonglong mysql.TypeInt24
mysql.TypeDouble, mysql.TypeDouble,
// mysql.TypeDate mysql.TypeTime
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeDatetime mysql.TypeYear
mysql.TypeVarchar, mysql.TypeDouble,
// mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeBit <16>-<244>
mysql.TypeDouble,
// mysql.TypeJSON
mysql.TypeVarchar,
// mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeDouble, mysql.TypeVarchar,
// mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
// mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
// mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
// mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
// mysql.TypeTiDBVectorFloat32
mysql.TypeVarchar,
},
/* mysql.TypeNull -> */
{
// mysql.TypeUnspecified mysql.TypeTiny
mysql.TypeNewDecimal, mysql.TypeTiny,
// mysql.TypeShort mysql.TypeLong
mysql.TypeShort, mysql.TypeLong,
// mysql.TypeFloat mysql.TypeDouble
mysql.TypeFloat, mysql.TypeDouble,
// mysql.TypeNull mysql.TypeTimestamp
mysql.TypeNull, mysql.TypeTimestamp,
// mysql.TypeLonglong mysql.TypeInt24
mysql.TypeLonglong, mysql.TypeLonglong,
// mysql.TypeDate mysql.TypeTime
mysql.TypeDate, mysql.TypeDuration,
// mysql.TypeDatetime mysql.TypeYear
mysql.TypeDatetime, mysql.TypeYear,
// mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeNewDate, mysql.TypeVarchar,
// mysql.TypeBit <16>-<244>
mysql.TypeBit,
// mysql.TypeJSON
mysql.TypeJSON,
// mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeNewDecimal, mysql.TypeEnum,
// mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeSet, mysql.TypeTinyBlob,
// mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
// mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
// mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeGeometry,
// mysql.TypeTiDBVectorFloat32
mysql.TypeTiDBVectorFloat32,
},
/* mysql.TypeTimestamp -> */
{
// mysql.TypeUnspecified mysql.TypeTiny
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeShort mysql.TypeLong
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeFloat mysql.TypeDouble
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeNull mysql.TypeTimestamp
mysql.TypeTimestamp, mysql.TypeTimestamp,
// mysql.TypeLonglong mysql.TypeInt24
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeDate mysql.TypeTime
mysql.TypeDatetime, mysql.TypeDatetime,
// mysql.TypeDatetime mysql.TypeYear
mysql.TypeDatetime, mysql.TypeVarchar,
// mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeNewDate, mysql.TypeVarchar,
// mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
// mysql.TypeJSON
mysql.TypeVarchar,
// mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
// mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
// mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
// mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
// mysql.TypeTiDBVectorFloat32
mysql.TypeVarchar,
},
/* mysql.TypeLonglong -> */
{
// mysql.TypeUnspecified mysql.TypeTiny
mysql.TypeNewDecimal, mysql.TypeLonglong,
// mysql.TypeShort mysql.TypeLong
mysql.TypeLonglong, mysql.TypeLonglong,
// mysql.TypeFloat mysql.TypeDouble
mysql.TypeDouble, mysql.TypeDouble,
// mysql.TypeNull mysql.TypeTimestamp
mysql.TypeLonglong, mysql.TypeVarchar,
// mysql.TypeLonglong mysql.TypeInt24
mysql.TypeLonglong, mysql.TypeLong,
// mysql.TypeDate mysql.TypeTime
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeDatetime mysql.TypeYear
mysql.TypeVarchar, mysql.TypeLonglong,
// mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeNewDate, mysql.TypeVarchar,
// mysql.TypeBit <16>-<244>
mysql.TypeLonglong,
// mysql.TypeJSON
mysql.TypeVarchar,
// mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeNewDecimal, mysql.TypeVarchar,
// mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
// mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
// mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
// mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
// mysql.TypeTiDBVectorFloat32
mysql.TypeVarchar,
},
/* mysql.TypeInt24 -> */
{
// mysql.TypeUnspecified mysql.TypeTiny
mysql.TypeNewDecimal, mysql.TypeInt24,
// mysql.TypeShort mysql.TypeLong
mysql.TypeInt24, mysql.TypeLong,
// mysql.TypeFloat mysql.TypeDouble
mysql.TypeFloat, mysql.TypeDouble,
// mysql.TypeNull mysql.TypeTimestamp
mysql.TypeInt24, mysql.TypeVarchar,
// mysql.TypeLonglong mysql.TypeInt24
mysql.TypeLonglong, mysql.TypeInt24,
// mysql.TypeDate mysql.TypeTime
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeDatetime mysql.TypeYear
mysql.TypeVarchar, mysql.TypeInt24,
// mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeNewDate, mysql.TypeVarchar,
// mysql.TypeBit <16>-<244>
mysql.TypeLonglong,
// mysql.TypeJSON
mysql.TypeVarchar,
// mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeNewDecimal, mysql.TypeVarchar,
// mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
// mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
// mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
// mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
// mysql.TypeTiDBVectorFloat32
mysql.TypeVarchar,
},
/* mysql.TypeDate -> */
{
// mysql.TypeUnspecified mysql.TypeTiny
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeShort mysql.TypeLong
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeFloat mysql.TypeDouble
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeNull mysql.TypeTimestamp
mysql.TypeDate, mysql.TypeDatetime,
// mysql.TypeLonglong mysql.TypeInt24
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeDate mysql.TypeTime
mysql.TypeDate, mysql.TypeDatetime,
// mysql.TypeDatetime mysql.TypeYear
mysql.TypeDatetime, mysql.TypeVarchar,
// mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeNewDate, mysql.TypeVarchar,
// mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
// mysql.TypeJSON
mysql.TypeVarchar,
// mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
// mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
// mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
// mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
// mysql.TypeTiDBVectorFloat32
mysql.TypeVarchar,
},
/* mysql.TypeTime -> */
{
// mysql.TypeUnspecified mysql.TypeTiny
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeShort mysql.TypeLong
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeFloat mysql.TypeDouble
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeNull mysql.TypeTimestamp
mysql.TypeDuration, mysql.TypeDatetime,
// mysql.TypeLonglong mysql.TypeInt24
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeDate mysql.TypeTime
mysql.TypeDatetime, mysql.TypeDuration,
// mysql.TypeDatetime mysql.TypeYear
mysql.TypeDatetime, mysql.TypeVarchar,
// mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeNewDate, mysql.TypeVarchar,
// mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
// mysql.TypeJSON
mysql.TypeVarchar,
// mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
// mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
// mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
// mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
// mysql.TypeTiDBVectorFloat32
mysql.TypeVarchar,
},
/* mysql.TypeDatetime -> */
{
// mysql.TypeUnspecified mysql.TypeTiny
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeShort mysql.TypeLong
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeFloat mysql.TypeDouble
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeNull mysql.TypeTimestamp
mysql.TypeDatetime, mysql.TypeDatetime,
// mysql.TypeLonglong mysql.TypeInt24
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeDate mysql.TypeTime
mysql.TypeDatetime, mysql.TypeDatetime,
// mysql.TypeDatetime mysql.TypeYear
mysql.TypeDatetime, mysql.TypeVarchar,
// mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeNewDate, mysql.TypeVarchar,
// mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
// mysql.TypeJSON
mysql.TypeVarchar,
// mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
// mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
// mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
// mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
// mysql.TypeTiDBVectorFloat32
mysql.TypeVarchar,
},
/* mysql.TypeYear -> */
{
// mysql.TypeUnspecified mysql.TypeTiny
mysql.TypeUnspecified, mysql.TypeTiny,
// mysql.TypeShort mysql.TypeLong
mysql.TypeShort, mysql.TypeLong,
// mysql.TypeFloat mysql.TypeDouble
mysql.TypeFloat, mysql.TypeDouble,
// mysql.TypeNull mysql.TypeTimestamp
mysql.TypeYear, mysql.TypeVarchar,
// mysql.TypeLonglong mysql.TypeInt24
mysql.TypeLonglong, mysql.TypeInt24,
// mysql.TypeDate mysql.TypeTime
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeDatetime mysql.TypeYear
mysql.TypeVarchar, mysql.TypeYear,
// mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeBit <16>-<244>
mysql.TypeLonglong,
// mysql.TypeJSON
mysql.TypeVarchar,
// mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeNewDecimal, mysql.TypeVarchar,
// mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
// mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
// mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
// mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
// mysql.TypeTiDBVectorFloat32
mysql.TypeVarchar,
},
/* mysql.TypeNewDate -> */
{
// mysql.TypeUnspecified mysql.TypeTiny
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeShort mysql.TypeLong
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeFloat mysql.TypeDouble
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeNull mysql.TypeTimestamp
mysql.TypeNewDate, mysql.TypeDatetime,
// mysql.TypeLonglong mysql.TypeInt24
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeDate mysql.TypeTime
mysql.TypeNewDate, mysql.TypeDatetime,
// mysql.TypeDatetime mysql.TypeYear
mysql.TypeDatetime, mysql.TypeVarchar,
// mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeNewDate, mysql.TypeVarchar,
// mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
// mysql.TypeJSON
mysql.TypeVarchar,
// mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
// mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
// mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
// mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
// mysql.TypeTiDBVectorFloat32
mysql.TypeVarchar,
},
/* mysql.TypeVarchar -> */
{
// mysql.TypeUnspecified mysql.TypeTiny
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeShort mysql.TypeLong
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeFloat mysql.TypeDouble
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeNull mysql.TypeTimestamp
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeLonglong mysql.TypeInt24
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeDate mysql.TypeTime
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeDatetime mysql.TypeYear
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
// mysql.TypeJSON
mysql.TypeVarchar,
// mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
// mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
// mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
// mysql.TypeString mysql.TypeGeometry
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeTiDBVectorFloat32
mysql.TypeVarchar,
},
/* mysql.TypeBit -> */
{
// mysql.TypeUnspecified mysql.TypeTiny
mysql.TypeVarchar, mysql.TypeLonglong,
// mysql.TypeShort mysql.TypeLong
mysql.TypeLonglong, mysql.TypeLonglong,
// mysql.TypeFloat mysql.TypeDouble
mysql.TypeDouble, mysql.TypeDouble,
// mysql.TypeNull mysql.TypeTimestamp
mysql.TypeBit, mysql.TypeVarchar,
// mysql.TypeLonglong mysql.TypeInt24
mysql.TypeLonglong, mysql.TypeLonglong,
// mysql.TypeDate mysql.TypeTime
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeDatetime mysql.TypeYear
mysql.TypeVarchar, mysql.TypeLonglong,
// mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeBit <16>-<244>
mysql.TypeBit,
// mysql.TypeJSON
mysql.TypeVarchar,
// mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeNewDecimal, mysql.TypeVarchar,
// mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
// mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
// mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
// mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
// mysql.TypeTiDBVectorFloat32
mysql.TypeVarchar,
},
/* mysql.TypeJSON -> */
{
// mysql.TypeUnspecified mysql.TypeTiny
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeShort mysql.TypeLong
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeNewFloat mysql.TypeDouble
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeNull mysql.TypeTimestamp
mysql.TypeJSON, mysql.TypeVarchar,
// mysql.TypeLongLONG mysql.TypeInt24
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeDate MYSQL_TYPE_TIME
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeDatetime MYSQL_TYPE_YEAR
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
// mysql.TypeJSON
mysql.TypeJSON,
// mysql.TypeNewDecimal MYSQL_TYPE_ENUM
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeLongBlob,
// mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeLongBlob, mysql.TypeLongBlob,
// mysql.TypeBlob mysql.TypeVarString
mysql.TypeLongBlob, mysql.TypeVarchar,
// mysql.TypeString MYSQL_TYPE_GEOMETRY
mysql.TypeString, mysql.TypeVarchar,
// mysql.TypeTiDBVectorFloat32
mysql.TypeVarchar,
},
/* mysql.TypeNewDecimal -> */
{
// mysql.TypeUnspecified mysql.TypeTiny
mysql.TypeNewDecimal, mysql.TypeNewDecimal,
// mysql.TypeShort mysql.TypeLong
mysql.TypeNewDecimal, mysql.TypeNewDecimal,
// mysql.TypeFloat mysql.TypeDouble
mysql.TypeDouble, mysql.TypeDouble,
// mysql.TypeNull mysql.TypeTimestamp
mysql.TypeNewDecimal, mysql.TypeVarchar,
// mysql.TypeLonglong mysql.TypeInt24
mysql.TypeNewDecimal, mysql.TypeNewDecimal,
// mysql.TypeDate mysql.TypeTime
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeDatetime mysql.TypeYear
mysql.TypeVarchar, mysql.TypeNewDecimal,
// mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeBit <16>-<244>
mysql.TypeNewDecimal,
// mysql.TypeJSON
mysql.TypeVarchar,
// mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeNewDecimal, mysql.TypeVarchar,
// mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
// mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
// mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
// mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
// mysql.TypeTiDBVectorFloat32
mysql.TypeVarchar,
},
/* mysql.TypeEnum -> */
{
// mysql.TypeUnspecified mysql.TypeTiny
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeShort mysql.TypeLong
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeFloat mysql.TypeDouble
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeNull mysql.TypeTimestamp
mysql.TypeEnum, mysql.TypeVarchar,
// mysql.TypeLonglong mysql.TypeInt24
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeDate mysql.TypeTime
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeDatetime mysql.TypeYear
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
// mysql.TypeJSON
mysql.TypeVarchar,
// mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
// mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
// mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
// mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
// mysql.TypeTiDBVectorFloat32
mysql.TypeVarchar,
},
/* mysql.TypeSet -> */
{
// mysql.TypeUnspecified mysql.TypeTiny
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeShort mysql.TypeLong
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeFloat mysql.TypeDouble
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeNull mysql.TypeTimestamp
mysql.TypeSet, mysql.TypeVarchar,
// mysql.TypeLonglong mysql.TypeInt24
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeDate mysql.TypeTime
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeDatetime mysql.TypeYear
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
// mysql.TypeJSON
mysql.TypeVarchar,
// mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
// mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
// mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
// mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeVarchar,
// mysql.TypeTiDBVectorFloat32
mysql.TypeVarchar,
},
/* mysql.TypeTinyBlob -> */
{
// mysql.TypeUnspecified mysql.TypeTiny
mysql.TypeTinyBlob, mysql.TypeTinyBlob,
// mysql.TypeShort mysql.TypeLong
mysql.TypeTinyBlob, mysql.TypeTinyBlob,
// mysql.TypeFloat mysql.TypeDouble
mysql.TypeTinyBlob, mysql.TypeTinyBlob,
// mysql.TypeNull mysql.TypeTimestamp
mysql.TypeTinyBlob, mysql.TypeTinyBlob,
// mysql.TypeLonglong mysql.TypeInt24
mysql.TypeTinyBlob, mysql.TypeTinyBlob,
// mysql.TypeDate mysql.TypeTime
mysql.TypeTinyBlob, mysql.TypeTinyBlob,
// mysql.TypeDatetime mysql.TypeYear
mysql.TypeTinyBlob, mysql.TypeTinyBlob,
// mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeTinyBlob, mysql.TypeTinyBlob,
// mysql.TypeBit <16>-<244>
mysql.TypeTinyBlob,
// mysql.TypeJSON
mysql.TypeLongBlob,
// mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeTinyBlob, mysql.TypeTinyBlob,
// mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeTinyBlob, mysql.TypeTinyBlob,
// mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
// mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeTinyBlob,
// mysql.TypeString mysql.TypeGeometry
mysql.TypeTinyBlob, mysql.TypeTinyBlob,
// mysql.TypeTiDBVectorFloat32
mysql.TypeLongBlob,
},
/* mysql.TypeMediumBlob -> */
{
// mysql.TypeUnspecified mysql.TypeTiny
mysql.TypeMediumBlob, mysql.TypeMediumBlob,
// mysql.TypeShort mysql.TypeLong
mysql.TypeMediumBlob, mysql.TypeMediumBlob,
// mysql.TypeFloat mysql.TypeDouble
mysql.TypeMediumBlob, mysql.TypeMediumBlob,
// mysql.TypeNull mysql.TypeTimestamp
mysql.TypeMediumBlob, mysql.TypeMediumBlob,
// mysql.TypeLonglong mysql.TypeInt24
mysql.TypeMediumBlob, mysql.TypeMediumBlob,
// mysql.TypeDate mysql.TypeTime
mysql.TypeMediumBlob, mysql.TypeMediumBlob,
// mysql.TypeDatetime mysql.TypeYear
mysql.TypeMediumBlob, mysql.TypeMediumBlob,
// mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeMediumBlob, mysql.TypeMediumBlob,
// mysql.TypeBit <16>-<244>
mysql.TypeMediumBlob,
// mysql.TypeJSON
mysql.TypeLongBlob,
// mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeMediumBlob, mysql.TypeMediumBlob,
// mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeMediumBlob, mysql.TypeMediumBlob,
// mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
// mysql.TypeBlob mysql.TypeVarString
mysql.TypeMediumBlob, mysql.TypeMediumBlob,
// mysql.TypeString mysql.TypeGeometry
mysql.TypeMediumBlob, mysql.TypeMediumBlob,
// mysql.TypeTiDBVectorFloat32
mysql.TypeLongBlob,
},
/* mysql.TypeLongBlob -> */
{
// mysql.TypeUnspecified mysql.TypeTiny
mysql.TypeLongBlob, mysql.TypeLongBlob,
// mysql.TypeShort mysql.TypeLong
mysql.TypeLongBlob, mysql.TypeLongBlob,
// mysql.TypeFloat mysql.TypeDouble
mysql.TypeLongBlob, mysql.TypeLongBlob,
// mysql.TypeNull mysql.TypeTimestamp
mysql.TypeLongBlob, mysql.TypeLongBlob,
// mysql.TypeLonglong mysql.TypeInt24
mysql.TypeLongBlob, mysql.TypeLongBlob,
// mysql.TypeDate mysql.TypeTime
mysql.TypeLongBlob, mysql.TypeLongBlob,
// mysql.TypeDatetime mysql.TypeYear
mysql.TypeLongBlob, mysql.TypeLongBlob,
// mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeLongBlob, mysql.TypeLongBlob,
// mysql.TypeBit <16>-<244>
mysql.TypeLongBlob,
// mysql.TypeJSON
mysql.TypeLongBlob,
// mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeLongBlob, mysql.TypeLongBlob,
// mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeLongBlob, mysql.TypeLongBlob,
// mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeLongBlob, mysql.TypeLongBlob,
// mysql.TypeBlob mysql.TypeVarString
mysql.TypeLongBlob, mysql.TypeLongBlob,
// mysql.TypeString mysql.TypeGeometry
mysql.TypeLongBlob, mysql.TypeLongBlob,
// mysql.TypeTiDBVectorFloat32
mysql.TypeLongBlob,
},
/* mysql.TypeBlob -> */
{
// mysql.TypeUnspecified mysql.TypeTiny
mysql.TypeBlob, mysql.TypeBlob,
// mysql.TypeShort mysql.TypeLong
mysql.TypeBlob, mysql.TypeBlob,
// mysql.TypeFloat mysql.TypeDouble
mysql.TypeBlob, mysql.TypeBlob,
// mysql.TypeNull mysql.TypeTimestamp
mysql.TypeBlob, mysql.TypeBlob,
// mysql.TypeLonglong mysql.TypeInt24
mysql.TypeBlob, mysql.TypeBlob,
// mysql.TypeDate mysql.TypeTime
mysql.TypeBlob, mysql.TypeBlob,
// mysql.TypeDatetime mysql.TypeYear
mysql.TypeBlob, mysql.TypeBlob,
// mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeBlob, mysql.TypeBlob,
// mysql.TypeBit <16>-<244>
mysql.TypeBlob,
// mysql.TypeJSON
mysql.TypeLongBlob,
// mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeBlob, mysql.TypeBlob,
// mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeBlob, mysql.TypeBlob,
// mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
// mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeBlob,
// mysql.TypeString mysql.TypeGeometry
mysql.TypeBlob, mysql.TypeBlob,
// mysql.TypeTiDBVectorFloat32
mysql.TypeLongBlob,
},
/* mysql.TypeVarString -> */
{
// mysql.TypeUnspecified mysql.TypeTiny
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeShort mysql.TypeLong
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeFloat mysql.TypeDouble
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeNull mysql.TypeTimestamp
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeLonglong mysql.TypeInt24
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeDate mysql.TypeTime
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeDatetime mysql.TypeYear
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
// mysql.TypeJSON
mysql.TypeVarchar,
// mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
// mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
// mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
// mysql.TypeString mysql.TypeGeometry
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeTiDBVectorFloat32
mysql.TypeVarchar,
},
/* mysql.TypeString -> */
{
// mysql.TypeUnspecified mysql.TypeTiny
mysql.TypeString, mysql.TypeString,
// mysql.TypeShort mysql.TypeLong
mysql.TypeString, mysql.TypeString,
// mysql.TypeFloat mysql.TypeDouble
mysql.TypeString, mysql.TypeString,
// mysql.TypeNull mysql.TypeTimestamp
mysql.TypeString, mysql.TypeString,
// mysql.TypeLonglong mysql.TypeInt24
mysql.TypeString, mysql.TypeString,
// mysql.TypeDate mysql.TypeTime
mysql.TypeString, mysql.TypeString,
// mysql.TypeDatetime mysql.TypeYear
mysql.TypeString, mysql.TypeString,
// mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeString, mysql.TypeVarchar,
// mysql.TypeBit <16>-<244>
mysql.TypeString,
// mysql.TypeJSON
mysql.TypeString,
// mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeString, mysql.TypeString,
// mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeString, mysql.TypeTinyBlob,
// mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
// mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
// mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeString,
// mysql.TypeTiDBVectorFloat32
mysql.TypeString,
},
/* mysql.TypeGeometry -> */
{
// mysql.TypeUnspecified mysql.TypeTiny
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeShort mysql.TypeLong
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeFloat mysql.TypeDouble
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeNull mysql.TypeTimestamp
mysql.TypeGeometry, mysql.TypeVarchar,
// mysql.TypeLonglong mysql.TypeInt24
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeDate mysql.TypeTime
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeDatetime mysql.TypeYear
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
// mysql.TypeJSON
mysql.TypeVarchar,
// mysql.TypeNewDecimal mysql.TypeEnum
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeTinyBlob,
// mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeMediumBlob, mysql.TypeLongBlob,
// mysql.TypeBlob mysql.TypeVarString
mysql.TypeBlob, mysql.TypeVarchar,
// mysql.TypeString mysql.TypeGeometry
mysql.TypeString, mysql.TypeGeometry,
// mysql.TypeTiDBVectorFloat32
mysql.TypeVarchar,
},
/* mysql.TypeTiDBVectorFloat32 -> */
{
// mysql.TypeUnspecified mysql.TypeTiny
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeShort mysql.TypeLong
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeNewFloat mysql.TypeDouble
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeNull mysql.TypeTimestamp
mysql.TypeTiDBVectorFloat32, mysql.TypeVarchar,
// mysql.TypeLongLONG mysql.TypeInt24
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeDate MYSQL_TYPE_TIME
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeDatetime MYSQL_TYPE_YEAR
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeNewDate mysql.TypeVarchar
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeBit <16>-<244>
mysql.TypeVarchar,
// mysql.TypeJSON
mysql.TypeVarchar,
// mysql.TypeNewDecimal MYSQL_TYPE_ENUM
mysql.TypeVarchar, mysql.TypeVarchar,
// mysql.TypeSet mysql.TypeTinyBlob
mysql.TypeVarchar, mysql.TypeLongBlob,
// mysql.TypeMediumBlob mysql.TypeLongBlob
mysql.TypeLongBlob, mysql.TypeLongBlob,
// mysql.TypeBlob mysql.TypeVarString
mysql.TypeLongBlob, mysql.TypeVarchar,
// mysql.TypeString MYSQL_TYPE_GEOMETRY
mysql.TypeString, mysql.TypeVarchar,
// mysql.TypeTiDBVectorFloat32
mysql.TypeTiDBVectorFloat32,
},
}
// SetBinChsClnFlag sets charset, collation as 'binary' and adds binaryFlag to FieldType.
func SetBinChsClnFlag(ft *FieldType) {
ft.SetCharset(charset.CharsetBin)
ft.SetCollate(charset.CollationBin)
ft.AddFlag(mysql.BinaryFlag)
}
// VarStorageLen indicates this column is a variable length column.
const VarStorageLen = ast.VarStorageLen
// CheckModifyTypeCompatible checks whether changes column type to another is compatible and can be changed.
// If types are compatible and can be directly changed, nil err will be returned; otherwise the types are incompatible.
// There are two cases when types incompatible:
// 1. returned canReorg == true: types can be changed by reorg
// 2. returned canReorg == false: type change not supported yet
func CheckModifyTypeCompatible(origin *FieldType, to *FieldType) (canReorg bool, err error) {
// Deal with the same type.
if origin.GetType() == to.GetType() {
if origin.GetType() == mysql.TypeEnum || origin.GetType() == mysql.TypeSet {
typeVar := "set"
if origin.GetType() == mysql.TypeEnum {
typeVar = "enum"
}
if len(to.GetElems()) < len(origin.GetElems()) {
msg := fmt.Sprintf("the number of %s column's elements is less than the original: %d", typeVar, len(origin.GetElems()))
return true, dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs(msg)
}
for index, originElem := range origin.GetElems() {
toElem := to.GetElems()[index]
if originElem != toElem {
msg := fmt.Sprintf("cannot modify %s column value %s to %s", typeVar, originElem, toElem)
return true, dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs(msg)
}
}
}
if origin.GetType() == mysql.TypeNewDecimal {
// Floating-point and fixed-point types also can be UNSIGNED. As with integer types, this attribute prevents
// negative values from being stored in the column. Unlike the integer types, the upper range of column values
// remains the same.
if to.GetFlen() != origin.GetFlen() || to.GetDecimal() != origin.GetDecimal() || mysql.HasUnsignedFlag(to.GetFlag()) != mysql.HasUnsignedFlag(origin.GetFlag()) {
msg := fmt.Sprintf("decimal change from decimal(%d, %d) to decimal(%d, %d)", origin.GetFlen(), origin.GetDecimal(), to.GetFlen(), to.GetDecimal())
return true, dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs(msg)
}
}
needReorg, reason := needReorgToChange(origin, to)
if !needReorg {
return false, nil
}
return true, dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs(reason)
}
// Deal with the different type.
if !checkTypeChangeSupported(origin, to) {
unsupportedMsg := fmt.Sprintf("change from original type %v to %v is currently unsupported yet", origin.CompactStr(), to.CompactStr())
return false, dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs(unsupportedMsg)
}
// Check if different type can directly convert and no need to reorg.
stringToString := IsString(origin.GetType()) && IsString(to.GetType())
integerToInteger := mysql.IsIntegerType(origin.GetType()) && mysql.IsIntegerType(to.GetType())
if stringToString || integerToInteger {
needReorg, reason := needReorgToChange(origin, to)
if !needReorg {
return false, nil
}
return true, dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs(reason)
}
notCompatibleMsg := fmt.Sprintf("type %v not match origin %v", to.CompactStr(), origin.CompactStr())
return true, dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs(notCompatibleMsg)
}
func needReorgToChange(origin *FieldType, to *FieldType) (needReorg bool, reasonMsg string) {
toFlen := to.GetFlen()
originFlen := origin.GetFlen()
if mysql.IsIntegerType(to.GetType()) && mysql.IsIntegerType(origin.GetType()) {
// For integers, we should ignore the potential display length represented by flen, using
// the default flen of the type.
originFlen, _ = mysql.GetDefaultFieldLengthAndDecimal(origin.GetType())
toFlen, _ = mysql.GetDefaultFieldLengthAndDecimal(to.GetType())
}
if ConvertBetweenCharAndVarchar(origin.GetType(), to.GetType()) {
return true, "conversion between char and varchar string needs reorganization"
}
if toFlen > 0 && toFlen != originFlen {
if toFlen < originFlen {
return true, fmt.Sprintf("length %d is less than origin %d", toFlen, originFlen)
}
// Due to the behavior of padding \x00 at binary type, we need to reorg when binary length changed
isBinaryType := func(tp *FieldType) bool { return tp.GetType() == mysql.TypeString && IsBinaryStr(tp) }
if isBinaryType(origin) && isBinaryType(to) {
return true, "can't change binary types of different length"
}
}
if to.GetDecimal() > 0 && to.GetDecimal() < origin.GetDecimal() {
return true, fmt.Sprintf("decimal %d is less than origin %d", to.GetDecimal(), origin.GetDecimal())
}
if mysql.HasUnsignedFlag(origin.GetFlag()) != mysql.HasUnsignedFlag(to.GetFlag()) {
return true, "can't change unsigned integer to signed or vice versa"
}
return false, ""
}
func checkTypeChangeSupported(origin *FieldType, to *FieldType) bool {
if (IsTypeTime(origin.GetType()) || origin.GetType() == mysql.TypeDuration || origin.GetType() == mysql.TypeYear ||
IsString(origin.GetType()) || origin.GetType() == mysql.TypeJSON) &&
to.GetType() == mysql.TypeBit {
// TODO: Currently date/datetime/timestamp/time/year/string/json data type cast to bit are not compatible with mysql, should fix here after compatible.
return false
}
if (IsTypeTime(origin.GetType()) || origin.GetType() == mysql.TypeDuration || origin.GetType() == mysql.TypeYear ||
origin.GetType() == mysql.TypeNewDecimal || origin.GetType() == mysql.TypeFloat || origin.GetType() == mysql.TypeDouble || origin.GetType() == mysql.TypeJSON || origin.GetType() == mysql.TypeBit) &&
(to.GetType() == mysql.TypeEnum || to.GetType() == mysql.TypeSet) {
// TODO: Currently date/datetime/timestamp/time/year/decimal/float/double/json/bit cast to enum/set are not support yet, should fix here after supported.
return false
}
if (origin.GetType() == mysql.TypeEnum || origin.GetType() == mysql.TypeSet || origin.GetType() == mysql.TypeBit ||
origin.GetType() == mysql.TypeNewDecimal || origin.GetType() == mysql.TypeFloat || origin.GetType() == mysql.TypeDouble) &&
(IsTypeTime(to.GetType())) {
// TODO: Currently enum/set/bit/decimal/float/double cast to date/datetime/timestamp type are not support yet, should fix here after supported.
return false
}
if origin.GetType() == mysql.TypeTiDBVectorFloat32 || to.GetType() == mysql.TypeTiDBVectorFloat32 {
// TODO: Vector type not supported.
return false
}
if (origin.GetType() == mysql.TypeEnum || origin.GetType() == mysql.TypeSet || origin.GetType() == mysql.TypeBit) &&
to.GetType() == mysql.TypeDuration {
// TODO: Currently enum/set/bit cast to time are not support yet, should fix here after supported.
return false
}
return true
}
// ConvertBetweenCharAndVarchar is that Column type conversion between varchar to char need reorganization because
// 1. varchar -> char: char type is stored with the padding removed. All the indexes need to be rewritten.
// 2. char -> varchar: the index value encoding of secondary index on clustered primary key tables is different.
// These secondary indexes need to be rewritten.
func ConvertBetweenCharAndVarchar(oldCol, newCol byte) bool {
return (IsTypeVarchar(oldCol) && newCol == mysql.TypeString) ||
(oldCol == mysql.TypeString && IsTypeVarchar(newCol) && collate.NewCollationEnabled())
}
// IsVarcharTooBigFieldLength check if the varchar type column exceeds the maximum length limit.
func IsVarcharTooBigFieldLength(colDefTpFlen int, colDefName, setCharset string) error {
desc, err := charset.GetCharsetInfo(setCharset)
if err != nil {
return errors.Trace(err)
}
maxFlen := mysql.MaxFieldVarCharLength
maxFlen /= desc.Maxlen
if colDefTpFlen != UnspecifiedLength && colDefTpFlen > maxFlen {
return ErrTooBigFieldLength.GenWithStack("Column length too big for column '%s' (max = %d); use BLOB or TEXT instead", colDefName, maxFlen)
}
return nil
}
// Copyright 2022 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package types
// FieldTypeBuilder constructor
type FieldTypeBuilder struct {
ft FieldType
}
// NewFieldTypeBuilder will allocate the builder on the heap.
func NewFieldTypeBuilder() *FieldTypeBuilder {
return &FieldTypeBuilder{}
}
// GetType returns type of the ft
func (b *FieldTypeBuilder) GetType() byte {
return b.ft.GetType()
}
// GetFlag returns flag of the ft
func (b *FieldTypeBuilder) GetFlag() uint {
return b.ft.GetFlag()
}
// GetFlen returns length of the ft
func (b *FieldTypeBuilder) GetFlen() int {
return b.ft.GetFlen()
}
// GetDecimal returns decimals of the ft
func (b *FieldTypeBuilder) GetDecimal() int {
return b.ft.GetDecimal()
}
// GetCharset returns charset of the ft
func (b *FieldTypeBuilder) GetCharset() string {
return b.ft.GetCharset()
}
// GetCollate returns collation of the ft
func (b *FieldTypeBuilder) GetCollate() string {
return b.ft.GetCollate()
}
// SetType sets type of the ft
func (b *FieldTypeBuilder) SetType(tp byte) *FieldTypeBuilder {
b.ft.SetType(tp)
return b
}
// SetFlag sets flag of the ft
func (b *FieldTypeBuilder) SetFlag(flag uint) *FieldTypeBuilder {
b.ft.SetFlag(flag)
return b
}
// AddFlag adds flag to the ft
func (b *FieldTypeBuilder) AddFlag(flag uint) *FieldTypeBuilder {
b.ft.AddFlag(flag)
return b
}
// ToggleFlag toggles flag of the ft
func (b *FieldTypeBuilder) ToggleFlag(flag uint) *FieldTypeBuilder {
b.ft.ToggleFlag(flag)
return b
}
// DelFlag deletes flag of the ft
func (b *FieldTypeBuilder) DelFlag(flag uint) *FieldTypeBuilder {
b.ft.DelFlag(flag)
return b
}
// SetFlen sets length of the ft
func (b *FieldTypeBuilder) SetFlen(flen int) *FieldTypeBuilder {
b.ft.SetFlen(flen)
return b
}
// SetDecimal sets decimal of the ft
func (b *FieldTypeBuilder) SetDecimal(decimal int) *FieldTypeBuilder {
b.ft.SetDecimal(decimal)
return b
}
// SetCharset sets charset of the ft
func (b *FieldTypeBuilder) SetCharset(charset string) *FieldTypeBuilder {
b.ft.SetCharset(charset)
return b
}
// SetCollate sets collation of the ft
func (b *FieldTypeBuilder) SetCollate(collate string) *FieldTypeBuilder {
b.ft.SetCollate(collate)
return b
}
// SetElems sets elements of the ft
func (b *FieldTypeBuilder) SetElems(elems []string) *FieldTypeBuilder {
b.ft.SetElems(elems)
return b
}
// SetArray sets array of the ft
func (b *FieldTypeBuilder) SetArray(x bool) *FieldTypeBuilder {
b.ft.SetArray(x)
return b
}
// Build returns the ft
func (b *FieldTypeBuilder) Build() FieldType {
return b.ft
}
// BuildP returns pointer of the ft
func (b *FieldTypeBuilder) BuildP() *FieldType {
return &b.ft
}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package types
import (
"math"
"strconv"
"strings"
"github.com/pingcap/errors"
)
const (
// UnspecifiedFsp is the unspecified fractional seconds part.
UnspecifiedFsp = -1
// MaxFsp is the maximum digit of fractional seconds part.
MaxFsp = 6
// MinFsp is the minimum digit of fractional seconds part.
MinFsp = 0
// DefaultFsp is the default digit of fractional seconds part.
// MySQL use 0 as the default Fsp.
DefaultFsp = 0
)
// CheckFsp checks whether fsp is in valid range.
func CheckFsp(fsp int) (int, error) {
if fsp == UnspecifiedFsp {
return DefaultFsp, nil
}
if fsp < MinFsp {
return DefaultFsp, errors.Errorf("Invalid fsp %d", fsp)
} else if fsp > MaxFsp {
return MaxFsp, nil
}
return fsp, nil
}
// ParseFrac parses the input string according to fsp, returns the microsecond,
// and also a bool value to indice overflow. eg:
// "999" fsp=2 will overflow.
func ParseFrac(s string, fsp int) (v int, overflow bool, err error) {
if len(s) == 0 {
return 0, false, nil
}
fsp, err = CheckFsp(fsp)
if err != nil {
return 0, false, errors.Trace(err)
}
if fsp >= len(s) {
tmp, e := strconv.ParseInt(s, 10, 64)
if e != nil {
return 0, false, errors.Trace(e)
}
v = int(float64(tmp) * math.Pow10(MaxFsp-len(s)))
return
}
// Round when fsp < string length.
tmp, e := strconv.ParseInt(s[:fsp+1], 10, 64)
if e != nil {
return 0, false, errors.Trace(e)
}
tmp = (tmp + 5) / 10
if float64(tmp) >= math.Pow10(fsp) {
// overflow
return 0, true, nil
}
// Get the final frac, with 6 digit number
// 1236 round 3 -> 124 -> 124000
// 0312 round 2 -> 3 -> 30000
// 999 round 2 -> 100 -> overflow
v = int(float64(tmp) * math.Pow10(MaxFsp-fsp))
return
}
// alignFrac is used to generate alignment frac, like `100` -> `100000` ,`-100` -> `-100000`
func alignFrac(s string, fsp int) string {
sl := len(s)
if sl > 0 && s[0] == '-' {
sl = sl - 1
}
if sl < fsp {
return s + strings.Repeat("0", fsp-sl)
}
return s
}
// Copyright 2022 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
package types
// FuzzMarshalJSON implements the fuzzer
func FuzzUnmarshalJSON(data []byte) int {
bj := new(BinaryJSON)
bj.UnmarshalJSON(data)
return 1
}
// Copyright 2022 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
package types
// FuzzNewBitLiteral implements the fuzzer
func FuzzNewBitLiteral(data []byte) int {
_, err := NewBitLiteral(string(data))
if err != nil {
return 0
}
return 1
}
// Copyright 2022 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
package types
// FuzzNewHexLiteral implements the fuzzer
func FuzzNewHexLiteral(data []byte) int {
_, err := NewHexLiteral(string(data))
if err != nil {
return 0
}
return 1
}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package types
import (
"math"
"strconv"
"strings"
"unicode"
"github.com/pingcap/errors"
)
// RoundFloat rounds float val to the nearest even integer value with float64 format, like MySQL Round function.
// RoundFloat uses default rounding mode, see https://dev.mysql.com/doc/refman/5.7/en/precision-math-rounding.html
// so rounding use "round to nearest even".
// e.g, 1.5 -> 2, -1.5 -> -2.
func RoundFloat(f float64) float64 {
return math.RoundToEven(f)
}
// Round rounds the argument f to dec decimal places.
// dec defaults to 0 if not specified. dec can be negative
// to cause dec digits left of the decimal point of the
// value f to become zero.
func Round(f float64, dec int) float64 {
shift := math.Pow10(dec)
tmp := f * shift
if math.IsInf(tmp, 0) {
return f
}
result := RoundFloat(tmp) / shift
if math.IsNaN(result) {
return 0
}
return result
}
// Truncate truncates the argument f to dec decimal places.
// dec defaults to 0 if not specified. dec can be negative
// to cause dec digits left of the decimal point of the
// value f to become zero.
func Truncate(f float64, dec int) float64 {
shift := math.Pow10(dec)
tmp := f * shift
// When dec is larger than 308, the shift will be inf.
// At the same time, if f is 0, tmp will be NaN.
if math.IsInf(tmp, 0) || math.IsNaN(tmp) {
return f
}
if shift == 0.0 {
if math.IsNaN(f) {
return f
}
return 0.0
}
return math.Trunc(tmp) / shift
}
// GetMaxFloat gets the max float for given flen and decimal.
func GetMaxFloat(flen int, decimal int) float64 {
intPartLen := flen - decimal
f := math.Pow10(intPartLen)
f -= math.Pow10(-decimal)
return f
}
// TruncateFloat tries to truncate f.
// If the result exceeds the max/min float that flen/decimal allowed, returns the max/min float allowed.
func TruncateFloat(f float64, flen int, decimal int) (float64, error) {
if math.IsNaN(f) {
// nan returns 0
return 0, ErrOverflow.GenWithStackByArgs("DOUBLE", "")
}
maxF := GetMaxFloat(flen, decimal)
if !math.IsInf(f, 0) {
f = Round(f, decimal)
}
var err error
if f > maxF {
f = maxF
err = ErrOverflow.GenWithStackByArgs("DOUBLE", "")
} else if f < -maxF {
f = -maxF
err = ErrOverflow.GenWithStackByArgs("DOUBLE", "")
}
return f, errors.Trace(err)
}
// TruncateFloatToString is used to truncate float to string where dec is the number of digits after the decimal point.
func TruncateFloatToString(f float64, dec int) string {
f = Truncate(f, dec)
return strconv.FormatFloat(f, 'f', -1, 64)
}
func isSpace(c byte) bool {
return c == ' ' || c == '\t'
}
func isDigit(c byte) bool {
return c >= '0' && c <= '9'
}
// Returns true if the given byte is an ASCII punctuation character (printable and non-alphanumeric).
func isPunctuation(c byte) bool {
return (c >= 0x21 && c <= 0x2F) || (c >= 0x3A && c <= 0x40) || (c >= 0x5B && c <= 0x60) || (c >= 0x7B && c <= 0x7E)
}
const (
maxUint = uint64(math.MaxUint64)
uintCutOff = maxUint/uint64(10) + 1
intCutOff = uint64(math.MaxInt64) + 1
)
// strToInt converts a string to an integer in best effort.
func strToInt(str string) (int64, error) {
str = strings.TrimSpace(str)
if len(str) == 0 {
return 0, ErrTruncated
}
negative := false
i := 0
if str[i] == '-' {
negative = true
i++
} else if str[i] == '+' {
i++
}
var (
err error
hasNum = false
)
r := uint64(0)
for ; i < len(str); i++ {
if !unicode.IsDigit(rune(str[i])) {
err = ErrTruncated
break
}
hasNum = true
if r >= uintCutOff {
r = 0
err = errors.Trace(ErrBadNumber)
break
}
r = r * uint64(10)
r1 := r + uint64(str[i]-'0')
if r1 < r || r1 > maxUint {
r = 0
err = errors.Trace(ErrBadNumber)
break
}
r = r1
}
if !hasNum {
err = ErrTruncated
}
if !negative && r >= intCutOff {
return math.MaxInt64, errors.Trace(ErrBadNumber)
}
if negative && r > intCutOff {
return math.MinInt64, errors.Trace(ErrBadNumber)
}
if negative {
r = -r
}
return int64(r), err
}
// DecimalLength2Precision gets the precision.
func DecimalLength2Precision(length int, scale int, hasUnsignedFlag bool) int {
if scale > 0 {
length--
}
if hasUnsignedFlag || length > 0 {
length--
}
return length
}
// Precision2LengthNoTruncation gets the length.
func Precision2LengthNoTruncation(length int, scale int, hasUnsignedFlag bool) int {
if scale > 0 {
length++
}
if hasUnsignedFlag || length > 0 {
length++
}
return length
}
// Copyright 2017 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package types
import (
"bytes"
"cmp"
"encoding/base64"
"encoding/binary"
"encoding/json"
"fmt"
"math"
"math/bits"
"reflect"
"slices"
"strconv"
"strings"
"time"
"unicode/utf8"
"unsafe"
"github.com/pingcap/errors"
"github.com/pingcap/tidb/pkg/parser/mysql"
"github.com/pingcap/tidb/pkg/parser/terror"
"github.com/pingcap/tidb/pkg/util/hack"
"github.com/pingcap/tidb/pkg/util/logutil"
"github.com/pingcap/tidb/pkg/util/size"
"go.uber.org/zap"
)
/*
The binary JSON format from MySQL 5.7 is as follows:
JSON doc ::= type value
type ::=
0x01 | // large JSON object
0x03 | // large JSON array
0x04 | // literal (true/false/null)
0x05 | // int16
0x06 | // uint16
0x07 | // int32
0x08 | // uint32
0x09 | // int64
0x0a | // uint64
0x0b | // double
0x0c | // utf8mb4 string
0x0d | // opaque value
0x0e | // date
0x0f | // datetime
0x10 | // timestamp
0x11 | // time
value ::=
object |
array |
literal |
number |
string |
opaque |
time |
duration |
object ::= element-count size key-entry* value-entry* key* value*
array ::= element-count size value-entry* value*
// number of members in object or number of elements in array
element-count ::= uint32
// number of bytes in the binary representation of the object or array
size ::= uint32
key-entry ::= key-offset key-length
key-offset ::= uint32
key-length ::= uint16 // key length must be less than 64KB
value-entry ::= type offset-or-inlined-value
// This field holds either the offset to where the value is stored,
// or the value itself if it is small enough to be inlined (that is,
// if it is a JSON literal or a small enough [u]int).
offset-or-inlined-value ::= uint32
key ::= utf8mb4-data
literal ::=
0x00 | // JSON null literal
0x01 | // JSON true literal
0x02 | // JSON false literal
number ::= .... // little-endian format for [u]int(16|32|64), whereas
// double is stored in a platform-independent, eight-byte
// format using float8store()
string ::= data-length utf8mb4-data
data-length ::= uint8* // If the high bit of a byte is 1, the length
// field is continued in the next byte,
// otherwise it is the last byte of the length
// field. So we need 1 byte to represent
// lengths up to 127, 2 bytes to represent
// lengths up to 16383, and so on...
opaque ::= typeId data-length byte*
time ::= uint64
duration ::= uint64 uint32
typeId ::= byte
*/
var jsonZero = CreateBinaryJSON(uint64(0))
const maxJSONDepth = 100
// BinaryJSON represents a binary encoded JSON object.
// It can be randomly accessed without deserialization.
type BinaryJSON struct {
TypeCode JSONTypeCode
Value []byte
}
// String implements fmt.Stringer interface.
func (bj BinaryJSON) String() string {
out, err := bj.MarshalJSON()
terror.Log(err)
return string(out)
}
// Copy makes a copy of the BinaryJSON
func (bj BinaryJSON) Copy() BinaryJSON {
buf := make([]byte, len(bj.Value))
copy(buf, bj.Value)
return BinaryJSON{TypeCode: bj.TypeCode, Value: buf}
}
// MarshalJSON implements the json.Marshaler interface.
func (bj BinaryJSON) MarshalJSON() ([]byte, error) {
buf := make([]byte, 0, len(bj.Value)*3/2)
return bj.marshalTo(buf)
}
func (bj BinaryJSON) marshalTo(buf []byte) ([]byte, error) {
switch bj.TypeCode {
case JSONTypeCodeOpaque:
return jsonMarshalOpaqueTo(buf, bj.GetOpaque()), nil
case JSONTypeCodeString:
return jsonMarshalStringTo(buf, bj.GetString()), nil
case JSONTypeCodeLiteral:
return jsonMarshalLiteralTo(buf, bj.Value[0]), nil
case JSONTypeCodeInt64:
return strconv.AppendInt(buf, bj.GetInt64(), 10), nil
case JSONTypeCodeUint64:
return strconv.AppendUint(buf, bj.GetUint64(), 10), nil
case JSONTypeCodeFloat64:
return bj.marshalFloat64To(buf)
case JSONTypeCodeArray:
return bj.marshalArrayTo(buf)
case JSONTypeCodeObject:
return bj.marshalObjTo(buf)
case JSONTypeCodeDate, JSONTypeCodeDatetime, JSONTypeCodeTimestamp:
return jsonMarshalTimeTo(buf, bj.GetTime()), nil
case JSONTypeCodeDuration:
return jsonMarshalDurationTo(buf, bj.GetDuration()), nil
}
return buf, nil
}
// IsZero return a boolean indicate whether BinaryJSON is Zero
func (bj BinaryJSON) IsZero() bool {
// This behavior is different on MySQL 5.7 and 8.0
//
// In MySQL 5.7, most of these non-integer values are 0, and return a warning:
// "Invalid JSON value for CAST to INTEGER from column j"
//
// In MySQL 8, most of these non-integer values are not zero, with a warning:
// > "Evaluating a JSON value in SQL boolean context does an implicit comparison
// > against JSON integer 0; if this is not what you want, consider converting
// > JSON to a SQL numeric type with JSON_VALUE RETURNING"
//
// TODO: return a warning as MySQL 8 does
return CompareBinaryJSON(bj, jsonZero) == 0
}
// GetInt64 gets the int64 value.
func (bj BinaryJSON) GetInt64() int64 {
return int64(jsonEndian.Uint64(bj.Value))
}
// GetUint64 gets the uint64 value.
func (bj BinaryJSON) GetUint64() uint64 {
return jsonEndian.Uint64(bj.Value)
}
// GetFloat64 gets the float64 value.
func (bj BinaryJSON) GetFloat64() float64 {
return math.Float64frombits(bj.GetUint64())
}
// GetString gets the string value.
func (bj BinaryJSON) GetString() []byte {
strLen, lenLen := binary.Uvarint(bj.Value)
return bj.Value[lenLen : lenLen+int(strLen)]
}
// Opaque represents a raw binary type
type Opaque struct {
// TypeCode is the same with database type code
TypeCode byte
// Buf is the underlying bytes of the data
Buf []byte
}
// GetOpaque gets the opaque value
func (bj BinaryJSON) GetOpaque() Opaque {
typ := bj.Value[0]
strLen, lenLen := binary.Uvarint(bj.Value[1:])
bufStart := lenLen + 1
return Opaque{
TypeCode: typ,
Buf: bj.Value[bufStart : bufStart+int(strLen)],
}
}
// GetTime gets the time value with default fsp
//
// Deprecated: use GetTimeWithFsp instead. The `BinaryJSON` doesn't contain the fsp information, so the caller
// should always provide the fsp.
func (bj BinaryJSON) GetTime() Time {
return bj.GetTimeWithFsp(DefaultFsp)
}
// GetTimeWithFsp gets the time value with given fsp
func (bj BinaryJSON) GetTimeWithFsp(fsp int) Time {
coreTime := CoreTime(bj.GetUint64())
tp := mysql.TypeDate
if bj.TypeCode == JSONTypeCodeDatetime {
tp = mysql.TypeDatetime
} else if bj.TypeCode == JSONTypeCodeTimestamp {
tp = mysql.TypeTimestamp
}
return NewTime(coreTime, tp, fsp)
}
// GetDuration gets the duration value
func (bj BinaryJSON) GetDuration() Duration {
return Duration{
time.Duration(bj.GetInt64()),
int(jsonEndian.Uint32(bj.Value[8:])),
}
}
// GetOpaqueFieldType returns the type of opaque value
func (bj BinaryJSON) GetOpaqueFieldType() byte {
return bj.Value[0]
}
// GetKeys gets the keys of the object
func (bj BinaryJSON) GetKeys() BinaryJSON {
count := bj.GetElemCount()
ret := make([]BinaryJSON, 0, count)
for i := range count {
ret = append(ret, CreateBinaryJSON(string(bj.objectGetKey(i))))
}
return buildBinaryJSONArray(ret)
}
// GetElemCount gets the count of Object or Array.
func (bj BinaryJSON) GetElemCount() int {
return int(jsonEndian.Uint32(bj.Value))
}
// ArrayGetElem gets the element of the index `idx`.
func (bj BinaryJSON) ArrayGetElem(idx int) BinaryJSON {
return bj.valEntryGet(headerSize + idx*valEntrySize)
}
func (bj BinaryJSON) objectGetKey(i int) []byte {
keyOff := int(jsonEndian.Uint32(bj.Value[headerSize+i*keyEntrySize:]))
keyLen := int(jsonEndian.Uint16(bj.Value[headerSize+i*keyEntrySize+keyLenOff:]))
return bj.Value[keyOff : keyOff+keyLen]
}
func (bj BinaryJSON) objectGetVal(i int) BinaryJSON {
elemCount := bj.GetElemCount()
return bj.valEntryGet(headerSize + elemCount*keyEntrySize + i*valEntrySize)
}
func (bj BinaryJSON) valEntryGet(valEntryOff int) BinaryJSON {
tpCode := bj.Value[valEntryOff]
valOff := jsonEndian.Uint32(bj.Value[valEntryOff+valTypeSize:])
switch tpCode {
case JSONTypeCodeLiteral:
return BinaryJSON{TypeCode: JSONTypeCodeLiteral, Value: bj.Value[valEntryOff+valTypeSize : valEntryOff+valTypeSize+1]}
case JSONTypeCodeUint64, JSONTypeCodeInt64, JSONTypeCodeFloat64:
return BinaryJSON{TypeCode: tpCode, Value: bj.Value[valOff : valOff+8]}
case JSONTypeCodeString:
strLen, lenLen := binary.Uvarint(bj.Value[valOff:])
totalLen := uint32(lenLen) + uint32(strLen)
return BinaryJSON{TypeCode: tpCode, Value: bj.Value[valOff : valOff+totalLen]}
case JSONTypeCodeOpaque:
strLen, lenLen := binary.Uvarint(bj.Value[valOff+1:])
totalLen := 1 + uint32(lenLen) + uint32(strLen)
return BinaryJSON{TypeCode: tpCode, Value: bj.Value[valOff : valOff+totalLen]}
case JSONTypeCodeDate, JSONTypeCodeDatetime, JSONTypeCodeTimestamp:
return BinaryJSON{TypeCode: tpCode, Value: bj.Value[valOff : valOff+8]}
case JSONTypeCodeDuration:
return BinaryJSON{TypeCode: tpCode, Value: bj.Value[valOff : valOff+12]}
}
dataSize := jsonEndian.Uint32(bj.Value[valOff+dataSizeOff:])
return BinaryJSON{TypeCode: tpCode, Value: bj.Value[valOff : valOff+dataSize]}
}
func (bj BinaryJSON) marshalFloat64To(buf []byte) ([]byte, error) {
// NOTE: copied from Go standard library.
// TODO: this function is very similar to `util.AppendFormatFloat`, it'd be better to unify them.
// Now the `util.AppendFormatFloat` is an internal function of `server` package, and the `marshalFloat64To`
// handles the tailing `.0` specially, so they are not merged yet.
f := bj.GetFloat64()
if math.IsInf(f, 0) || math.IsNaN(f) {
return buf, &json.UnsupportedValueError{Str: strconv.FormatFloat(f, 'g', -1, 64)}
}
// Convert as if by ES6 number to string conversion.
// This matches most other JSON generators.
// See golang.org/issue/6384 and golang.org/issue/14135.
// Like fmt %g, but the exponent cutoffs are different
// and exponents themselves are not padded to two digits.
abs := math.Abs(f)
ffmt := byte('f')
// Note: Must use float32 comparisons for underlying float32 value to get precise cutoffs right.
if abs != 0 {
// The scientific notation range for MySQL is different from Go JSON. Ref `util.AppendFormatFloat`
if abs < 1e-15 || abs >= 1e15 {
ffmt = 'e'
}
}
floatPos := len(buf)
buf = strconv.AppendFloat(buf, f, ffmt, -1, 64)
floatBuf := buf[floatPos:]
if ffmt == 'e' {
// clean up e-09 to e-9
n := len(floatBuf)
if n >= 4 && buf[n-4] == 'e' && buf[n-3] == '-' && buf[n-2] == '0' {
buf[n-2] = buf[n-1]
buf = buf[:n-1]
}
// remove the leading '+' in the exponent
plusPos := bytes.IndexRune(floatBuf, '+')
if plusPos > 0 {
buf = slices.Delete(buf, floatPos+plusPos, floatPos+plusPos+1)
}
} else {
// keeps at least one digit even if `f` is an integer
// assuming that this `floatBuf` will not be too long, it's fine to scan it
// to find the dot
if !bytes.ContainsRune(floatBuf, '.') {
buf = append(buf, '.')
buf = append(buf, '0')
}
}
return buf, nil
}
func (bj BinaryJSON) marshalArrayTo(buf []byte) ([]byte, error) {
elemCount := int(jsonEndian.Uint32(bj.Value))
buf = append(buf, '[')
for i := range elemCount {
if i != 0 {
buf = append(buf, ", "...)
}
var err error
buf, err = bj.ArrayGetElem(i).marshalTo(buf)
if err != nil {
return nil, errors.Trace(err)
}
}
return append(buf, ']'), nil
}
func (bj BinaryJSON) marshalObjTo(buf []byte) ([]byte, error) {
elemCount := int(jsonEndian.Uint32(bj.Value))
buf = append(buf, '{')
for i := range elemCount {
if i != 0 {
buf = append(buf, ", "...)
}
buf = jsonMarshalStringTo(buf, bj.objectGetKey(i))
buf = append(buf, ": "...)
var err error
buf, err = bj.objectGetVal(i).marshalTo(buf)
if err != nil {
return nil, errors.Trace(err)
}
}
return append(buf, '}'), nil
}
func jsonMarshalStringTo(buf, s []byte) []byte {
// NOTE: copied from Go standard library.
// NOTE: keep in sync with string above.
buf = append(buf, '"')
start := 0
for i := 0; i < len(s); {
if b := s[i]; b < utf8.RuneSelf {
if jsonSafeSet[b] {
i++
continue
}
if start < i {
buf = append(buf, s[start:i]...)
}
switch b {
case '\\', '"':
buf = append(buf, '\\', b)
case '\n':
buf = append(buf, '\\', 'n')
case '\r':
buf = append(buf, '\\', 'r')
case '\t':
buf = append(buf, '\\', 't')
case '\b':
buf = append(buf, '\\', 'b')
case '\f':
buf = append(buf, '\\', 'f')
default:
// This encodes bytes < 0x20 except for \t, \n, \r, \b, \f.
// If escapeHTML is set, it also escapes <, >, and &
// because they can lead to security holes when
// user-controlled strings are rendered into JSON
// and served to some browsers.
buf = append(buf, `\u00`...)
buf = append(buf, jsonHexChars[b>>4], jsonHexChars[b&0xF])
}
i++
start = i
continue
}
c, size := utf8.DecodeRune(s[i:])
if c == utf8.RuneError && size == 1 {
if start < i {
buf = append(buf, s[start:i]...)
}
buf = append(buf, `\ufffd`...)
i += size
start = i
continue
}
// U+2028 is LINE SEPARATOR.
// U+2029 is PARAGRAPH SEPARATOR.
// They are both technically valid characters in JSON strings,
// but don't work in JSONP, which has to be evaluated as JavaScript,
// and can lead to security holes there. It is valid JSON to
// escape them, so we do so unconditionally.
// See http://timelessrepo.com/json-isnt-a-javascript-subset for discussion.
if c == '\u2028' || c == '\u2029' {
if start < i {
buf = append(buf, s[start:i]...)
}
buf = append(buf, `\u202`...)
buf = append(buf, jsonHexChars[c&0xF])
i += size
start = i
continue
}
i += size
}
if start < len(s) {
buf = append(buf, s[start:]...)
}
buf = append(buf, '"')
return buf
}
// opaque value will yield "base64:typeXX:<base64 encoded string>"
func jsonMarshalOpaqueTo(buf []byte, opaque Opaque) []byte {
b64 := base64.StdEncoding.EncodeToString(opaque.Buf)
output := fmt.Sprintf(`"base64:type%d:%s"`, opaque.TypeCode, b64)
// as the base64 string is simple and predictable, it could be appended
// to the buf directly.
buf = append(buf, output...)
return buf
}
func jsonMarshalLiteralTo(b []byte, litType byte) []byte {
switch litType {
case JSONLiteralFalse:
return append(b, "false"...)
case JSONLiteralTrue:
return append(b, "true"...)
case JSONLiteralNil:
return append(b, "null"...)
}
return b
}
func jsonMarshalTimeTo(buf []byte, time Time) []byte {
// printing json datetime/duration will always keep 6 fsp
time.SetFsp(6)
buf = append(buf, []byte(quoteJSONString(time.String()))...)
return buf
}
func jsonMarshalDurationTo(buf []byte, duration Duration) []byte {
// printing json datetime/duration will always keep 6 fsp
duration.Fsp = 6
buf = append(buf, []byte(quoteJSONString(duration.String()))...)
return buf
}
// ParseBinaryJSONFromString parses a json from string.
func ParseBinaryJSONFromString(s string) (bj BinaryJSON, err error) {
if len(s) == 0 {
err = ErrInvalidJSONText.GenWithStackByArgs("The document is empty")
return
}
data := hack.Slice(s)
if !json.Valid(data) {
err = ErrInvalidJSONText.GenWithStackByArgs("The document root must not be followed by other values.")
return
}
if err = bj.UnmarshalJSON(data); err != nil && !ErrJSONObjectKeyTooLong.Equal(err) && !ErrJSONDocumentTooDeep.Equal(err) {
err = ErrInvalidJSONText.GenWithStackByArgs(err)
}
return
}
// UnmarshalJSON implements the json.Unmarshaler interface.
func (bj *BinaryJSON) UnmarshalJSON(data []byte) error {
var decoder = json.NewDecoder(bytes.NewReader(data))
decoder.UseNumber()
var in any
err := decoder.Decode(&in)
if err != nil {
return errors.Trace(err)
}
newBj, err := CreateBinaryJSONWithCheck(in)
if err != nil {
return errors.Trace(err)
}
bj.TypeCode = newBj.TypeCode
bj.Value = newBj.Value
return nil
}
func getInt64FractionLength(i int64) int {
absInt := uint64(0)
if i < 0 {
absInt = uint64(-i)
} else {
absInt = uint64(i)
}
return getUint64FractionLength(absInt)
}
func getUint64FractionLength(i uint64) int {
lz := bits.LeadingZeros64(i)
tz := bits.TrailingZeros64(i)
// 64 bit removes the leading zero, removes the trailing zero and also removes the first "1".
fraction := 64 - lz - tz - 1
if lz == 64 && tz == 64 {
fraction = 0
}
return fraction
}
// CalculateHashValueSize calculate the size of hash value
func (bj BinaryJSON) CalculateHashValueSize() int64 {
switch bj.TypeCode {
case JSONTypeCodeInt64:
if getInt64FractionLength(bj.GetInt64()) <= 52 {
return int64(unsafe.Sizeof(JSONTypeCodeFloat64)) + 8
}
return int64(len(bj.Value)) + int64(unsafe.Sizeof(bj.TypeCode))
case JSONTypeCodeUint64:
if getUint64FractionLength(bj.GetUint64()) <= 52 {
return int64(unsafe.Sizeof(JSONTypeCodeFloat64)) + 8
}
return int64(len(bj.Value)) + int64(unsafe.Sizeof(bj.TypeCode))
case JSONTypeCodeArray:
size := int64(unsafe.Sizeof(bj.TypeCode)) + dataSizeOff
elemCount := int(jsonEndian.Uint32(bj.Value))
for i := range elemCount {
size += bj.ArrayGetElem(i).CalculateHashValueSize()
}
case JSONTypeCodeObject:
elemCount := int(jsonEndian.Uint32(bj.Value))
size := int64(unsafe.Sizeof(bj.TypeCode)) + dataSizeOff
for i := range elemCount {
size += CalculateBinaryJSONSize(string(bj.objectGetKey(i)))
size += bj.objectGetVal(i).CalculateHashValueSize()
}
}
return int64(len(bj.Value)) + int64(unsafe.Sizeof(bj.TypeCode))
}
// HashValue converts certain JSON values for aggregate comparisons.
// For example int64(3) == float64(3.0)
// Other than the numeric condition, this function has to construct a bidirectional map between hash value
// and the original representation
func (bj BinaryJSON) HashValue(buf []byte) []byte {
switch bj.TypeCode {
case JSONTypeCodeInt64:
// Convert to a FLOAT if no precision is lost.
// In the future, it will be better to convert to a DECIMAL value instead
// See: https://github.com/pingcap/tidb/issues/9988
// A double precision float can have 52-bit in fraction part.
if getInt64FractionLength(bj.GetInt64()) <= 52 {
buf = append(buf, JSONTypeCodeFloat64)
buf = appendBinaryFloat64(buf, float64(bj.GetInt64()))
} else {
buf = append(buf, bj.TypeCode)
buf = append(buf, bj.Value...)
}
case JSONTypeCodeUint64:
// A double precision float can have 52-bit in fraction part.
if getUint64FractionLength(bj.GetUint64()) <= 52 {
buf = append(buf, JSONTypeCodeFloat64)
buf = appendBinaryFloat64(buf, float64(bj.GetUint64()))
} else {
buf = append(buf, bj.TypeCode)
buf = append(buf, bj.Value...)
}
case JSONTypeCodeArray:
// this hash value is bidirectional, because you can get the element one-by-one
// and you know the end of it, as the elemCount is also appended here
buf = append(buf, bj.TypeCode)
elemCount := int(jsonEndian.Uint32(bj.Value))
buf = append(buf, bj.Value[0:dataSizeOff]...)
for i := range elemCount {
buf = bj.ArrayGetElem(i).HashValue(buf)
}
case JSONTypeCodeObject:
// this hash value is bidirectional, because you can get the key using the json
// string format, and get the value accordingly.
buf = append(buf, bj.TypeCode)
elemCount := int(jsonEndian.Uint32(bj.Value))
buf = append(buf, bj.Value[0:dataSizeOff]...)
for i := range elemCount {
keyJSON := CreateBinaryJSON(string(bj.objectGetKey(i)))
buf = append(buf, keyJSON.Value...)
buf = bj.objectGetVal(i).HashValue(buf)
}
default:
buf = append(buf, bj.TypeCode)
buf = append(buf, bj.Value...)
}
return buf
}
// GetValue return the primitive value of the JSON.
func (bj BinaryJSON) GetValue() any {
switch bj.TypeCode {
case JSONTypeCodeInt64:
return bj.GetInt64()
case JSONTypeCodeUint64:
return bj.GetUint64()
case JSONTypeCodeDuration:
return bj.GetDuration()
case JSONTypeCodeFloat64:
return bj.GetFloat64()
case JSONTypeCodeString:
return bj.GetString()
case JSONTypeCodeDate, JSONTypeCodeDatetime:
return bj.GetTime()
}
logutil.BgLogger().Error("unreachable JSON type", zap.Any("type", bj.TypeCode))
return nil
}
// CreateBinaryJSON creates a BinaryJSON from interface.
func CreateBinaryJSON(in any) BinaryJSON {
bj, err := CreateBinaryJSONWithCheck(in)
if err != nil {
panic(err)
}
return bj
}
// CreateBinaryJSONWithCheck creates a BinaryJSON from interface with error check.
func CreateBinaryJSONWithCheck(in any) (BinaryJSON, error) {
typeCode, buf, err := appendBinaryJSON(nil, in)
if err != nil {
return BinaryJSON{}, err
}
bj := BinaryJSON{TypeCode: typeCode, Value: buf}
// GetElemDepth always returns +1.
if bj.GetElemDepth()-1 > maxJSONDepth {
return BinaryJSON{}, ErrJSONDocumentTooDeep
}
return bj, nil
}
// CalculateBinaryJSONSize calculates the size of binary JSON
func CalculateBinaryJSONSize(in any) int64 {
switch x := in.(type) {
case nil:
return size.SizeOfByte
case bool:
return size.SizeOfByte
case int64, uint64, float64:
return 8
case json.Number:
size, err := calculateBinaryNumberSize(x)
if err != nil {
panic(errors.Trace(err))
}
return size
case string:
return calculateBinaryStringSize(x)
case BinaryJSON:
return int64(len(x.Value))
case []any:
size, err := calculateBinaryArraySize(x)
if err != nil {
panic(errors.Trace(err))
}
return size
case map[string]any:
size, err := calculateBinaryObjectSize(x)
if err != nil {
panic(errors.Trace(err))
}
return size
case Opaque:
return calculateBinaryOpaque(x)
case Time:
return 8
case Duration:
return 12
}
panic(fmt.Errorf(unknownTypeErrorMsg, reflect.TypeOf(in)))
}
func appendBinaryJSON(buf []byte, in any) (JSONTypeCode, []byte, error) {
var typeCode byte
var err error
switch x := in.(type) {
case nil:
typeCode = JSONTypeCodeLiteral
buf = append(buf, JSONLiteralNil)
case bool:
typeCode = JSONTypeCodeLiteral
if x {
buf = append(buf, JSONLiteralTrue)
} else {
buf = append(buf, JSONLiteralFalse)
}
case int64:
typeCode = JSONTypeCodeInt64
buf = appendBinaryUint64(buf, uint64(x))
case uint64:
typeCode = JSONTypeCodeUint64
buf = appendBinaryUint64(buf, x)
case float64:
typeCode = JSONTypeCodeFloat64
buf = appendBinaryFloat64(buf, x)
case json.Number:
typeCode, buf, err = appendBinaryNumber(buf, x)
if err != nil {
return typeCode, nil, errors.Trace(err)
}
case string:
typeCode = JSONTypeCodeString
buf = appendBinaryString(buf, x)
case BinaryJSON:
typeCode = x.TypeCode
buf = append(buf, x.Value...)
case []any:
typeCode = JSONTypeCodeArray
buf, err = appendBinaryArray(buf, x)
if err != nil {
return typeCode, nil, errors.Trace(err)
}
case map[string]any:
typeCode = JSONTypeCodeObject
buf, err = appendBinaryObject(buf, x)
if err != nil {
return typeCode, nil, errors.Trace(err)
}
case Opaque:
typeCode = JSONTypeCodeOpaque
buf = appendBinaryOpaque(buf, x)
case Time:
typeCode = JSONTypeCodeDate
if x.Type() == mysql.TypeDatetime {
typeCode = JSONTypeCodeDatetime
} else if x.Type() == mysql.TypeTimestamp {
typeCode = JSONTypeCodeTimestamp
}
buf = appendBinaryUint64(buf, uint64(x.CoreTime()))
case Duration:
typeCode = JSONTypeCodeDuration
buf = appendBinaryUint64(buf, uint64(x.Duration))
buf = appendBinaryUint32(buf, uint32(x.Fsp))
default:
msg := fmt.Sprintf(unknownTypeErrorMsg, reflect.TypeOf(in))
err = errors.New(msg)
}
return typeCode, buf, err
}
func appendZero(buf []byte, length int) []byte {
var tmp [8]byte
rem := length % 8
loop := length / 8
for range loop {
buf = append(buf, tmp[:]...)
}
for range rem {
buf = append(buf, 0)
}
return buf
}
func appendUint32(buf []byte, v uint32) []byte {
var tmp [4]byte
jsonEndian.PutUint32(tmp[:], v)
return append(buf, tmp[:]...)
}
func calculateBinaryNumberSize(x json.Number) (int64, error) {
if strings.Contains(x.String(), "Ee.") {
_, err := x.Float64()
if err != nil {
return 0, errors.Trace(err)
}
return 8, nil
} else if _, err := x.Int64(); err == nil {
return 8, nil
} else if _, err := strconv.ParseUint(string(x), 10, 64); err == nil {
return 8, nil
}
_, err := x.Float64()
if err == nil {
return 8, nil
}
return 0, errors.Trace(err)
}
func calculateBinaryStringSize(v string) int64 {
return binary.MaxVarintLen64 + int64(len(v))
}
func calculateBinaryArraySize(array []any) (int64, error) {
arrayLen := int64(len(array))
size := arrayLen + dataSizeOff + arrayLen*valEntrySize
for _, val := range array {
size += calculateBinaryValElemSize(val)
}
return size, nil
}
func calculateBinaryValElemSize(val any) int64 {
return CalculateBinaryJSONSize(val)
}
func calculateBinaryObjectSize(x map[string]any) (int64, error) {
size := 4 + dataSizeOff + int64(len(x))*keyEntrySize + int64(len(x))*valEntrySize
for key, val := range x {
size += int64(len(key)) + calculateBinaryValElemSize(val)
}
return size, nil
}
func calculateBinaryOpaque(v Opaque) int64 {
return int64(unsafe.Sizeof(v.TypeCode)) + binary.MaxVarintLen64 + int64(len(v.Buf))
}
func appendBinaryNumber(buf []byte, x json.Number) (JSONTypeCode, []byte, error) {
// The type interpretation process is as follows:
// - Attempt float64 if it contains Ee.
// - Next attempt int64
// - Then uint64 (valid in MySQL JSON, not in JSON decode library)
// - Then float64
// - Return an error
if strings.Contains(x.String(), "Ee.") {
f64, err := x.Float64()
if err != nil {
return JSONTypeCodeFloat64, nil, errors.Trace(err)
}
return JSONTypeCodeFloat64, appendBinaryFloat64(buf, f64), nil
} else if val, err := x.Int64(); err == nil {
return JSONTypeCodeInt64, appendBinaryUint64(buf, uint64(val)), nil
} else if val, err := strconv.ParseUint(string(x), 10, 64); err == nil {
return JSONTypeCodeUint64, appendBinaryUint64(buf, val), nil
}
val, err := x.Float64()
if err == nil {
return JSONTypeCodeFloat64, appendBinaryFloat64(buf, val), nil
}
var typeCode JSONTypeCode
return typeCode, nil, errors.Trace(err)
}
func appendBinaryString(buf []byte, v string) []byte {
begin := len(buf)
buf = appendZero(buf, binary.MaxVarintLen64)
lenLen := binary.PutUvarint(buf[begin:], uint64(len(v)))
buf = buf[:len(buf)-binary.MaxVarintLen64+lenLen]
buf = append(buf, v...)
return buf
}
func appendBinaryOpaque(buf []byte, v Opaque) []byte {
buf = append(buf, v.TypeCode)
lenBegin := len(buf)
buf = appendZero(buf, binary.MaxVarintLen64)
lenLen := binary.PutUvarint(buf[lenBegin:], uint64(len(v.Buf)))
buf = buf[:len(buf)-binary.MaxVarintLen64+lenLen]
buf = append(buf, v.Buf...)
return buf
}
func appendBinaryFloat64(buf []byte, v float64) []byte {
off := len(buf)
buf = appendZero(buf, 8)
jsonEndian.PutUint64(buf[off:], math.Float64bits(v))
return buf
}
func appendBinaryUint64(buf []byte, v uint64) []byte {
off := len(buf)
buf = appendZero(buf, 8)
jsonEndian.PutUint64(buf[off:], v)
return buf
}
func appendBinaryUint32(buf []byte, v uint32) []byte {
off := len(buf)
buf = appendZero(buf, 4)
jsonEndian.PutUint32(buf[off:], v)
return buf
}
func appendBinaryArray(buf []byte, array []any) ([]byte, error) {
docOff := len(buf)
buf = appendUint32(buf, uint32(len(array)))
buf = appendZero(buf, dataSizeOff)
valEntryBegin := len(buf)
buf = appendZero(buf, len(array)*valEntrySize)
for i, val := range array {
var err error
buf, err = appendBinaryValElem(buf, docOff, valEntryBegin+i*valEntrySize, val)
if err != nil {
return nil, errors.Trace(err)
}
}
docSize := len(buf) - docOff
jsonEndian.PutUint32(buf[docOff+dataSizeOff:], uint32(docSize))
return buf, nil
}
func appendBinaryValElem(buf []byte, docOff, valEntryOff int, val any) ([]byte, error) {
var typeCode JSONTypeCode
var err error
elemDocOff := len(buf)
typeCode, buf, err = appendBinaryJSON(buf, val)
if err != nil {
return nil, errors.Trace(err)
}
if typeCode == JSONTypeCodeLiteral {
litCode := buf[elemDocOff]
buf = buf[:elemDocOff]
buf[valEntryOff] = JSONTypeCodeLiteral
buf[valEntryOff+1] = litCode
return buf, nil
}
buf[valEntryOff] = typeCode
valOff := elemDocOff - docOff
jsonEndian.PutUint32(buf[valEntryOff+1:], uint32(valOff))
return buf, nil
}
type field struct {
key string
val any
}
func appendBinaryObject(buf []byte, x map[string]any) ([]byte, error) {
docOff := len(buf)
buf = appendUint32(buf, uint32(len(x)))
buf = appendZero(buf, dataSizeOff)
keyEntryBegin := len(buf)
buf = appendZero(buf, len(x)*keyEntrySize)
valEntryBegin := len(buf)
buf = appendZero(buf, len(x)*valEntrySize)
fields := make([]field, 0, len(x))
for key, val := range x {
fields = append(fields, field{key: key, val: val})
}
slices.SortFunc(fields, func(i, j field) int {
return cmp.Compare(i.key, j.key)
})
for i, field := range fields {
keyEntryOff := keyEntryBegin + i*keyEntrySize
keyOff := len(buf) - docOff
keyLen := uint32(len(field.key))
if keyLen > math.MaxUint16 {
return nil, ErrJSONObjectKeyTooLong
}
jsonEndian.PutUint32(buf[keyEntryOff:], uint32(keyOff))
jsonEndian.PutUint16(buf[keyEntryOff+keyLenOff:], uint16(keyLen))
buf = append(buf, field.key...)
}
for i, field := range fields {
var err error
buf, err = appendBinaryValElem(buf, docOff, valEntryBegin+i*valEntrySize, field.val)
if err != nil {
return nil, errors.Trace(err)
}
}
docSize := len(buf) - docOff
jsonEndian.PutUint32(buf[docOff+dataSizeOff:], uint32(docSize))
return buf, nil
}
// Copyright 2017 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package types
import (
"bytes"
"encoding/binary"
"encoding/hex"
"fmt"
"math"
"slices"
"sort"
"unicode/utf16"
"unicode/utf8"
"github.com/pingcap/errors"
"github.com/pingcap/tidb/pkg/parser/mysql"
"github.com/pingcap/tidb/pkg/util/hack"
"github.com/pingcap/tidb/pkg/util/stringutil"
)
// Type returns type of BinaryJSON as string.
func (bj BinaryJSON) Type() string {
switch bj.TypeCode {
case JSONTypeCodeObject:
return "OBJECT"
case JSONTypeCodeArray:
return "ARRAY"
case JSONTypeCodeLiteral:
switch bj.Value[0] {
case JSONLiteralNil:
return "NULL"
default:
return "BOOLEAN"
}
case JSONTypeCodeInt64:
return "INTEGER"
case JSONTypeCodeUint64:
return "UNSIGNED INTEGER"
case JSONTypeCodeFloat64:
return "DOUBLE"
case JSONTypeCodeString:
return "STRING"
case JSONTypeCodeOpaque:
typ := bj.GetOpaqueFieldType()
switch typ {
case mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob, mysql.TypeBlob, mysql.TypeString, mysql.TypeVarString, mysql.TypeVarchar:
return "BLOB"
case mysql.TypeBit:
return "BIT"
default:
return "OPAQUE"
}
case JSONTypeCodeDate:
return "DATE"
case JSONTypeCodeDatetime:
return "DATETIME"
case JSONTypeCodeTimestamp:
return "DATETIME"
case JSONTypeCodeDuration:
return "TIME"
default:
msg := fmt.Sprintf(unknownTypeCodeErrorMsg, bj.TypeCode)
panic(msg)
}
}
// Unquote is for JSON_UNQUOTE.
func (bj BinaryJSON) Unquote() (string, error) {
switch bj.TypeCode {
case JSONTypeCodeString:
str := string(hack.String(bj.GetString()))
return UnquoteString(str)
default:
return bj.String(), nil
}
}
// UnquoteString remove quotes in a string,
// including the quotes at the head and tail of string.
func UnquoteString(str string) (string, error) {
strLen := len(str)
if strLen < 2 {
return str, nil
}
head, tail := str[0], str[strLen-1]
if head == '"' && tail == '"' {
// Remove prefix and suffix '"' before unquoting
return unquoteJSONString(str[1 : strLen-1])
}
// if value is not double quoted, do nothing
return str, nil
}
// unquoteJSONString recognizes the escape sequences shown in:
// https://dev.mysql.com/doc/refman/5.7/en/json-modification-functions.html#json-unquote-character-escape-sequences
func unquoteJSONString(s string) (string, error) {
ret := new(bytes.Buffer)
for i := 0; i < len(s); i++ {
if s[i] == '\\' {
i++
if i == len(s) {
return "", errors.New("Missing a closing quotation mark in string")
}
switch s[i] {
case '"':
ret.WriteByte('"')
case 'b':
ret.WriteByte('\b')
case 'f':
ret.WriteByte('\f')
case 'n':
ret.WriteByte('\n')
case 'r':
ret.WriteByte('\r')
case 't':
ret.WriteByte('\t')
case '\\':
ret.WriteByte('\\')
case 'u':
if i+4 > len(s) {
return "", errors.Errorf("Invalid unicode: %s", s[i+1:])
}
char, size, inSurrogateRange, err := decodeOneEscapedUnicode(hack.Slice(s[i+1 : i+5]))
if err != nil {
// For `surrogate pair`, it uses two `\\uxxx` to encode a character.
if inSurrogateRange && len(s) >= i+10 && s[i+5] == '\\' && s[i+6] == 'u' {
char, size, _, err = decodeOneEscapedUnicode(append([]byte(s[i+1:i+5]), []byte(s[i+7:i+11])...))
if err != nil {
return "", errors.Trace(err)
}
ret.Write(char[0:size])
i += 10
continue
}
return "", errors.Trace(err)
}
ret.Write(char[0:size])
i += 4
default:
// For all other escape sequences, backslash is ignored.
ret.WriteByte(s[i])
}
} else {
ret.WriteByte(s[i])
}
}
return ret.String(), nil
}
// decodeOneEscapedUnicode decodes one unicode into utf8 bytes specified in RFC 3629.
// According RFC 3629, the max length of utf8 characters is 4 bytes.
// And MySQL use 4 bytes to represent the unicode which must be in [0, 65536).
func decodeOneEscapedUnicode(s []byte) (char [4]byte, size int, inSurrogateRange bool, err error) {
if len(s) > 8 {
return char, 0, false, errors.Errorf("Invalid `s` for decodeEscapedUnicode: %s", s)
}
size, err = hex.Decode(char[0:4], s)
if err != nil {
return char, 0, false, errors.Trace(err)
}
if size != 2 && size != 4 {
// The unicode must can be represented in 2 bytes or 4 bytes.
return char, size, false, errors.Errorf("Invalid unicode length: %d", size)
}
r1 := rune(binary.BigEndian.Uint16(char[0:2]))
if size == 4 {
r1 = utf16.DecodeRune(r1, rune(binary.BigEndian.Uint16(char[2:4])))
}
size = utf8.RuneLen(r1)
if size < 0 {
if r1 >= 0xD800 && r1 <= 0xDFFF {
inSurrogateRange = true
}
return char, size, inSurrogateRange, errors.Errorf("Invalid unicode: %s", s)
}
utf8.EncodeRune(char[0:size], r1)
return
}
// quoteJSONString escapes interior quote and other characters for json functions.
//
// The implementation of `JSON_QUOTE` doesn't use this function. The `JSON_QUOTE` used `goJSON` to encode the string
// directly. Therefore, this function is not compatible with `JSON_QUOTE` function for the convience of internal usage.
//
// This function will add extra quotes to the string if it contains special characters which needs to escape, or it's not
// a valid ECMAScript identifier.
func quoteJSONString(s string) string {
var escapeByteMap = map[byte]string{
'\\': "\\\\",
'"': "\\\"",
'\b': "\\b",
'\f': "\\f",
'\n': "\\n",
'\r': "\\r",
'\t': "\\t",
}
ret := new(bytes.Buffer)
ret.WriteByte('"')
start := 0
hasEscaped := false
for i := 0; i < len(s); {
if b := s[i]; b < utf8.RuneSelf {
escaped, ok := escapeByteMap[b]
if ok {
if start < i {
ret.WriteString(s[start:i])
}
hasEscaped = true
ret.WriteString(escaped)
i++
start = i
} else {
i++
}
} else {
c, size := utf8.DecodeRuneInString(s[i:])
if c == utf8.RuneError && size == 1 { // refer to codes of `binary.jsonMarshalStringTo`
if start < i {
ret.WriteString(s[start:i])
}
hasEscaped = true
ret.WriteString(`\ufffd`)
i += size
start = i
continue
}
i += size
}
}
if start < len(s) {
ret.WriteString(s[start:])
}
if hasEscaped || !isEcmascriptIdentifier(s) {
ret.WriteByte('"')
return ret.String()
}
return ret.String()[1:]
}
// Extract receives several path expressions as arguments, matches them in bj, and returns:
//
// ret: target JSON matched any path expressions. maybe autowrapped as an array.
// found: true if any path expressions matched.
func (bj BinaryJSON) Extract(pathExprList []JSONPathExpression) (ret BinaryJSON, found bool) {
buf := make([]BinaryJSON, 0, 1)
for _, pathExpr := range pathExprList {
buf = bj.extractTo(buf, pathExpr, make(map[*byte]struct{}), false)
}
if len(buf) == 0 {
found = false
} else if len(pathExprList) == 1 && len(buf) == 1 {
// If pathExpr contains asterisks, len(elemList) won't be 1
// even if len(pathExprList) equals to 1.
found = true
ret = buf[0]
// Fix https://github.com/pingcap/tidb/issues/30352
if pathExprList[0].CouldMatchMultipleValues() {
ret = buildBinaryJSONArray(buf)
}
} else {
found = true
ret = buildBinaryJSONArray(buf)
}
return
}
func (bj BinaryJSON) extractOne(pathExpr JSONPathExpression) []BinaryJSON {
result := make([]BinaryJSON, 0, 1)
return bj.extractTo(result, pathExpr, nil, true)
}
func (bj BinaryJSON) extractTo(buf []BinaryJSON, pathExpr JSONPathExpression, dup map[*byte]struct{}, one bool) []BinaryJSON {
if len(pathExpr.legs) == 0 {
if dup != nil {
if _, exists := dup[&bj.Value[0]]; exists {
return buf
}
dup[&bj.Value[0]] = struct{}{}
}
return append(buf, bj)
}
currentLeg, subPathExpr := pathExpr.popOneLeg()
if currentLeg.typ == jsonPathLegArraySelection {
if bj.TypeCode != JSONTypeCodeArray {
// If the current object is not an array, still append them if the selection includes
// 0 or last. But for asterisk, it still returns NULL.
//
// don't call `getIndexRange` or `getIndexFromStart`, they will panic if the argument
// is not array.
switch selection := currentLeg.arraySelection.(type) {
case jsonPathArraySelectionIndex:
if selection.index == 0 || selection.index == -1 {
buf = bj.extractTo(buf, subPathExpr, dup, one)
}
case jsonPathArraySelectionRange:
// for [0 to Non-negative Number] and [0 to last], it extracts itself
if selection.start == 0 && selection.end >= -1 {
buf = bj.extractTo(buf, subPathExpr, dup, one)
}
}
return buf
}
start, end := currentLeg.arraySelection.getIndexRange(bj)
if start >= 0 && start <= end {
for i := start; i <= end; i++ {
buf = bj.ArrayGetElem(i).extractTo(buf, subPathExpr, dup, one)
}
}
} else if currentLeg.typ == jsonPathLegKey && bj.TypeCode == JSONTypeCodeObject {
elemCount := bj.GetElemCount()
if currentLeg.dotKey == "*" {
for i := 0; i < elemCount && !jsonFinished(buf, one); i++ {
buf = bj.objectGetVal(i).extractTo(buf, subPathExpr, dup, one)
}
} else {
child, ok := bj.objectSearchKey(hack.Slice(currentLeg.dotKey))
if ok {
buf = child.extractTo(buf, subPathExpr, dup, one)
}
}
} else if currentLeg.typ == jsonPathLegDoubleAsterisk {
buf = bj.extractTo(buf, subPathExpr, dup, one)
if bj.TypeCode == JSONTypeCodeArray {
elemCount := bj.GetElemCount()
for i := 0; i < elemCount && !jsonFinished(buf, one); i++ {
buf = bj.ArrayGetElem(i).extractTo(buf, pathExpr, dup, one)
}
} else if bj.TypeCode == JSONTypeCodeObject {
elemCount := bj.GetElemCount()
for i := 0; i < elemCount && !jsonFinished(buf, one); i++ {
buf = bj.objectGetVal(i).extractTo(buf, pathExpr, dup, one)
}
}
}
return buf
}
func jsonFinished(buf []BinaryJSON, one bool) bool {
return one && len(buf) > 0
}
func (bj BinaryJSON) objectSearchKey(key []byte) (BinaryJSON, bool) {
elemCount := bj.GetElemCount()
idx := sort.Search(elemCount, func(i int) bool {
return bytes.Compare(bj.objectGetKey(i), key) >= 0
})
if idx < elemCount && bytes.Equal(bj.objectGetKey(idx), key) {
return bj.objectGetVal(idx), true
}
return BinaryJSON{}, false
}
func buildBinaryJSONArray(elems []BinaryJSON) BinaryJSON {
totalSize := headerSize + len(elems)*valEntrySize
for _, elem := range elems {
if elem.TypeCode != JSONTypeCodeLiteral {
totalSize += len(elem.Value)
}
}
buf := make([]byte, headerSize+len(elems)*valEntrySize, totalSize)
jsonEndian.PutUint32(buf, uint32(len(elems)))
jsonEndian.PutUint32(buf[dataSizeOff:], uint32(totalSize))
buf = buildBinaryJSONElements(buf, headerSize, elems)
return BinaryJSON{TypeCode: JSONTypeCodeArray, Value: buf}
}
func buildBinaryJSONElements(buf []byte, entryStart int, elems []BinaryJSON) []byte {
for i, elem := range elems {
buf[entryStart+i*valEntrySize] = elem.TypeCode
if elem.TypeCode == JSONTypeCodeLiteral {
buf[entryStart+i*valEntrySize+valTypeSize] = elem.Value[0]
} else {
jsonEndian.PutUint32(buf[entryStart+i*valEntrySize+valTypeSize:], uint32(len(buf)))
buf = append(buf, elem.Value...)
}
}
return buf
}
func buildBinaryJSONObject(keys [][]byte, elems []BinaryJSON) (BinaryJSON, error) {
totalSize := headerSize + len(elems)*(keyEntrySize+valEntrySize)
for i, elem := range elems {
if elem.TypeCode != JSONTypeCodeLiteral {
totalSize += len(elem.Value)
}
totalSize += len(keys[i])
}
buf := make([]byte, headerSize+len(elems)*(keyEntrySize+valEntrySize), totalSize)
jsonEndian.PutUint32(buf, uint32(len(elems)))
jsonEndian.PutUint32(buf[dataSizeOff:], uint32(totalSize))
for i, key := range keys {
if len(key) > math.MaxUint16 {
return BinaryJSON{}, ErrJSONObjectKeyTooLong
}
jsonEndian.PutUint32(buf[headerSize+i*keyEntrySize:], uint32(len(buf)))
jsonEndian.PutUint16(buf[headerSize+i*keyEntrySize+keyLenOff:], uint16(len(key)))
buf = append(buf, key...)
}
entryStart := headerSize + len(elems)*keyEntrySize
buf = buildBinaryJSONElements(buf, entryStart, elems)
return BinaryJSON{TypeCode: JSONTypeCodeObject, Value: buf}, nil
}
// Modify modifies a JSON object by insert, replace or set.
// All path expressions cannot contain * or ** wildcard.
// If any error occurs, the input won't be changed.
func (bj BinaryJSON) Modify(pathExprList []JSONPathExpression, values []BinaryJSON, mt JSONModifyType) (retj BinaryJSON, err error) {
if len(pathExprList) != len(values) {
// TODO: should return 1582(42000)
return retj, errors.New("Incorrect parameter count")
}
for _, pathExpr := range pathExprList {
if pathExpr.flags.containsAnyAsterisk() || pathExpr.flags.containsAnyRange() {
return retj, ErrInvalidJSONPathMultipleSelection
}
}
for i := range pathExprList {
pathExpr, value := pathExprList[i], values[i]
modifier := &binaryModifier{bj: bj}
switch mt {
case JSONModifyInsert:
bj = modifier.insert(pathExpr, value)
case JSONModifyReplace:
bj = modifier.replace(pathExpr, value)
case JSONModifySet:
bj = modifier.set(pathExpr, value)
}
if modifier.err != nil {
return BinaryJSON{}, modifier.err
}
}
if bj.GetElemDepth()-1 > maxJSONDepth {
return bj, ErrJSONDocumentTooDeep
}
return bj, nil
}
// ArrayInsert insert a BinaryJSON into the given array cell.
// All path expressions cannot contain * or ** wildcard.
// If any error occurs, the input won't be changed.
func (bj BinaryJSON) ArrayInsert(pathExpr JSONPathExpression, value BinaryJSON) (res BinaryJSON, err error) {
// Check the path is a index
if len(pathExpr.legs) < 1 {
return bj, ErrInvalidJSONPathArrayCell
}
parentPath, lastLeg := pathExpr.popOneLastLeg()
if lastLeg.typ != jsonPathLegArraySelection {
return bj, ErrInvalidJSONPathArrayCell
}
// Find the target array
obj, exists := bj.Extract([]JSONPathExpression{parentPath})
if !exists || obj.TypeCode != JSONTypeCodeArray {
return bj, nil
}
idx := 0
switch selection := lastLeg.arraySelection.(type) {
case jsonPathArraySelectionIndex:
idx = selection.index.getIndexFromStart(obj)
default:
return bj, ErrInvalidJSONPathArrayCell
}
count := obj.GetElemCount()
if idx >= count {
idx = count
}
// Insert into the array
newArray := make([]BinaryJSON, 0, count+1)
for i := range idx {
elem := obj.ArrayGetElem(i)
newArray = append(newArray, elem)
}
newArray = append(newArray, value)
for i := idx; i < count; i++ {
elem := obj.ArrayGetElem(i)
newArray = append(newArray, elem)
}
obj = buildBinaryJSONArray(newArray)
bj, err = bj.Modify([]JSONPathExpression{parentPath}, []BinaryJSON{obj}, JSONModifySet)
if err != nil {
return bj, err
}
return bj, nil
}
// Remove removes the elements indicated by pathExprList from JSON.
func (bj BinaryJSON) Remove(pathExprList []JSONPathExpression) (BinaryJSON, error) {
for _, pathExpr := range pathExprList {
if len(pathExpr.legs) == 0 {
return bj, ErrJSONVacuousPath
}
if pathExpr.flags.containsAnyAsterisk() || pathExpr.flags.containsAnyRange() {
return bj, ErrInvalidJSONPathMultipleSelection
}
modifer := &binaryModifier{bj: bj}
bj = modifer.remove(pathExpr)
if modifer.err != nil {
return BinaryJSON{}, modifer.err
}
}
return bj, nil
}
type binaryModifier struct {
bj BinaryJSON
modifyPtr *byte
modifyValue BinaryJSON
err error
}
func (bm *binaryModifier) set(path JSONPathExpression, newBj BinaryJSON) BinaryJSON {
result := bm.bj.extractOne(path)
if len(result) > 0 {
bm.modifyPtr = &result[0].Value[0]
bm.modifyValue = newBj
return bm.rebuild()
}
bm.doInsert(path, newBj)
if bm.err != nil {
return BinaryJSON{}
}
return bm.rebuild()
}
func (bm *binaryModifier) replace(path JSONPathExpression, newBj BinaryJSON) BinaryJSON {
result := bm.bj.extractOne(path)
if len(result) == 0 {
return bm.bj
}
bm.modifyPtr = &result[0].Value[0]
bm.modifyValue = newBj
return bm.rebuild()
}
func (bm *binaryModifier) insert(path JSONPathExpression, newBj BinaryJSON) BinaryJSON {
result := bm.bj.extractOne(path)
if len(result) > 0 {
return bm.bj
}
bm.doInsert(path, newBj)
if bm.err != nil {
return BinaryJSON{}
}
return bm.rebuild()
}
// doInsert inserts the newBj to its parent, and builds the new parent.
func (bm *binaryModifier) doInsert(path JSONPathExpression, newBj BinaryJSON) {
parentPath, lastLeg := path.popOneLastLeg()
result := bm.bj.extractOne(parentPath)
if len(result) == 0 {
return
}
parentBj := result[0]
if lastLeg.typ == jsonPathLegArraySelection {
bm.modifyPtr = &parentBj.Value[0]
if parentBj.TypeCode != JSONTypeCodeArray {
bm.modifyValue = buildBinaryJSONArray([]BinaryJSON{parentBj, newBj})
return
}
elemCount := parentBj.GetElemCount()
elems := make([]BinaryJSON, 0, elemCount+1)
for i := range elemCount {
elems = append(elems, parentBj.ArrayGetElem(i))
}
elems = append(elems, newBj)
bm.modifyValue = buildBinaryJSONArray(elems)
return
}
if parentBj.TypeCode != JSONTypeCodeObject {
return
}
bm.modifyPtr = &parentBj.Value[0]
elemCount := parentBj.GetElemCount()
insertKey := hack.Slice(lastLeg.dotKey)
insertIdx := sort.Search(elemCount, func(i int) bool {
return bytes.Compare(parentBj.objectGetKey(i), insertKey) >= 0
})
keys := make([][]byte, 0, elemCount+1)
elems := make([]BinaryJSON, 0, elemCount+1)
for i := range elemCount {
if i == insertIdx {
keys = append(keys, insertKey)
elems = append(elems, newBj)
}
keys = append(keys, parentBj.objectGetKey(i))
elems = append(elems, parentBj.objectGetVal(i))
}
if insertIdx == elemCount {
keys = append(keys, insertKey)
elems = append(elems, newBj)
}
bm.modifyValue, bm.err = buildBinaryJSONObject(keys, elems)
}
func (bm *binaryModifier) remove(path JSONPathExpression) BinaryJSON {
result := bm.bj.extractOne(path)
if len(result) == 0 {
return bm.bj
}
bm.doRemove(path)
if bm.err != nil {
return BinaryJSON{}
}
return bm.rebuild()
}
func (bm *binaryModifier) doRemove(path JSONPathExpression) {
parentPath, lastLeg := path.popOneLastLeg()
result := bm.bj.extractOne(parentPath)
if len(result) == 0 {
return
}
parentBj := result[0]
if lastLeg.typ == jsonPathLegArraySelection {
if parentBj.TypeCode != JSONTypeCodeArray {
return
}
selectionIndex, ok := lastLeg.arraySelection.(jsonPathArraySelectionIndex)
if !ok {
return
}
idx := selectionIndex.index.getIndexFromStart(parentBj)
bm.modifyPtr = &parentBj.Value[0]
elemCount := parentBj.GetElemCount()
elems := make([]BinaryJSON, 0, elemCount-1)
for i := range elemCount {
if i != idx {
elems = append(elems, parentBj.ArrayGetElem(i))
}
}
bm.modifyValue = buildBinaryJSONArray(elems)
return
}
if parentBj.TypeCode != JSONTypeCodeObject {
return
}
bm.modifyPtr = &parentBj.Value[0]
elemCount := parentBj.GetElemCount()
removeKey := hack.Slice(lastLeg.dotKey)
keys := make([][]byte, 0, elemCount+1)
elems := make([]BinaryJSON, 0, elemCount+1)
for i := range elemCount {
key := parentBj.objectGetKey(i)
if !bytes.Equal(key, removeKey) {
keys = append(keys, parentBj.objectGetKey(i))
elems = append(elems, parentBj.objectGetVal(i))
}
}
bm.modifyValue, bm.err = buildBinaryJSONObject(keys, elems)
}
// rebuild merges the old and the modified JSON into a new BinaryJSON
func (bm *binaryModifier) rebuild() BinaryJSON {
buf := make([]byte, 0, len(bm.bj.Value)+len(bm.modifyValue.Value))
value, tpCode := bm.rebuildTo(buf)
return BinaryJSON{TypeCode: tpCode, Value: value}
}
func (bm *binaryModifier) rebuildTo(buf []byte) ([]byte, JSONTypeCode) {
if bm.modifyPtr == &bm.bj.Value[0] {
bm.modifyPtr = nil
return append(buf, bm.modifyValue.Value...), bm.modifyValue.TypeCode
} else if bm.modifyPtr == nil {
return append(buf, bm.bj.Value...), bm.bj.TypeCode
}
bj := bm.bj
if bj.TypeCode != JSONTypeCodeArray && bj.TypeCode != JSONTypeCodeObject {
return append(buf, bj.Value...), bj.TypeCode
}
docOff := len(buf)
elemCount := bj.GetElemCount()
var valEntryStart int
if bj.TypeCode == JSONTypeCodeArray {
copySize := headerSize + elemCount*valEntrySize
valEntryStart = headerSize
buf = append(buf, bj.Value[:copySize]...)
} else {
copySize := headerSize + elemCount*(keyEntrySize+valEntrySize)
valEntryStart = headerSize + elemCount*keyEntrySize
buf = append(buf, bj.Value[:copySize]...)
if elemCount > 0 {
firstKeyOff := int(jsonEndian.Uint32(bj.Value[headerSize:]))
lastKeyOff := int(jsonEndian.Uint32(bj.Value[headerSize+(elemCount-1)*keyEntrySize:]))
lastKeyLen := int(jsonEndian.Uint16(bj.Value[headerSize+(elemCount-1)*keyEntrySize+keyLenOff:]))
buf = append(buf, bj.Value[firstKeyOff:lastKeyOff+lastKeyLen]...)
}
}
for i := range elemCount {
valEntryOff := valEntryStart + i*valEntrySize
elem := bj.valEntryGet(valEntryOff)
bm.bj = elem
var tpCode JSONTypeCode
valOff := len(buf) - docOff
buf, tpCode = bm.rebuildTo(buf)
buf[docOff+valEntryOff] = tpCode
if tpCode == JSONTypeCodeLiteral {
lastIdx := len(buf) - 1
jsonEndian.PutUint32(buf[docOff+valEntryOff+valTypeSize:], uint32(buf[lastIdx]))
buf = buf[:lastIdx]
} else {
jsonEndian.PutUint32(buf[docOff+valEntryOff+valTypeSize:], uint32(valOff))
}
}
jsonEndian.PutUint32(buf[docOff+dataSizeOff:], uint32(len(buf)-docOff))
return buf, bj.TypeCode
}
// floatEpsilon is the acceptable error quantity when comparing two float numbers.
const floatEpsilon = 1.e-8
// compareFloat64PrecisionLoss returns an integer comparing the float64 x to y,
// allowing precision loss.
func compareFloat64PrecisionLoss(x, y float64) int {
if x-y < floatEpsilon && y-x < floatEpsilon {
return 0
} else if x-y < 0 {
return -1
}
return 1
}
func compareInt64(x int64, y int64) int {
if x < y {
return -1
} else if x == y {
return 0
}
return 1
}
func compareFloat64(x float64, y float64) int {
if x < y {
return -1
} else if x == y {
return 0
}
return 1
}
func compareUint64(x uint64, y uint64) int {
if x < y {
return -1
} else if x == y {
return 0
}
return 1
}
func compareInt64Uint64(x int64, y uint64) int {
if x < 0 {
return -1
}
return compareUint64(uint64(x), y)
}
func compareFloat64Int64(x float64, y int64) int {
return compareFloat64PrecisionLoss(x, float64(y))
}
func compareFloat64Uint64(x float64, y uint64) int {
return compareFloat64PrecisionLoss(x, float64(y))
}
// CompareBinaryJSON compares two binary json objects. Returns -1 if left < right,
// 0 if left == right, else returns 1.
func CompareBinaryJSON(left, right BinaryJSON) int {
precedence1 := jsonTypePrecedences[left.Type()]
precedence2 := jsonTypePrecedences[right.Type()]
var cmp int
if precedence1 == precedence2 {
if precedence1 == jsonTypePrecedences["NULL"] {
// for JSON null.
cmp = 0
}
switch left.TypeCode {
case JSONTypeCodeLiteral:
// false is less than true.
cmp = int(right.Value[0]) - int(left.Value[0])
case JSONTypeCodeInt64:
switch right.TypeCode {
case JSONTypeCodeInt64:
cmp = compareInt64(left.GetInt64(), right.GetInt64())
case JSONTypeCodeUint64:
cmp = compareInt64Uint64(left.GetInt64(), right.GetUint64())
case JSONTypeCodeFloat64:
cmp = -compareFloat64Int64(right.GetFloat64(), left.GetInt64())
}
case JSONTypeCodeUint64:
switch right.TypeCode {
case JSONTypeCodeInt64:
cmp = -compareInt64Uint64(right.GetInt64(), left.GetUint64())
case JSONTypeCodeUint64:
cmp = compareUint64(left.GetUint64(), right.GetUint64())
case JSONTypeCodeFloat64:
cmp = -compareFloat64Uint64(right.GetFloat64(), left.GetUint64())
}
case JSONTypeCodeFloat64:
switch right.TypeCode {
case JSONTypeCodeInt64:
cmp = compareFloat64Int64(left.GetFloat64(), right.GetInt64())
case JSONTypeCodeUint64:
cmp = compareFloat64Uint64(left.GetFloat64(), right.GetUint64())
case JSONTypeCodeFloat64:
cmp = compareFloat64(left.GetFloat64(), right.GetFloat64())
}
case JSONTypeCodeString:
cmp = bytes.Compare(left.GetString(), right.GetString())
case JSONTypeCodeArray:
leftCount := left.GetElemCount()
rightCount := right.GetElemCount()
for i := 0; i < leftCount && i < rightCount; i++ {
elem1 := left.ArrayGetElem(i)
elem2 := right.ArrayGetElem(i)
cmp = CompareBinaryJSON(elem1, elem2)
if cmp != 0 {
return cmp
}
}
cmp = leftCount - rightCount
case JSONTypeCodeObject:
// reference:
// https://github.com/mysql/mysql-server/blob/ee4455a33b10f1b1886044322e4893f587b319ed/sql/json_dom.cc#L2561
leftCount, rightCount := left.GetElemCount(), right.GetElemCount()
cmp := compareInt64(int64(leftCount), int64(rightCount))
if cmp != 0 {
return cmp
}
for i := range leftCount {
leftKey, rightKey := left.objectGetKey(i), right.objectGetKey(i)
cmp = bytes.Compare(leftKey, rightKey)
if cmp != 0 {
return cmp
}
cmp = CompareBinaryJSON(left.objectGetVal(i), right.objectGetVal(i))
if cmp != 0 {
return cmp
}
}
case JSONTypeCodeOpaque:
cmp = bytes.Compare(left.GetOpaque().Buf, right.GetOpaque().Buf)
case JSONTypeCodeDate, JSONTypeCodeDatetime, JSONTypeCodeTimestamp:
// the jsonTypePrecedences guarantees that the DATE is only
// comparable with the DATE, and the DATETIME and TIMESTAMP will compare with each other
// as the `Type()` of `JSONTypeCodeTimestamp` is also `DATETIME`.
leftTime := left.GetTime()
rightTime := right.GetTime()
cmp = leftTime.Compare(rightTime)
case JSONTypeCodeDuration:
leftDuration := left.GetDuration()
rightDuration := right.GetDuration()
cmp = leftDuration.Compare(rightDuration)
}
} else {
cmp = precedence1 - precedence2
if cmp > 0 {
cmp = 1
} else if cmp < 0 {
cmp = -1
}
}
return cmp
}
// MergePatchBinaryJSON implements RFC7396
// https://datatracker.ietf.org/doc/html/rfc7396
func MergePatchBinaryJSON(bjs []*BinaryJSON) (*BinaryJSON, error) {
var err error
length := len(bjs)
// according to the implements of RFC7396
// when the last item is not object
// we can return the last item directly
for i := length - 1; i >= 0; i-- {
if bjs[i] == nil || bjs[i].TypeCode != JSONTypeCodeObject {
bjs = bjs[i:]
break
}
}
target := bjs[0]
for _, patch := range bjs[1:] {
target, err = mergePatchBinaryJSON(target, patch)
if err != nil {
return nil, err
}
}
return target, nil
}
func mergePatchBinaryJSON(target, patch *BinaryJSON) (result *BinaryJSON, err error) {
if patch == nil {
return nil, nil
}
if patch.TypeCode == JSONTypeCodeObject {
if target == nil {
return nil, nil
}
keyValMap := make(map[string]BinaryJSON)
if target.TypeCode == JSONTypeCodeObject {
elemCount := target.GetElemCount()
for i := range elemCount {
key := target.objectGetKey(i)
val := target.objectGetVal(i)
keyValMap[string(key)] = val
}
}
var tmp *BinaryJSON
elemCount := patch.GetElemCount()
for i := range elemCount {
key := patch.objectGetKey(i)
val := patch.objectGetVal(i)
k := string(key)
targetKV, exists := keyValMap[k]
if val.TypeCode == JSONTypeCodeLiteral && val.Value[0] == JSONLiteralNil {
if exists {
delete(keyValMap, k)
}
} else {
tmp, err = mergePatchBinaryJSON(&targetKV, &val)
if err != nil {
return result, err
}
keyValMap[k] = *tmp
}
}
length := len(keyValMap)
keys := make([][]byte, 0, length)
for key := range keyValMap {
keys = append(keys, []byte(key))
}
slices.SortFunc(keys, bytes.Compare)
length = len(keys)
values := make([]BinaryJSON, 0, len(keys))
for i := range length {
values = append(values, keyValMap[string(keys[i])])
}
binaryObject, e := buildBinaryJSONObject(keys, values)
if e != nil {
return nil, e
}
return &binaryObject, nil
}
return patch, nil
}
// MergeBinaryJSON merges multiple BinaryJSON into one according the following rules:
// 1) adjacent arrays are merged to a single array;
// 2) adjacent object are merged to a single object;
// 3) a scalar value is autowrapped as an array before merge;
// 4) an adjacent array and object are merged by autowrapping the object as an array.
func MergeBinaryJSON(bjs []BinaryJSON) BinaryJSON {
var remain = bjs
var objects []BinaryJSON
var results []BinaryJSON
for len(remain) > 0 {
if remain[0].TypeCode != JSONTypeCodeObject {
results = append(results, remain[0])
remain = remain[1:]
} else {
objects, remain = getAdjacentObjects(remain)
results = append(results, mergeBinaryObject(objects))
}
}
if len(results) == 1 {
return results[0]
}
return mergeBinaryArray(results)
}
func getAdjacentObjects(bjs []BinaryJSON) (objects, remain []BinaryJSON) {
for i := range bjs {
if bjs[i].TypeCode != JSONTypeCodeObject {
return bjs[:i], bjs[i:]
}
}
return bjs, nil
}
func mergeBinaryArray(elems []BinaryJSON) BinaryJSON {
buf := make([]BinaryJSON, 0, len(elems))
for i := range elems {
elem := elems[i]
if elem.TypeCode != JSONTypeCodeArray {
buf = append(buf, elem)
} else {
childCount := elem.GetElemCount()
for j := range childCount {
buf = append(buf, elem.ArrayGetElem(j))
}
}
}
return buildBinaryJSONArray(buf)
}
func mergeBinaryObject(objects []BinaryJSON) BinaryJSON {
keyValMap := make(map[string]BinaryJSON)
keys := make([][]byte, 0, len(keyValMap))
for _, obj := range objects {
elemCount := obj.GetElemCount()
for i := range elemCount {
key := obj.objectGetKey(i)
val := obj.objectGetVal(i)
if old, ok := keyValMap[string(key)]; ok {
keyValMap[string(key)] = MergeBinaryJSON([]BinaryJSON{old, val})
} else {
keyValMap[string(key)] = val
keys = append(keys, key)
}
}
}
slices.SortFunc(keys, bytes.Compare)
values := make([]BinaryJSON, len(keys))
for i, key := range keys {
values[i] = keyValMap[string(key)]
}
binaryObject, err := buildBinaryJSONObject(keys, values)
if err != nil {
panic("mergeBinaryObject should never panic, please contact the TiDB team for help")
}
return binaryObject
}
// PeekBytesAsJSON trys to peek some bytes from b, until
// we can deserialize a JSON from those bytes.
func PeekBytesAsJSON(b []byte) (n int, err error) {
if len(b) <= 0 {
err = errors.New("Cant peek from empty bytes")
return
}
switch c := b[0]; c {
case JSONTypeCodeObject, JSONTypeCodeArray:
if len(b) >= valTypeSize+headerSize {
size := jsonEndian.Uint32(b[valTypeSize+dataSizeOff:])
n = valTypeSize + int(size)
return
}
case JSONTypeCodeString:
strLen, lenLen := binary.Uvarint(b[valTypeSize:])
return valTypeSize + int(strLen) + lenLen, nil
case JSONTypeCodeInt64, JSONTypeCodeUint64, JSONTypeCodeFloat64, JSONTypeCodeDate, JSONTypeCodeDatetime, JSONTypeCodeTimestamp:
n = valTypeSize + 8
return
case JSONTypeCodeLiteral:
n = valTypeSize + 1
return
case JSONTypeCodeOpaque:
bufLen, lenLen := binary.Uvarint(b[valTypeSize+1:])
return valTypeSize + 1 + int(bufLen) + lenLen, nil
case JSONTypeCodeDuration:
n = valTypeSize + 12
return
}
err = errors.New("Invalid JSON bytes")
return
}
// ContainsBinaryJSON check whether JSON document contains specific target according the following rules:
// 1) object contains a target object if and only if every key is contained in source object and the value associated with the target key is contained in the value associated with the source key;
// 2) array contains a target nonarray if and only if the target is contained in some element of the array;
// 3) array contains a target array if and only if every element is contained in some element of the array;
// 4) scalar contains a target scalar if and only if they are comparable and are equal;
func ContainsBinaryJSON(obj, target BinaryJSON) bool {
switch obj.TypeCode {
case JSONTypeCodeObject:
if target.TypeCode == JSONTypeCodeObject {
elemCount := target.GetElemCount()
for i := range elemCount {
key := target.objectGetKey(i)
val := target.objectGetVal(i)
if exp, exists := obj.objectSearchKey(key); !exists || !ContainsBinaryJSON(exp, val) {
return false
}
}
return true
}
return false
case JSONTypeCodeArray:
if target.TypeCode == JSONTypeCodeArray {
elemCount := target.GetElemCount()
for i := range elemCount {
if !ContainsBinaryJSON(obj, target.ArrayGetElem(i)) {
return false
}
}
return true
}
elemCount := obj.GetElemCount()
for i := range elemCount {
if ContainsBinaryJSON(obj.ArrayGetElem(i), target) {
return true
}
}
return false
default:
return CompareBinaryJSON(obj, target) == 0
}
}
// OverlapsBinaryJSON is similar with ContainsBinaryJSON, but it checks the `OR` relationship.
func OverlapsBinaryJSON(obj, target BinaryJSON) bool {
if obj.TypeCode != JSONTypeCodeArray && target.TypeCode == JSONTypeCodeArray {
obj, target = target, obj
}
switch obj.TypeCode {
case JSONTypeCodeObject:
if target.TypeCode == JSONTypeCodeObject {
elemCount := target.GetElemCount()
for i := range elemCount {
key := target.objectGetKey(i)
val := target.objectGetVal(i)
if exp, exists := obj.objectSearchKey(key); exists && CompareBinaryJSON(exp, val) == 0 {
return true
}
}
}
return false
case JSONTypeCodeArray:
if target.TypeCode == JSONTypeCodeArray {
for i := range obj.GetElemCount() {
o := obj.ArrayGetElem(i)
for j := range target.GetElemCount() {
if CompareBinaryJSON(o, target.ArrayGetElem(j)) == 0 {
return true
}
}
}
return false
}
elemCount := obj.GetElemCount()
for i := range elemCount {
if CompareBinaryJSON(obj.ArrayGetElem(i), target) == 0 {
return true
}
}
return false
default:
return CompareBinaryJSON(obj, target) == 0
}
}
// GetElemDepth for JSON_DEPTH
// Returns the maximum depth of a JSON document
// rules referenced by MySQL JSON_DEPTH function
// [https://dev.mysql.com/doc/refman/5.7/en/json-attribute-functions.html#function_json-depth]
// 1) An empty array, empty object, or scalar value has depth 1.
// 2) A nonempty array containing only elements of depth 1 or nonempty object containing only member values of depth 1 has depth 2.
// 3) Otherwise, a JSON document has depth greater than 2.
// e.g. depth of '{}', '[]', 'true': 1
// e.g. depth of '[10, 20]', '[[], {}]': 2
// e.g. depth of '[10, {"a": 20}]': 3
func (bj BinaryJSON) GetElemDepth() int {
switch bj.TypeCode {
case JSONTypeCodeObject:
elemCount := bj.GetElemCount()
maxDepth := 0
for i := range elemCount {
obj := bj.objectGetVal(i)
depth := obj.GetElemDepth()
if depth > maxDepth {
maxDepth = depth
}
}
return maxDepth + 1
case JSONTypeCodeArray:
elemCount := bj.GetElemCount()
maxDepth := 0
for i := range elemCount {
obj := bj.ArrayGetElem(i)
depth := obj.GetElemDepth()
if depth > maxDepth {
maxDepth = depth
}
}
return maxDepth + 1
default:
return 1
}
}
// Search for JSON_Search
// rules referenced by MySQL JSON_SEARCH function
// [https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#function_json-search]
func (bj BinaryJSON) Search(containType string, search string, escape byte, pathExpres []JSONPathExpression) (res BinaryJSON, isNull bool, err error) {
if containType != JSONContainsPathOne && containType != JSONContainsPathAll {
return res, true, ErrJSONBadOneOrAllArg.GenWithStackByArgs("json_search")
}
patChars, patTypes := stringutil.CompilePattern(search, escape)
result := make([]any, 0)
walkFn := func(fullpath JSONPathExpression, bj BinaryJSON) (stop bool, err error) {
if bj.TypeCode == JSONTypeCodeString && stringutil.DoMatch(string(bj.GetString()), patChars, patTypes) {
result = append(result, fullpath.String())
if containType == JSONContainsPathOne {
return true, nil
}
}
return false, nil
}
if len(pathExpres) != 0 {
err := bj.Walk(walkFn, pathExpres...)
if err != nil {
return res, true, err
}
} else {
err := bj.Walk(walkFn)
if err != nil {
return res, true, err
}
}
switch len(result) {
case 0:
return res, true, nil
case 1:
return CreateBinaryJSON(result[0]), false, nil
default:
return CreateBinaryJSON(result), false, nil
}
}
// extractCallbackFn the type of CALLBACK function for extractToCallback
type extractCallbackFn func(fullpath JSONPathExpression, bj BinaryJSON) (stop bool, err error)
// extractToCallback callback alternative of extractTo
//
// would be more effective when walk through the whole JSON is unnecessary
//
// NOTICE: path [0] & [*] for JSON object other than array is INVALID, which is different from extractTo.
func (bj BinaryJSON) extractToCallback(pathExpr JSONPathExpression, callbackFn extractCallbackFn, fullpath JSONPathExpression) (stop bool, err error) {
if len(pathExpr.legs) == 0 {
return callbackFn(fullpath, bj)
}
currentLeg, subPathExpr := pathExpr.popOneLeg()
if currentLeg.typ == jsonPathLegArraySelection && bj.TypeCode == JSONTypeCodeArray {
elemCount := bj.GetElemCount()
switch selection := currentLeg.arraySelection.(type) {
case jsonPathArraySelectionAsterisk:
for i := range elemCount {
// buf = bj.ArrayGetElem(i).extractTo(buf, subPathExpr)
path := fullpath.pushBackOneArraySelectionLeg(jsonPathArraySelectionIndex{jsonPathArrayIndexFromStart(i)})
stop, err = bj.ArrayGetElem(i).extractToCallback(subPathExpr, callbackFn, path)
if stop || err != nil {
return
}
}
case jsonPathArraySelectionIndex:
idx := selection.index.getIndexFromStart(bj)
if idx < elemCount && idx >= 0 {
// buf = bj.ArrayGetElem(currentLeg.arraySelection).extractTo(buf, subPathExpr)
path := fullpath.pushBackOneArraySelectionLeg(currentLeg.arraySelection)
stop, err = bj.ArrayGetElem(idx).extractToCallback(subPathExpr, callbackFn, path)
if stop || err != nil {
return
}
}
case jsonPathArraySelectionRange:
start := selection.start.getIndexFromStart(bj)
end := selection.end.getIndexFromStart(bj)
if end >= elemCount {
end = elemCount - 1
}
if start <= end && start >= 0 {
for i := start; i <= end; i++ {
path := fullpath.pushBackOneArraySelectionLeg(jsonPathArraySelectionIndex{jsonPathArrayIndexFromStart(i)})
stop, err = bj.ArrayGetElem(i).extractToCallback(subPathExpr, callbackFn, path)
if stop || err != nil {
return
}
}
}
}
} else if currentLeg.typ == jsonPathLegKey && bj.TypeCode == JSONTypeCodeObject {
elemCount := bj.GetElemCount()
if currentLeg.dotKey == "*" {
for i := range elemCount {
// buf = bj.objectGetVal(i).extractTo(buf, subPathExpr)
path := fullpath.pushBackOneKeyLeg(string(bj.objectGetKey(i)))
stop, err = bj.objectGetVal(i).extractToCallback(subPathExpr, callbackFn, path)
if stop || err != nil {
return
}
}
} else {
child, ok := bj.objectSearchKey(hack.Slice(currentLeg.dotKey))
if ok {
// buf = child.extractTo(buf, subPathExpr)
path := fullpath.pushBackOneKeyLeg(currentLeg.dotKey)
stop, err = child.extractToCallback(subPathExpr, callbackFn, path)
if stop || err != nil {
return
}
}
}
} else if currentLeg.typ == jsonPathLegDoubleAsterisk {
// buf = bj.extractTo(buf, subPathExpr)
stop, err = bj.extractToCallback(subPathExpr, callbackFn, fullpath)
if stop || err != nil {
return
}
if bj.TypeCode == JSONTypeCodeArray {
elemCount := bj.GetElemCount()
for i := range elemCount {
// buf = bj.ArrayGetElem(i).extractTo(buf, pathExpr)
path := fullpath.pushBackOneArraySelectionLeg(jsonPathArraySelectionIndex{jsonPathArrayIndexFromStart(i)})
stop, err = bj.ArrayGetElem(i).extractToCallback(pathExpr, callbackFn, path)
if stop || err != nil {
return
}
}
} else if bj.TypeCode == JSONTypeCodeObject {
elemCount := bj.GetElemCount()
for i := range elemCount {
// buf = bj.objectGetVal(i).extractTo(buf, pathExpr)
path := fullpath.pushBackOneKeyLeg(string(bj.objectGetKey(i)))
stop, err = bj.objectGetVal(i).extractToCallback(pathExpr, callbackFn, path)
if stop || err != nil {
return
}
}
}
}
return false, nil
}
// BinaryJSONWalkFunc is used as callback function for BinaryJSON.Walk
type BinaryJSONWalkFunc func(fullpath JSONPathExpression, bj BinaryJSON) (stop bool, err error)
// Walk traverse BinaryJSON objects
func (bj BinaryJSON) Walk(walkFn BinaryJSONWalkFunc, pathExprList ...JSONPathExpression) (err error) {
pathSet := make(map[string]bool)
var doWalk extractCallbackFn
doWalk = func(fullpath JSONPathExpression, bj BinaryJSON) (stop bool, err error) {
pathStr := fullpath.String()
if _, ok := pathSet[pathStr]; ok {
return false, nil
}
stop, err = walkFn(fullpath, bj)
pathSet[pathStr] = true
if stop || err != nil {
return
}
if bj.TypeCode == JSONTypeCodeArray {
elemCount := bj.GetElemCount()
for i := range elemCount {
path := fullpath.pushBackOneArraySelectionLeg(jsonPathArraySelectionIndex{jsonPathArrayIndexFromStart(i)})
stop, err = doWalk(path, bj.ArrayGetElem(i))
if stop || err != nil {
return
}
}
} else if bj.TypeCode == JSONTypeCodeObject {
elemCount := bj.GetElemCount()
for i := range elemCount {
path := fullpath.pushBackOneKeyLeg(string(bj.objectGetKey(i)))
stop, err = doWalk(path, bj.objectGetVal(i))
if stop || err != nil {
return
}
}
}
return false, nil
}
fullpath := JSONPathExpression{legs: make([]jsonPathLeg, 0, 32), flags: jsonPathExpressionFlag(0)}
if len(pathExprList) > 0 {
for _, pathExpr := range pathExprList {
var stop bool
stop, err = bj.extractToCallback(pathExpr, doWalk, fullpath)
if stop || err != nil {
return err
}
}
} else {
_, err = doWalk(fullpath, bj)
if err != nil {
return
}
}
return nil
}
// Copyright 2017 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package types
import (
"encoding/json"
"math"
"slices"
"strconv"
"strings"
"sync"
"unicode"
"github.com/pingcap/tidb/pkg/util/hack"
"github.com/pingcap/tidb/pkg/util/kvcache"
)
/*
From MySQL 5.7, JSON path expression grammar:
pathExpression ::= scope (jsonPathLeg)*
scope ::= [ columnReference ] '$'
columnReference ::= // omit...
jsonPathLeg ::= member | arrayLocation | '**'
member ::= '.' (keyName | '*')
arrayLocation ::= '[' (non-negative-integer | '*') ']'
keyName ::= ECMAScript-identifier | ECMAScript-string-literal
And some implementation limits in MySQL 5.7:
1) columnReference in scope must be empty now;
2) double asterisk(**) could not be last leg;
Examples:
select json_extract('{"a": "b", "c": [1, "2"]}', '$.a') -> "b"
select json_extract('{"a": "b", "c": [1, "2"]}', '$.c') -> [1, "2"]
select json_extract('{"a": "b", "c": [1, "2"]}', '$.a', '$.c') -> ["b", [1, "2"]]
select json_extract('{"a": "b", "c": [1, "2"]}', '$.c[0]') -> 1
select json_extract('{"a": "b", "c": [1, "2"]}', '$.c[2]') -> NULL
select json_extract('{"a": "b", "c": [1, "2"]}', '$.c[*]') -> [1, "2"]
select json_extract('{"a": "b", "c": [1, "2"]}', '$.*') -> ["b", [1, "2"]]
*/
var (
lastStr = []rune("last")
toStr = []rune("to")
)
// if index is positive, it represents the [index]
// if index is negative, it represents the [len() + index]
// a normal index "5" will be parsed into "5", and the "last - 5" will be "-6"
type jsonPathArrayIndex int
func (index jsonPathArrayIndex) getIndexFromStart(obj BinaryJSON) int {
if index < 0 {
return obj.GetElemCount() + int(index)
}
return int(index)
}
// validateIndexRange returns whether `a` could be less or equal than `b`
// if two indexes are all non-negative, or all negative, the comparison follows the number order
// if the sign of them differs, this function will still return true
func validateIndexRange(a jsonPathArrayIndex, b jsonPathArrayIndex) bool {
if (a >= 0 && b >= 0) || (a < 0 && b < 0) {
return a <= b
}
return true
}
func jsonPathArrayIndexFromStart(index int) jsonPathArrayIndex {
return jsonPathArrayIndex(index)
}
func jsonPathArrayIndexFromLast(index int) jsonPathArrayIndex {
return jsonPathArrayIndex(-1 - index)
}
type jsonPathArraySelection interface {
// returns the closed interval of the range it represents
// it ensures the `end` is less or equal than element count - 1
// the caller should validate the return value through checking start <= end
getIndexRange(bj BinaryJSON) (int, int)
}
var _ jsonPathArraySelection = jsonPathArraySelectionAsterisk{}
var _ jsonPathArraySelection = jsonPathArraySelectionIndex{}
var _ jsonPathArraySelection = jsonPathArraySelectionRange{}
type jsonPathArraySelectionAsterisk struct{}
func (jsonPathArraySelectionAsterisk) getIndexRange(bj BinaryJSON) (int, int) {
return 0, bj.GetElemCount() - 1
}
type jsonPathArraySelectionIndex struct {
index jsonPathArrayIndex
}
func (i jsonPathArraySelectionIndex) getIndexRange(bj BinaryJSON) (int, int) {
end := i.index.getIndexFromStart(bj)
// returns index, min(index, count - 1)
// so that the caller could only check the start <= end
elemCount := bj.GetElemCount()
if end >= elemCount {
end = elemCount - 1
}
return i.index.getIndexFromStart(bj), end
}
// jsonPathArraySelectionRange represents a closed interval
type jsonPathArraySelectionRange struct {
start jsonPathArrayIndex
end jsonPathArrayIndex
}
func (i jsonPathArraySelectionRange) getIndexRange(bj BinaryJSON) (int, int) {
start := i.start.getIndexFromStart(bj)
end := i.end.getIndexFromStart(bj)
elemCount := bj.GetElemCount()
if end >= elemCount {
end = elemCount - 1
}
return start, end
}
type jsonPathLegType byte
const (
// jsonPathLegKey indicates the path leg with '.key'.
jsonPathLegKey jsonPathLegType = 0x01
// jsonPathLegArraySelection indicates the path leg with form '[index]', '[index to index]'.
jsonPathLegArraySelection jsonPathLegType = 0x02
// jsonPathLegDoubleAsterisk indicates the path leg with form '**'.
jsonPathLegDoubleAsterisk jsonPathLegType = 0x03
)
// jsonPathLeg is only used by JSONPathExpression.
type jsonPathLeg struct {
typ jsonPathLegType
arraySelection jsonPathArraySelection // if typ is jsonPathLegArraySelection, the value should be parsed into here.
dotKey string // if typ is jsonPathLegKey, the key should be parsed into here.
}
// jsonPathExpressionFlag holds attributes of JSONPathExpression
type jsonPathExpressionFlag byte
const (
jsonPathExpressionContainsAsterisk jsonPathExpressionFlag = 0x01
jsonPathExpressionContainsDoubleAsterisk jsonPathExpressionFlag = 0x02
jsonPathExpressionContainsRange jsonPathExpressionFlag = 0x04
)
// containsAnyAsterisk returns true if pef contains any asterisk.
func (pef jsonPathExpressionFlag) containsAnyAsterisk() bool {
pef &= jsonPathExpressionContainsAsterisk | jsonPathExpressionContainsDoubleAsterisk
return byte(pef) != 0
}
// containsAnyRange returns true if pef contains any range.
func (pef jsonPathExpressionFlag) containsAnyRange() bool {
pef &= jsonPathExpressionContainsRange
return byte(pef) != 0
}
// JSONPathExpression is for JSON path expression.
type JSONPathExpression struct {
legs []jsonPathLeg
flags jsonPathExpressionFlag
}
func (pe JSONPathExpression) clone() JSONPathExpression {
legs := make([]jsonPathLeg, len(pe.legs))
copy(legs, pe.legs)
return JSONPathExpression{legs: legs, flags: pe.flags}
}
var peCache JSONPathExpressionCache
type jsonPathExpressionKey string
func (key jsonPathExpressionKey) Hash() []byte {
return hack.Slice(string(key))
}
// JSONPathExpressionCache is a cache for JSONPathExpression.
type JSONPathExpressionCache struct {
mu sync.Mutex
cache *kvcache.SimpleLRUCache
}
// popOneLeg returns a jsonPathLeg, and a child JSONPathExpression without that leg.
func (pe JSONPathExpression) popOneLeg() (jsonPathLeg, JSONPathExpression) {
newPe := JSONPathExpression{
legs: pe.legs[1:],
flags: 0,
}
for _, leg := range newPe.legs {
if leg.typ == jsonPathLegArraySelection {
switch leg.arraySelection.(type) {
case jsonPathArraySelectionAsterisk:
newPe.flags |= jsonPathExpressionContainsAsterisk
case jsonPathArraySelectionRange:
newPe.flags |= jsonPathExpressionContainsRange
}
} else if leg.typ == jsonPathLegKey && leg.dotKey == "*" {
newPe.flags |= jsonPathExpressionContainsAsterisk
} else if leg.typ == jsonPathLegDoubleAsterisk {
newPe.flags |= jsonPathExpressionContainsDoubleAsterisk
}
}
return pe.legs[0], newPe
}
// popOneLastLeg returns the parent JSONPathExpression and the last jsonPathLeg
func (pe JSONPathExpression) popOneLastLeg() (JSONPathExpression, jsonPathLeg) {
lastLegIdx := len(pe.legs) - 1
lastLeg := pe.legs[lastLegIdx]
// It is used only in modification, it has been checked that there is no asterisks.
return JSONPathExpression{legs: pe.legs[:lastLegIdx]}, lastLeg
}
// pushBackOneArraySelectionLeg pushback one leg of INDEX type
func (pe JSONPathExpression) pushBackOneArraySelectionLeg(arraySelection jsonPathArraySelection) JSONPathExpression {
newPe := JSONPathExpression{
legs: append(pe.legs, jsonPathLeg{typ: jsonPathLegArraySelection, arraySelection: arraySelection}),
flags: pe.flags,
}
switch arraySelection.(type) {
case jsonPathArraySelectionAsterisk:
newPe.flags |= jsonPathExpressionContainsAsterisk
case jsonPathArraySelectionRange:
newPe.flags |= jsonPathExpressionContainsRange
}
return newPe
}
// pushBackOneKeyLeg pushback one leg of KEY type
func (pe JSONPathExpression) pushBackOneKeyLeg(key string) JSONPathExpression {
newPe := JSONPathExpression{
legs: append(pe.legs, jsonPathLeg{typ: jsonPathLegKey, dotKey: key}),
flags: pe.flags,
}
if key == "*" {
newPe.flags |= jsonPathExpressionContainsAsterisk
}
return newPe
}
// CouldMatchMultipleValues returns true if pe contains any asterisk or range selection.
func (pe JSONPathExpression) CouldMatchMultipleValues() bool {
return pe.flags.containsAnyAsterisk() || pe.flags.containsAnyRange()
}
type jsonPathStream struct {
pathExpr []rune
pos int
}
func (s *jsonPathStream) skipWhiteSpace() {
for ; s.pos < len(s.pathExpr); s.pos++ {
if !unicode.IsSpace(s.pathExpr[s.pos]) {
break
}
}
}
func (s *jsonPathStream) read() rune {
b := s.pathExpr[s.pos]
s.pos++
return b
}
func (s *jsonPathStream) peek() rune {
return s.pathExpr[s.pos]
}
func (s *jsonPathStream) skip(i int) {
s.pos += i
}
func (s *jsonPathStream) exhausted() bool {
return s.pos >= len(s.pathExpr)
}
func (s *jsonPathStream) readWhile(f func(rune) bool) (str []rune, metEnd bool) {
start := s.pos
for ; !s.exhausted(); s.skip(1) {
if !f(s.peek()) {
return s.pathExpr[start:s.pos], false
}
}
return s.pathExpr[start:], true
}
func parseJSONPathExpr(pathExpr string) (pe JSONPathExpression, err error) {
s := &jsonPathStream{pathExpr: []rune(pathExpr), pos: 0}
s.skipWhiteSpace()
if s.exhausted() || s.read() != '$' {
return JSONPathExpression{}, ErrInvalidJSONPath.GenWithStackByArgs(1)
}
s.skipWhiteSpace()
pe.legs = make([]jsonPathLeg, 0, 16)
pe.flags = jsonPathExpressionFlag(0)
var ok bool
for !s.exhausted() {
switch s.peek() {
case '.':
ok = parseJSONPathMember(s, &pe)
case '[':
ok = parseJSONPathArray(s, &pe)
case '*':
ok = parseJSONPathWildcard(s, &pe)
default:
ok = false
}
if !ok {
return JSONPathExpression{}, ErrInvalidJSONPath.GenWithStackByArgs(s.pos)
}
s.skipWhiteSpace()
}
if len(pe.legs) > 0 && pe.legs[len(pe.legs)-1].typ == jsonPathLegDoubleAsterisk {
return JSONPathExpression{}, ErrInvalidJSONPath.GenWithStackByArgs(s.pos)
}
return
}
func parseJSONPathWildcard(s *jsonPathStream, p *JSONPathExpression) bool {
s.skip(1)
if s.exhausted() || s.read() != '*' {
return false
}
if s.exhausted() || s.peek() == '*' {
return false
}
p.flags |= jsonPathExpressionContainsDoubleAsterisk
p.legs = append(p.legs, jsonPathLeg{typ: jsonPathLegDoubleAsterisk})
return true
}
func (s *jsonPathStream) tryReadString(expected []rune) bool {
recordPos := s.pos
i := 0
str, meetEnd := s.readWhile(func(b rune) bool {
i += 1
return i <= len(expected)
})
if meetEnd || !slices.Equal(str, expected) {
s.pos = recordPos
return false
}
return true
}
func (s *jsonPathStream) tryReadIndexNumber() (int, bool) {
recordPos := s.pos
str, meetEnd := s.readWhile(func(b rune) bool {
return b >= '0' && b <= '9'
})
if meetEnd {
s.pos = recordPos
return 0, false
}
index, err := strconv.Atoi(string(str))
if err != nil || index > math.MaxUint32 {
s.pos = recordPos
return 0, false
}
return index, true
}
// tryParseArrayIndex tries to read an arrayIndex, which is 'number', 'last' or 'last - number'
// if failed, the stream will not be pushed forward
func (s *jsonPathStream) tryParseArrayIndex() (jsonPathArrayIndex, bool) {
recordPos := s.pos
s.skipWhiteSpace()
if s.exhausted() {
return 0, false
}
switch c := s.peek(); {
case c >= '0' && c <= '9':
index, ok := s.tryReadIndexNumber()
if !ok {
s.pos = recordPos
return 0, false
}
return jsonPathArrayIndexFromStart(index), true
case c == 'l':
if !s.tryReadString(lastStr) {
s.pos = recordPos
return 0, false
}
s.skipWhiteSpace()
if s.exhausted() {
return jsonPathArrayIndexFromLast(0), true
}
if s.peek() != '-' {
return jsonPathArrayIndexFromLast(0), true
}
s.skip(1)
s.skipWhiteSpace()
index, ok := s.tryReadIndexNumber()
if !ok {
s.pos = recordPos
return 0, false
}
return jsonPathArrayIndexFromLast(index), true
}
return 0, false
}
func parseJSONPathArray(s *jsonPathStream, p *JSONPathExpression) bool {
s.skip(1)
s.skipWhiteSpace()
if s.exhausted() {
return false
}
if s.peek() == '*' {
s.skip(1)
p.flags |= jsonPathExpressionContainsAsterisk
p.legs = append(p.legs, jsonPathLeg{typ: jsonPathLegArraySelection, arraySelection: jsonPathArraySelectionAsterisk{}})
} else {
start, ok := s.tryParseArrayIndex()
if !ok {
return false
}
var selection jsonPathArraySelection
selection = jsonPathArraySelectionIndex{start}
// try to read " to " and the end
if unicode.IsSpace(s.peek()) {
s.skipWhiteSpace()
if s.tryReadString(toStr) && unicode.IsSpace(s.peek()) {
s.skipWhiteSpace()
if s.exhausted() {
return false
}
end, ok := s.tryParseArrayIndex()
if !ok {
return false
}
if !validateIndexRange(start, end) {
return false
}
p.flags |= jsonPathExpressionContainsRange
selection = jsonPathArraySelectionRange{start, end}
}
}
p.legs = append(p.legs, jsonPathLeg{typ: jsonPathLegArraySelection, arraySelection: selection})
}
s.skipWhiteSpace()
if s.exhausted() || s.read() != ']' {
return false
}
return true
}
func parseJSONPathMember(s *jsonPathStream, p *JSONPathExpression) bool {
var err error
s.skip(1)
s.skipWhiteSpace()
if s.exhausted() {
return false
}
if s.peek() == '*' {
s.skip(1)
p.flags |= jsonPathExpressionContainsAsterisk
p.legs = append(p.legs, jsonPathLeg{typ: jsonPathLegKey, dotKey: "*"})
} else {
var dotKey string
var wasQuoted bool
if s.peek() == '"' {
s.skip(1)
str, meetEnd := s.readWhile(func(b rune) bool {
if b == '\\' {
s.skip(1)
return true
}
return b != '"'
})
if meetEnd {
return false
}
s.skip(1)
dotKey = string(str)
wasQuoted = true
} else {
dotKeyInRune, _ := s.readWhile(func(b rune) bool {
return !(unicode.IsSpace(b) || b == '.' || b == '[' || b == '*')
})
dotKey = string(dotKeyInRune)
}
dotKey = "\"" + dotKey + "\""
if !json.Valid(hack.Slice(dotKey)) {
return false
}
dotKey, err = unquoteJSONString(dotKey[1 : len(dotKey)-1])
if err != nil || (!wasQuoted && !isEcmascriptIdentifier(dotKey)) {
return false
}
p.legs = append(p.legs, jsonPathLeg{typ: jsonPathLegKey, dotKey: dotKey})
}
return true
}
func isEcmascriptIdentifier(s string) bool {
if s == "" {
return false
}
for i := range len(s) {
c := rune(s[i])
// accept Latin1 letter
if c <= unicode.MaxLatin1 && unicode.IsLetter(c) {
continue
}
// accept '$' and '_'
if c == '$' || c == '_' {
continue
}
// the first character must be a letter or '$' or '_'
if i == 0 {
return false
}
// accept unicode combining mark
if unicode.Is(unicode.Mc, c) {
continue
}
// accept digit
if unicode.IsDigit(c) {
continue
}
// accept unicode connector punctuation
if unicode.Is(unicode.Pc, c) {
continue
}
// accept ZWNJ and ZWJ
if c == 0x200C || c == 0x200D {
continue
}
return false
}
return true
}
// ParseJSONPathExpr parses a JSON path expression. Returns a JSONPathExpression
// object which can be used in JSON_EXTRACT, JSON_SET and so on.
func ParseJSONPathExpr(pathExpr string) (JSONPathExpression, error) {
peCache.mu.Lock()
val, ok := peCache.cache.Get(jsonPathExpressionKey(pathExpr))
if ok {
peCache.mu.Unlock()
return val.(JSONPathExpression).clone(), nil
}
peCache.mu.Unlock()
pathExpression, err := parseJSONPathExpr(pathExpr)
if err == nil {
peCache.mu.Lock()
peCache.cache.Put(jsonPathExpressionKey(pathExpr), kvcache.Value(pathExpression))
peCache.mu.Unlock()
}
return pathExpression, err
}
func (index jsonPathArrayIndex) String() string {
if index < 0 {
indexStr := strconv.Itoa(int(math.Abs(float64(index + 1))))
return "last-" + indexStr
}
indexStr := strconv.Itoa(int(index))
return indexStr
}
func (pe JSONPathExpression) String() string {
var s strings.Builder
s.WriteString("$")
for _, leg := range pe.legs {
switch leg.typ {
case jsonPathLegArraySelection:
switch selection := leg.arraySelection.(type) {
case jsonPathArraySelectionAsterisk:
s.WriteString("[*]")
case jsonPathArraySelectionIndex:
s.WriteString("[")
s.WriteString(selection.index.String())
s.WriteString("]")
case jsonPathArraySelectionRange:
s.WriteString("[")
s.WriteString(selection.start.String())
s.WriteString(" to ")
s.WriteString(selection.end.String())
s.WriteString("]")
}
case jsonPathLegKey:
s.WriteString(".")
if leg.dotKey == "*" {
s.WriteString(leg.dotKey)
} else {
s.WriteString(quoteJSONString(leg.dotKey))
}
case jsonPathLegDoubleAsterisk:
s.WriteString("**")
}
}
return s.String()
}
func init() {
peCache.cache = kvcache.NewSimpleLRUCache(1000, 0.1, math.MaxUint64)
}
// Copyright 2016 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package types
import (
"encoding/json"
"math"
"strconv"
"strings"
"github.com/pingcap/errors"
"github.com/pingcap/log"
"github.com/pingcap/tidb/pkg/parser/mysql"
"github.com/pingcap/tidb/pkg/parser/terror"
"go.uber.org/zap"
)
// RoundMode is the type for round mode.
type RoundMode int32
// constant values.
const (
ten0 = 1
ten1 = 10
ten2 = 100
ten3 = 1000
ten4 = 10000
ten5 = 100000
ten6 = 1000000
ten7 = 10000000
ten8 = 100000000
ten9 = 1000000000
maxWordBufLen = 9 // A MyDecimal holds 9 words.
digitsPerWord = 9 // A word holds 9 digits.
wordSize = 4 // A word is 4 bytes int32.
digMask = ten8
wordBase = ten9
wordMax = wordBase - 1
notFixedDec = 31
// Round up to the next integer if positive or down to the next integer if negative.
ModeHalfUp RoundMode = 5
// Truncate just truncates the decimal.
ModeTruncate RoundMode = 10
// Ceiling is not supported now.
ModeCeiling RoundMode = 0
pow10off int = 81
)
var (
wordBufLen = 9
mod9 = [128]int8{
0, 1, 2, 3, 4, 5, 6, 7, 8,
0, 1, 2, 3, 4, 5, 6, 7, 8,
0, 1, 2, 3, 4, 5, 6, 7, 8,
0, 1, 2, 3, 4, 5, 6, 7, 8,
0, 1, 2, 3, 4, 5, 6, 7, 8,
0, 1, 2, 3, 4, 5, 6, 7, 8,
0, 1, 2, 3, 4, 5, 6, 7, 8,
0, 1, 2, 3, 4, 5, 6, 7, 8,
0, 1, 2, 3, 4, 5, 6, 7, 8,
0, 1, 2, 3, 4, 5, 6, 7, 8,
0, 1, 2, 3, 4, 5, 6, 7, 8,
0, 1, 2, 3, 4, 5, 6, 7, 8,
0, 1, 2, 3, 4, 5, 6, 7, 8,
0, 1, 2, 3, 4, 5, 6, 7, 8,
0, 1,
}
div9 = [128]int{
0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 2, 2, 2, 2,
3, 3, 3, 3, 3, 3, 3, 3, 3,
4, 4, 4, 4, 4, 4, 4, 4, 4,
5, 5, 5, 5, 5, 5, 5, 5, 5,
6, 6, 6, 6, 6, 6, 6, 6, 6,
7, 7, 7, 7, 7, 7, 7, 7, 7,
8, 8, 8, 8, 8, 8, 8, 8, 8,
9, 9, 9, 9, 9, 9, 9, 9, 9,
10, 10, 10, 10, 10, 10, 10, 10, 10,
11, 11, 11, 11, 11, 11, 11, 11, 11,
12, 12, 12, 12, 12, 12, 12, 12, 12,
13, 13, 13, 13, 13, 13, 13, 13, 13,
14, 14,
}
powers10 = [10]int32{ten0, ten1, ten2, ten3, ten4, ten5, ten6, ten7, ten8, ten9}
dig2bytes = [10]int{0, 1, 1, 2, 2, 3, 3, 4, 4, 4}
fracMax = [8]int32{
900000000,
990000000,
999000000,
999900000,
999990000,
999999000,
999999900,
999999990,
}
zeroMyDecimal = MyDecimal{}
pow10off81 = [...]float64{1e-81, 1e-80, 1e-79, 1e-78, 1e-77, 1e-76, 1e-75, 1e-74, 1e-73, 1e-72, 1e-71, 1e-70, 1e-69, 1e-68, 1e-67, 1e-66, 1e-65, 1e-64, 1e-63, 1e-62, 1e-61, 1e-60, 1e-59, 1e-58, 1e-57, 1e-56, 1e-55, 1e-54, 1e-53, 1e-52, 1e-51, 1e-50, 1e-49, 1e-48, 1e-47, 1e-46, 1e-45, 1e-44, 1e-43, 1e-42, 1e-41, 1e-40, 1e-39, 1e-38, 1e-37, 1e-36, 1e-35, 1e-34, 1e-33, 1e-32, 1e-31, 1e-30, 1e-29, 1e-28, 1e-27, 1e-26, 1e-25, 1e-24, 1e-23, 1e-22, 1e-21, 1e-20, 1e-19, 1e-18, 1e-17, 1e-16, 1e-15, 1e-14, 1e-13, 1e-12, 1e-11, 1e-10, 1e-9, 1e-8, 1e-7, 1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, 1e20, 1e21, 1e22, 1e23, 1e24, 1e25, 1e26, 1e27, 1e28, 1e29, 1e30, 1e31, 1e32, 1e33, 1e34, 1e35, 1e36, 1e37, 1e38, 1e39, 1e40, 1e41, 1e42, 1e43, 1e44, 1e45, 1e46, 1e47, 1e48, 1e49, 1e50, 1e51, 1e52, 1e53, 1e54, 1e55, 1e56, 1e57, 1e58, 1e59, 1e60, 1e61, 1e62, 1e63, 1e64, 1e65, 1e66, 1e67, 1e68, 1e69, 1e70, 1e71, 1e72, 1e73, 1e74, 1e75, 1e76, 1e77, 1e78, 1e79, 1e80, 1e81}
)
// get the zero of MyDecimal with the specified result fraction digits
func zeroMyDecimalWithFrac(frac int8) MyDecimal {
zero := MyDecimal{}
zero.digitsFrac = frac
zero.resultFrac = frac
return zero
}
// add adds a and b and carry, returns the sum and new carry.
func add(a, b, carry int32) (sum int32, newCarry int32) {
sum = a + b + carry
if sum >= wordBase {
newCarry = 1
sum -= wordBase
} else {
newCarry = 0
}
return sum, newCarry
}
// add2 adds a and b and carry, returns the sum and new carry.
// It is only used in DecimalMul.
// nolint: revive
func add2(a, b, carry int32) (int32, int32) {
sum := int64(a) + int64(b) + int64(carry)
if sum >= wordBase {
carry = 1
sum -= wordBase
} else {
carry = 0
}
if sum >= wordBase {
sum -= wordBase
carry++
}
return int32(sum), carry
}
// sub subtracts b and carry from a, returns the diff and new carry.
func sub(a, b, carry int32) (diff int32, newCarry int32) {
diff = a - b - carry
if diff < 0 {
newCarry = 1
diff += wordBase
} else {
newCarry = 0
}
return diff, newCarry
}
// sub2 subtracts b and carry from a, returns the diff and new carry.
// the new carry may be 2.
func sub2(a, b, carry int32) (diff int32, newCarray int32) {
diff = a - b - carry
if diff < 0 {
newCarray = 1
diff += wordBase
} else {
newCarray = 0
}
if diff < 0 {
diff += wordBase
newCarray++
}
return diff, newCarray
}
// fixWordCntError limits word count in wordBufLen, and returns overflow or truncate error.
func fixWordCntError(wordsInt, wordsFrac int) (newWordsInt int, newWordsFrac int, err error) {
if wordsInt+wordsFrac > wordBufLen {
if wordsInt > wordBufLen {
return wordBufLen, 0, ErrOverflow
}
return wordsInt, wordBufLen - wordsInt, ErrTruncated
}
return wordsInt, wordsFrac, nil
}
/*
countLeadingZeroes returns the number of leading zeroes that can be removed from fraction.
@param i start index
@param word value to compare against list of powers of 10
*/
func countLeadingZeroes(i int, word int32) int {
leading := 0
for word < powers10[i] {
i--
leading++
}
return leading
}
/*
countTrailingZeros returns the number of trailing zeroes that can be removed from fraction.
@param i start index
@param word value to compare against list of powers of 10
*/
func countTrailingZeroes(i int, word int32) int {
trailing := 0
for word%powers10[i] == 0 {
i++
trailing++
}
return trailing
}
func digitsToWords(digits int) int {
if digits+digitsPerWord-1 >= 0 && digits+digitsPerWord-1 < 128 {
return div9[digits+digitsPerWord-1]
}
return (digits + digitsPerWord - 1) / digitsPerWord
}
// MyDecimalStructSize is the struct size of MyDecimal.
const MyDecimalStructSize = 40
// MyDecimal represents a decimal value.
type MyDecimal struct {
digitsInt int8 // the number of *decimal* digits before the point.
digitsFrac int8 // the number of decimal digits after the point.
resultFrac int8 // result fraction digits.
negative bool
// wordBuf is an array of int32 words.
// A word is an int32 value can hold 9 digits.(0 <= word < wordBase)
wordBuf [maxWordBufLen]int32
}
// IsNegative returns whether a decimal is negative.
func (d *MyDecimal) IsNegative() bool {
return d.negative
}
// GetDigitsFrac returns the digitsFrac.
func (d *MyDecimal) GetDigitsFrac() int8 {
return d.digitsFrac
}
// GetDigitsInt returns the digitsInt.
func (d *MyDecimal) GetDigitsInt() int8 {
return d.digitsInt
}
// String returns the decimal string representation rounded to resultFrac.
func (d *MyDecimal) String() string {
tmp := *d
err := tmp.Round(&tmp, int(tmp.resultFrac), ModeHalfUp)
terror.Log(errors.Trace(err))
return string(tmp.ToString())
}
func (d *MyDecimal) stringSize() int {
// sign, zero integer and dot.
return int(d.digitsInt + d.digitsFrac + 3)
}
func (d *MyDecimal) removeLeadingZeros() (wordIdx int, digitsInt int) {
digitsInt = int(d.digitsInt)
i := ((digitsInt - 1) % digitsPerWord) + 1
for digitsInt > 0 && d.wordBuf[wordIdx] == 0 {
digitsInt -= i
i = digitsPerWord
wordIdx++
}
if digitsInt > 0 {
digitsInt -= countLeadingZeroes((digitsInt-1)%digitsPerWord, d.wordBuf[wordIdx])
} else {
digitsInt = 0
}
return
}
func (d *MyDecimal) removeTrailingZeros() (lastWordIdx int, digitsFrac int) {
digitsFrac = int(d.digitsFrac)
i := ((digitsFrac - 1) % digitsPerWord) + 1
lastWordIdx = digitsToWords(int(d.digitsInt)) + digitsToWords(int(d.digitsFrac))
for digitsFrac > 0 && d.wordBuf[lastWordIdx-1] == 0 {
digitsFrac -= i
i = digitsPerWord
lastWordIdx--
}
if digitsFrac > 0 {
digitsFrac -= countTrailingZeroes(9-((digitsFrac-1)%digitsPerWord), d.wordBuf[lastWordIdx-1])
} else {
digitsFrac = 0
}
return
}
// ToString converts decimal to its printable string representation without rounding.
//
// RETURN VALUE
//
// str - result string
// errCode - eDecOK/eDecTruncate/eDecOverflow
func (d *MyDecimal) ToString() (str []byte) {
str = make([]byte, d.stringSize())
digitsFrac := int(d.digitsFrac)
wordStartIdx, digitsInt := d.removeLeadingZeros()
if digitsInt+digitsFrac == 0 {
digitsInt = 1
wordStartIdx = 0
}
digitsIntLen := digitsInt
if digitsIntLen == 0 {
digitsIntLen = 1
}
digitsFracLen := digitsFrac
length := digitsIntLen + digitsFracLen
if d.negative {
length++
}
if digitsFrac > 0 {
length++
}
str = str[:length]
strIdx := 0
if d.negative {
str[strIdx] = '-'
strIdx++
}
var fill int
if digitsFrac > 0 {
fracIdx := strIdx + digitsIntLen
fill = digitsFracLen - digitsFrac
wordIdx := wordStartIdx + digitsToWords(digitsInt)
str[fracIdx] = '.'
fracIdx++
for ; digitsFrac > 0; digitsFrac -= digitsPerWord {
x := d.wordBuf[wordIdx]
wordIdx++
for i := min(digitsFrac, digitsPerWord); i > 0; i-- {
y := x / digMask
str[fracIdx] = byte(y) + '0'
fracIdx++
x -= y * digMask
x *= 10
}
}
for ; fill > 0; fill-- {
str[fracIdx] = '0'
fracIdx++
}
}
fill = digitsIntLen - digitsInt
if digitsInt == 0 {
fill-- /* symbol 0 before digital point */
}
for ; fill > 0; fill-- {
str[strIdx] = '0'
strIdx++
}
if digitsInt > 0 {
strIdx += digitsInt
wordIdx := wordStartIdx + digitsToWords(digitsInt)
for ; digitsInt > 0; digitsInt -= digitsPerWord {
wordIdx--
x := d.wordBuf[wordIdx]
for i := min(digitsInt, digitsPerWord); i > 0; i-- {
y := x / 10
strIdx--
str[strIdx] = '0' + byte(x-y*10)
x = y
}
}
} else {
str[strIdx] = '0'
}
return
}
// FromString parses decimal from string.
func (d *MyDecimal) FromString(str []byte) error {
for i := range str {
if !isSpace(str[i]) {
str = str[i:]
break
}
}
if len(str) == 0 {
*d = zeroMyDecimal
return ErrTruncatedWrongVal.FastGenByArgs("DECIMAL", str)
}
switch str[0] {
case '-':
d.negative = true
fallthrough
case '+':
str = str[1:]
}
var strIdx int
for strIdx < len(str) && isDigit(str[strIdx]) {
strIdx++
}
digitsInt := strIdx
var digitsFrac int
var endIdx int
if strIdx < len(str) && str[strIdx] == '.' {
endIdx = strIdx + 1
for endIdx < len(str) && isDigit(str[endIdx]) {
endIdx++
}
digitsFrac = endIdx - strIdx - 1
} else {
digitsFrac = 0
endIdx = strIdx
}
if digitsInt+digitsFrac == 0 {
*d = zeroMyDecimal
return ErrTruncatedWrongVal.FastGenByArgs("DECIMAL", str)
}
wordsInt := digitsToWords(digitsInt)
wordsFrac := digitsToWords(digitsFrac)
wordsInt, wordsFrac, err := fixWordCntError(wordsInt, wordsFrac)
if err != nil {
digitsFrac = wordsFrac * digitsPerWord
if err == ErrOverflow {
digitsInt = wordsInt * digitsPerWord
}
}
d.digitsInt = int8(digitsInt)
d.digitsFrac = int8(digitsFrac)
wordIdx := wordsInt
strIdxTmp := strIdx
var word int32
var innerIdx int
for digitsInt > 0 {
digitsInt--
strIdx--
word += int32(str[strIdx]-'0') * powers10[innerIdx]
innerIdx++
if innerIdx == digitsPerWord {
wordIdx--
d.wordBuf[wordIdx] = word
word = 0
innerIdx = 0
}
}
if innerIdx != 0 {
wordIdx--
d.wordBuf[wordIdx] = word
}
wordIdx = wordsInt
strIdx = strIdxTmp
word = 0
innerIdx = 0
for digitsFrac > 0 {
digitsFrac--
strIdx++
word = int32(str[strIdx]-'0') + word*10
innerIdx++
if innerIdx == digitsPerWord {
d.wordBuf[wordIdx] = word
wordIdx++
word = 0
innerIdx = 0
}
}
if innerIdx != 0 {
d.wordBuf[wordIdx] = word * powers10[digitsPerWord-innerIdx]
}
if endIdx+1 <= len(str) {
if str[endIdx] == 'e' || str[endIdx] == 'E' {
exponent, err1 := strToInt(string(str[endIdx+1:]))
if err1 != nil {
err = errors.Cause(err1)
if err != ErrTruncated {
*d = zeroMyDecimal
}
}
if exponent > math.MaxInt32/2 {
negative := d.negative
maxDecimal(wordBufLen*digitsPerWord, 0, d)
d.negative = negative
err = ErrOverflow
}
if exponent < math.MinInt32/2 && err != ErrOverflow {
*d = zeroMyDecimal
err = ErrTruncated
}
if err != ErrOverflow {
shiftErr := d.Shift(int(exponent))
if shiftErr != nil {
if shiftErr == ErrOverflow {
negative := d.negative
maxDecimal(wordBufLen*digitsPerWord, 0, d)
d.negative = negative
}
err = shiftErr
}
}
} else {
trimstr := strings.TrimSpace(string(str[endIdx:]))
if len(trimstr) != 0 {
err = ErrTruncated
}
}
}
allZero := true
for i := range wordBufLen {
if d.wordBuf[i] != 0 {
allZero = false
break
}
}
if allZero {
d.negative = false
}
d.resultFrac = d.digitsFrac
return err
}
// Shift shifts decimal digits in given number (with rounding if it need), shift > 0 means shift to left shift,
// shift < 0 means right shift. In fact it is multiplying on 10^shift.
//
// RETURN
//
// eDecOK OK
// eDecOverflow operation lead to overflow, number is untoched
// eDecTruncated number was rounded to fit into buffer
func (d *MyDecimal) Shift(shift int) error {
var err error
if shift == 0 {
return nil
}
var (
// digitBegin is index of first non zero digit (all indexes from 0).
digitBegin int
// digitEnd is index of position after last decimal digit.
digitEnd int
// point is index of digit position just after point.
point = digitsToWords(int(d.digitsInt)) * digitsPerWord
// new point position.
newPoint = point + shift
// number of digits in result.
digitsInt, digitsFrac int
newFront int
)
digitBegin, digitEnd = d.digitBounds()
if digitBegin == digitEnd {
*d = zeroMyDecimal
return nil
}
digitsInt = max(newPoint-digitBegin, 0)
digitsFrac = max(digitEnd-newPoint, 0)
wordsInt := digitsToWords(digitsInt)
wordsFrac := digitsToWords(digitsFrac)
newLen := wordsInt + wordsFrac
if newLen > wordBufLen {
lack := newLen - wordBufLen
if wordsFrac < lack {
return ErrOverflow
}
/* cut off fraction part to allow new number to fit in our buffer */
err = ErrTruncated
wordsFrac -= lack
diff := digitsFrac - wordsFrac*digitsPerWord
err1 := d.Round(d, digitEnd-point-diff, ModeHalfUp)
if err1 != nil {
return errors.Trace(err1)
}
digitEnd -= diff
digitsFrac = wordsFrac * digitsPerWord
if digitEnd <= digitBegin {
/*
We lost all digits (they will be shifted out of buffer), so we can
just return 0.
*/
*d = zeroMyDecimal
return ErrTruncated
}
}
if shift%digitsPerWord != 0 {
var lMiniShift, rMiniShift, miniShift int
var doLeft bool
/*
Calculate left/right shift to align decimal digits inside our bug
digits correctly.
*/
if shift > 0 {
lMiniShift = shift % digitsPerWord
rMiniShift = digitsPerWord - lMiniShift
doLeft = lMiniShift <= digitBegin
} else {
rMiniShift = (-shift) % digitsPerWord
lMiniShift = digitsPerWord - rMiniShift
doLeft = (digitsPerWord*wordBufLen - digitEnd) < rMiniShift
}
if doLeft {
d.doMiniLeftShift(lMiniShift, digitBegin, digitEnd)
miniShift = -lMiniShift
} else {
d.doMiniRightShift(rMiniShift, digitBegin, digitEnd)
miniShift = rMiniShift
}
newPoint += miniShift
/*
If number is shifted and correctly aligned in buffer we can finish.
*/
if shift+miniShift == 0 && (newPoint-digitsInt) < digitsPerWord {
d.digitsInt = int8(digitsInt)
d.digitsFrac = int8(digitsFrac)
return err /* already shifted as it should be */
}
digitBegin += miniShift
digitEnd += miniShift
}
/* if new 'decimal front' is in first digit, we do not need move digits */
newFront = newPoint - digitsInt
if newFront >= digitsPerWord || newFront < 0 {
/* need to move digits */
var wordShift int
if newFront > 0 {
/* move left */
wordShift = newFront / digitsPerWord
to := digitBegin/digitsPerWord - wordShift
barier := (digitEnd-1)/digitsPerWord - wordShift
for ; to <= barier; to++ {
d.wordBuf[to] = d.wordBuf[to+wordShift]
}
for barier += wordShift; to <= barier; to++ {
d.wordBuf[to] = 0
}
wordShift = -wordShift
} else {
/* move right */
wordShift = (1 - newFront) / digitsPerWord
to := (digitEnd-1)/digitsPerWord + wordShift
barier := digitBegin/digitsPerWord + wordShift
for ; to >= barier; to-- {
d.wordBuf[to] = d.wordBuf[to-wordShift]
}
for barier -= wordShift; to >= barier; to-- {
d.wordBuf[to] = 0
}
}
digitShift := wordShift * digitsPerWord
digitBegin += digitShift
digitEnd += digitShift
newPoint += digitShift
}
/*
If there are gaps then fill them with 0.
Only one of following 'for' loops will work because wordIdxBegin <= wordIdxEnd.
*/
wordIdxBegin := digitBegin / digitsPerWord
wordIdxEnd := (digitEnd - 1) / digitsPerWord
wordIdxNewPoint := 0
/* We don't want negative new_point below */
if newPoint != 0 {
wordIdxNewPoint = (newPoint - 1) / digitsPerWord
}
if wordIdxNewPoint > wordIdxEnd {
for wordIdxNewPoint > wordIdxEnd {
d.wordBuf[wordIdxNewPoint] = 0
wordIdxNewPoint--
}
} else {
for ; wordIdxNewPoint < wordIdxBegin; wordIdxNewPoint++ {
d.wordBuf[wordIdxNewPoint] = 0
}
}
d.digitsInt = int8(digitsInt)
d.digitsFrac = int8(digitsFrac)
return err
}
/*
digitBounds returns bounds of decimal digits in the number.
start - index (from 0 ) of first decimal digits.
end - index of position just after last decimal digit.
*/
func (d *MyDecimal) digitBounds() (start, end int) {
var i int
bufBeg := 0
bufLen := digitsToWords(int(d.digitsInt)) + digitsToWords(int(d.digitsFrac))
bufEnd := bufLen - 1
/* find non-zero digit from number beginning */
for bufBeg < bufLen && d.wordBuf[bufBeg] == 0 {
bufBeg++
}
if bufBeg >= bufLen {
return 0, 0
}
/* find non-zero decimal digit from number beginning */
if bufBeg == 0 && d.digitsInt > 0 {
i = (int(d.digitsInt) - 1) % digitsPerWord
start = digitsPerWord - i - 1
} else {
i = digitsPerWord - 1
start = bufBeg * digitsPerWord
}
if bufBeg < bufLen {
start += countLeadingZeroes(i, d.wordBuf[bufBeg])
}
/* find non-zero digit at the end */
for bufEnd > bufBeg && d.wordBuf[bufEnd] == 0 {
bufEnd--
}
/* find non-zero decimal digit from the end */
if bufEnd == bufLen-1 && d.digitsFrac > 0 {
i = (int(d.digitsFrac)-1)%digitsPerWord + 1
end = bufEnd*digitsPerWord + i
i = digitsPerWord - i + 1
} else {
end = (bufEnd + 1) * digitsPerWord
i = 1
}
end -= countTrailingZeroes(i, d.wordBuf[bufEnd])
return start, end
}
/*
doMiniLeftShift does left shift for alignment of data in buffer.
shift number of decimal digits on which it should be shifted
beg/end bounds of decimal digits (see digitsBounds())
NOTE
Result fitting in the buffer should be garanted.
'shift' have to be from 1 to digitsPerWord-1 (inclusive)
*/
func (d *MyDecimal) doMiniLeftShift(shift, beg, end int) {
bufFrom := beg / digitsPerWord
bufEnd := (end - 1) / digitsPerWord
cShift := digitsPerWord - shift
if beg%digitsPerWord < shift {
d.wordBuf[bufFrom-1] = d.wordBuf[bufFrom] / powers10[cShift]
}
for bufFrom < bufEnd {
d.wordBuf[bufFrom] = (d.wordBuf[bufFrom]%powers10[cShift])*powers10[shift] + d.wordBuf[bufFrom+1]/powers10[cShift]
bufFrom++
}
d.wordBuf[bufFrom] = (d.wordBuf[bufFrom] % powers10[cShift]) * powers10[shift]
}
/*
doMiniRightShift does right shift for alignment of data in buffer.
shift number of decimal digits on which it should be shifted
beg/end bounds of decimal digits (see digitsBounds())
NOTE
Result fitting in the buffer should be garanted.
'shift' have to be from 1 to digitsPerWord-1 (inclusive)
*/
func (d *MyDecimal) doMiniRightShift(shift, beg, end int) {
bufFrom := (end - 1) / digitsPerWord
bufEnd := beg / digitsPerWord
cShift := digitsPerWord - shift
if digitsPerWord-((end-1)%digitsPerWord+1) < shift {
d.wordBuf[bufFrom+1] = (d.wordBuf[bufFrom] % powers10[shift]) * powers10[cShift]
}
for bufFrom > bufEnd {
d.wordBuf[bufFrom] = d.wordBuf[bufFrom]/powers10[shift] + (d.wordBuf[bufFrom-1]%powers10[shift])*powers10[cShift]
bufFrom--
}
d.wordBuf[bufFrom] = d.wordBuf[bufFrom] / powers10[shift]
}
// Round rounds the decimal to "frac" digits.
//
// to - result buffer. d == to is allowed
// frac - to what position after fraction point to round. can be negative!
// roundMode - round to nearest even or truncate
// ModeHalfUp rounds normally.
// ModeTruncate just truncates the decimal.
//
// NOTES
//
// frac can be negative !
// one TRUNCATED error (line XXX below) isn't treated very logical :(
//
// RETURN VALUE
//
// nil/ErrTruncated/ErrOverflow
func (d *MyDecimal) Round(to *MyDecimal, frac int, roundMode RoundMode) (err error) {
// wordsFracTo is the number of fraction words in buffer.
wordsFracTo := (frac + 1) / digitsPerWord
if frac > 0 {
wordsFracTo = digitsToWords(frac)
}
wordsFrac := digitsToWords(int(d.digitsFrac))
wordsInt := digitsToWords(int(d.digitsInt))
roundDigit := int32(roundMode)
/* TODO - fix this code as it won't work for CEILING mode */
if wordsInt+wordsFracTo > wordBufLen {
wordsFracTo = wordBufLen - wordsInt
frac = wordsFracTo * digitsPerWord
err = ErrTruncated
}
if int(d.digitsInt)+frac < 0 {
*to = zeroMyDecimal
return nil
}
if to != d {
copy(to.wordBuf[:], d.wordBuf[:])
to.negative = d.negative
to.digitsInt = int8(min(wordsInt, wordBufLen) * digitsPerWord)
}
if wordsFracTo > wordsFrac {
idx := wordsInt + wordsFrac
for wordsFracTo > wordsFrac {
wordsFracTo--
to.wordBuf[idx] = 0
idx++
}
to.digitsFrac = int8(frac)
to.resultFrac = to.digitsFrac
return
}
if frac >= int(d.digitsFrac) {
to.digitsFrac = int8(frac)
to.resultFrac = to.digitsFrac
return
}
// Do increment.
toIdx := wordsInt + wordsFracTo - 1
if frac == wordsFracTo*digitsPerWord {
doInc := false
switch roundMode {
// Notice: No support for ceiling mode now.
case ModeCeiling:
// If any word after scale is not zero, do increment.
// e.g ceiling 3.0001 to scale 1, gets 3.1
idx := toIdx + (wordsFrac - wordsFracTo)
for idx > toIdx {
if d.wordBuf[idx] != 0 {
doInc = true
break
}
idx--
}
case ModeHalfUp:
digAfterScale := d.wordBuf[toIdx+1] / digMask // the first digit after scale.
// If first digit after scale is equal to or greater than 5, do increment.
doInc = digAfterScale >= 5
case ModeTruncate:
// Never round, just truncate.
doInc = false
}
if doInc {
if toIdx >= 0 {
to.wordBuf[toIdx]++
} else {
toIdx++
to.wordBuf[toIdx] = wordBase
}
} else if wordsInt+wordsFracTo == 0 {
*to = zeroMyDecimal
return nil
}
} else {
/* TODO - fix this code as it won't work for CEILING mode */
pos := wordsFracTo*digitsPerWord - frac - 1
shiftedNumber := to.wordBuf[toIdx] / powers10[pos]
digAfterScale := shiftedNumber % 10
if digAfterScale > roundDigit || (roundDigit == 5 && digAfterScale == 5) {
shiftedNumber += 10
}
to.wordBuf[toIdx] = powers10[pos] * (shiftedNumber - digAfterScale)
}
/*
In case we're rounding e.g. 1.5e9 to 2.0e9, the decimal words inside
the buffer are as follows.
Before <1, 5e8>
After <2, 5e8>
Hence we need to set the 2nd field to 0.
The same holds if we round 1.5e-9 to 2e-9.
*/
if wordsFracTo < wordsFrac {
idx := wordsInt + wordsFracTo
if frac == 0 && wordsInt == 0 {
idx = 1
}
for idx < wordBufLen {
to.wordBuf[idx] = 0
idx++
}
}
// Handle carry.
var carry int32
if to.wordBuf[toIdx] >= wordBase {
carry = 1
to.wordBuf[toIdx] -= wordBase
for carry == 1 && toIdx > 0 {
toIdx--
to.wordBuf[toIdx], carry = add(to.wordBuf[toIdx], 0, carry)
}
if carry > 0 {
if wordsInt+wordsFracTo >= wordBufLen {
wordsFracTo--
frac = wordsFracTo * digitsPerWord
err = ErrTruncated
}
for toIdx = wordsInt + max(wordsFracTo, 0); toIdx > 0; toIdx-- {
if toIdx < wordBufLen {
to.wordBuf[toIdx] = to.wordBuf[toIdx-1]
} else {
err = ErrOverflow
}
}
to.wordBuf[toIdx] = 1
/* We cannot have more than 9 * 9 = 81 digits. */
if int(to.digitsInt) < digitsPerWord*wordBufLen {
to.digitsInt++
} else {
err = ErrOverflow
}
}
} else {
for {
if to.wordBuf[toIdx] != 0 {
break
}
if toIdx == 0 {
/* making 'zero' with the proper scale */
idx := wordsFracTo + 1
to.digitsInt = 1
to.digitsFrac = int8(max(frac, 0))
to.negative = false
for toIdx < idx {
to.wordBuf[toIdx] = 0
toIdx++
}
to.resultFrac = to.digitsFrac
return nil
}
toIdx--
}
}
/* Here we check 999.9 -> 1000 case when we need to increase intDigCnt */
firstDig := mod9[to.digitsInt]
if firstDig > 0 && to.wordBuf[toIdx] >= powers10[firstDig] {
to.digitsInt++
}
if frac < 0 {
frac = 0
}
to.digitsFrac = int8(frac)
to.resultFrac = to.digitsFrac
return
}
// FromParquetArray sets the decimal value from Parquet byte array representation.
// It assumes that the input buffer is disposable, which will be modified during
// the conversion.
// Note:
// 1. The input buffer will be modified in-place. Callers must pass a disposable
// copy if they need to preserve the original data.
// For the data layout stored in parquet, please refer to
// https://github.com/apache/parquet-format/blob/master/LogicalTypes.md#decimal
// 2. This function doesn't handle overflow/truncate, use it with caution.
func (d *MyDecimal) FromParquetArray(buf []byte, scale int) (err error) {
// MyDecimal's wordBuf stores absolute value, so we need to get absolute
// value from two's complement first.
d.negative = (buf[0] & 0x80) != 0
if d.negative {
for i := range buf {
buf[i] = ^buf[i]
}
for i := len(buf) - 1; i >= 0; i-- {
buf[i]++
if buf[i] != 0 {
break
}
}
}
var (
startIndex = 0
endIndex = len(buf)
)
for startIndex < endIndex && buf[startIndex] == 0 {
startIndex++
}
// Apply long‑division algorithm to do radix conversion.
wordIdx := 0
for startIndex < endIndex {
var rem uint64
for i := startIndex; i < endIndex; i++ {
v := (rem << 8) | uint64(buf[i])
q := v / ten9
rem = v % ten9
buf[i] = byte(q)
if q == 0 && i == startIndex {
startIndex++
}
}
if wordIdx >= wordBufLen {
return ErrOverflow
}
d.wordBuf[wordIdx] = int32(rem)
wordIdx++
}
for idx := range wordIdx / 2 {
d.wordBuf[idx], d.wordBuf[wordIdx-idx-1] =
d.wordBuf[wordIdx-idx-1], d.wordBuf[idx]
}
d.digitsFrac = 0
d.resultFrac = 0
d.digitsInt = int8(wordIdx * digitsPerWord)
if err := d.Shift(-scale); err != nil {
return err
}
return d.Round(d, scale, ModeTruncate)
}
// FromInt sets the decimal value from int64.
func (d *MyDecimal) FromInt(val int64) *MyDecimal {
var uVal uint64
if val < 0 {
d.negative = true
uVal = uint64(-val)
} else {
uVal = uint64(val)
}
return d.FromUint(uVal)
}
// FromUint sets the decimal value from uint64.
func (d *MyDecimal) FromUint(val uint64) *MyDecimal {
x := val
wordIdx := 1
for x >= wordBase {
wordIdx++
x /= wordBase
}
d.digitsFrac = 0
d.digitsInt = int8(wordIdx * digitsPerWord)
x = val
for wordIdx > 0 {
wordIdx--
y := x / wordBase
d.wordBuf[wordIdx] = int32(x - y*wordBase)
x = y
}
return d
}
// ToInt returns int part of the decimal, returns the result and errcode.
func (d *MyDecimal) ToInt() (int64, error) {
var x int64
wordIdx := 0
for i := d.digitsInt; i > 0; i -= digitsPerWord {
y := x
/*
Attention: trick!
we're calculating -|from| instead of |from| here
because |LONGLONG_MIN| > LONGLONG_MAX
so we can convert -9223372036854775808 correctly
*/
x = x*wordBase - int64(d.wordBuf[wordIdx])
wordIdx++
if y < math.MinInt64/wordBase || x > y {
/*
the decimal is bigger than any possible integer
return border integer depending on the sign
*/
if d.negative {
return math.MinInt64, ErrOverflow
}
return math.MaxInt64, ErrOverflow
}
}
/* boundary case: 9223372036854775808 */
if !d.negative && x == math.MinInt64 {
return math.MaxInt64, ErrOverflow
}
if !d.negative {
x = -x
}
for i := d.digitsFrac; i > 0; i -= digitsPerWord {
if d.wordBuf[wordIdx] != 0 {
return x, ErrTruncated
}
wordIdx++
}
return x, nil
}
// ToUint returns int part of the decimal, returns the result and errcode.
func (d *MyDecimal) ToUint() (uint64, error) {
if d.negative {
return 0, ErrOverflow
}
var x uint64
wordIdx := 0
for i := d.digitsInt; i > 0; i -= digitsPerWord {
y := x
x = x*wordBase + uint64(d.wordBuf[wordIdx])
wordIdx++
if y > math.MaxUint64/wordBase || x < y {
return math.MaxUint64, ErrOverflow
}
}
for i := d.digitsFrac; i > 0; i -= digitsPerWord {
if d.wordBuf[wordIdx] != 0 {
return x, ErrTruncated
}
wordIdx++
}
return x, nil
}
// FromFloat64 creates a decimal from float64 value.
func (d *MyDecimal) FromFloat64(f float64) error {
s := strconv.FormatFloat(f, 'g', -1, 64)
return d.FromString([]byte(s))
}
// ToFloat64 converts decimal to float64 value.
func (d *MyDecimal) ToFloat64() (f float64, err error) {
digitsInt := int(d.digitsInt)
digitsFrac := int(d.digitsFrac)
// https://en.wikipedia.org/wiki/Double-precision_floating-point_format#IEEE_754_double-precision_binary_floating-point_format:_binary64
// "The 53-bit significand precision gives from 15 to 17 significant decimal digits precision (2−53 ≈ 1.11 × 10−16).
// If a decimal string with at most 15 significant digits is converted to IEEE 754 double-precision representation,
// and then converted back to a decimal string with the same number of digits, the final result should match the original string."
// The new method is about 10.5X faster than the old one according to the benchmark in types/mydecimal_benchmark_test.go.
// The initial threshold here is 15, we adjusted it to 12 for compatibility with previous.
// We did a full test of 12 significant digits to make sure it's correct and behaves as before.
if digitsInt+digitsFrac > 12 {
f, err = strconv.ParseFloat(d.String(), 64)
if err != nil {
err = ErrOverflow
}
return
}
wordsInt := (digitsInt-1)/digitsPerWord + 1
wordIdx := 0
for i := 0; i < digitsInt; i += digitsPerWord {
x := d.wordBuf[wordIdx]
wordIdx++
// Equivalent to f += float64(x) * math.Pow10((wordsInt-wordIdx)*digitsPerWord)
f += float64(x) * pow10off81[(wordsInt-wordIdx)*digitsPerWord+pow10off]
}
fracStart := wordIdx
for i := 0; i < digitsFrac; i += digitsPerWord {
x := d.wordBuf[wordIdx]
wordIdx++
// Equivalent to f += float64(x) * math.Pow10(-digitsPerWord*(wordIdx-fracStart))
f += float64(x) * pow10off81[-digitsPerWord*(wordIdx-fracStart)+pow10off]
}
// Equivalent to unit := math.Pow10(int(d.resultFrac))
unit := pow10off81[int(d.resultFrac)+pow10off]
f = math.Round(f*unit) / unit
if d.negative {
f = -f
}
return
}
/*
ToBin converts decimal to its binary fixed-length representation
two representations of the same length can be compared with memcmp
with the correct -1/0/+1 result
PARAMS
precision/frac - if precision is 0, internal value of the decimal will be used,
then the encoded value is not memory comparable.
NOTE
the buffer is assumed to be of the size DecimalBinSize(precision, frac)
RETURN VALUE
bin - binary value
errCode - eDecOK/eDecTruncate/eDecOverflow
DESCRIPTION
for storage decimal numbers are converted to the "binary" format.
This format has the following properties:
1. length of the binary representation depends on the {precision, frac}
as provided by the caller and NOT on the digitsInt/digitsFrac of the decimal to
convert.
2. binary representations of the same {precision, frac} can be compared
with memcmp - with the same result as DecimalCompare() of the original
decimals (not taking into account possible precision loss during
conversion).
This binary format is as follows:
1. First the number is converted to have a requested precision and frac.
2. Every full digitsPerWord digits of digitsInt part are stored in 4 bytes
as is
3. The first digitsInt % digitesPerWord digits are stored in the reduced
number of bytes (enough bytes to store this number of digits -
see dig2bytes)
4. same for frac - full word are stored as is,
the last frac % digitsPerWord digits - in the reduced number of bytes.
5. If the number is negative - every byte is inversed.
5. The very first bit of the resulting byte array is inverted (because
memcmp compares unsigned bytes, see property 2 above)
Example:
1234567890.1234
internally is represented as 3 words
1 234567890 123400000
(assuming we want a binary representation with precision=14, frac=4)
in hex it's
00-00-00-01 0D-FB-38-D2 07-5A-EF-40
now, middle word is full - it stores 9 decimal digits. It goes
into binary representation as is:
........... 0D-FB-38-D2 ............
First word has only one decimal digit. We can store one digit in
one byte, no need to waste four:
01 0D-FB-38-D2 ............
now, last word. It's 123400000. We can store 1234 in two bytes:
01 0D-FB-38-D2 04-D2
So, we've packed 12 bytes number in 7 bytes.
And now we invert the highest bit to get the final result:
81 0D FB 38 D2 04 D2
And for -1234567890.1234 it would be
7E F2 04 C7 2D FB 2D
*/
func (d *MyDecimal) ToBin(precision, frac int) ([]byte, error) {
return d.WriteBin(precision, frac, []byte{})
}
// WriteBin encode and write the binary encoded to target buffer
func (d *MyDecimal) WriteBin(precision, frac int, buf []byte) ([]byte, error) {
if precision > digitsPerWord*maxWordBufLen || precision < 0 || frac > mysql.MaxDecimalScale || frac < 0 {
return buf, ErrBadNumber
}
var err error
var mask int32
if d.negative {
mask = -1
}
digitsInt := precision - frac
wordsInt := digitsInt / digitsPerWord
leadingDigits := digitsInt - wordsInt*digitsPerWord
wordsFrac := frac / digitsPerWord
trailingDigits := frac - wordsFrac*digitsPerWord
wordsFracFrom := int(d.digitsFrac) / digitsPerWord
trailingDigitsFrom := int(d.digitsFrac) - wordsFracFrom*digitsPerWord
intSize := wordsInt*wordSize + dig2bytes[leadingDigits]
fracSize := wordsFrac*wordSize + dig2bytes[trailingDigits]
fracSizeFrom := wordsFracFrom*wordSize + dig2bytes[trailingDigitsFrom]
originIntSize := intSize
originFracSize := fracSize
bufLen := len(buf)
if bufLen+intSize+fracSize <= cap(buf) {
buf = buf[:bufLen+intSize+fracSize]
} else {
buf = append(buf, make([]byte, intSize+fracSize)...)
}
bin := buf[bufLen:]
binIdx := 0
wordIdxFrom, digitsIntFrom := d.removeLeadingZeros()
if digitsIntFrom+fracSizeFrom == 0 {
mask = 0
digitsInt = 1
}
wordsIntFrom := digitsIntFrom / digitsPerWord
leadingDigitsFrom := digitsIntFrom - wordsIntFrom*digitsPerWord
iSizeFrom := wordsIntFrom*wordSize + dig2bytes[leadingDigitsFrom]
if digitsInt < digitsIntFrom {
wordIdxFrom += wordsIntFrom - wordsInt
if leadingDigitsFrom > 0 {
wordIdxFrom++
}
if leadingDigits > 0 {
wordIdxFrom--
}
wordsIntFrom = wordsInt
leadingDigitsFrom = leadingDigits
err = ErrOverflow
} else if intSize > iSizeFrom {
for intSize > iSizeFrom {
intSize--
bin[binIdx] = byte(mask)
binIdx++
}
}
if fracSize < fracSizeFrom ||
(fracSize == fracSizeFrom && (trailingDigits <= trailingDigitsFrom || wordsFrac <= wordsFracFrom)) {
if fracSize < fracSizeFrom || (fracSize == fracSizeFrom && trailingDigits < trailingDigitsFrom) || (fracSize == fracSizeFrom && wordsFrac < wordsFracFrom) {
err = ErrTruncated
}
wordsFracFrom = wordsFrac
trailingDigitsFrom = trailingDigits
} else if fracSize > fracSizeFrom && trailingDigitsFrom > 0 {
if wordsFrac == wordsFracFrom {
trailingDigitsFrom = trailingDigits
fracSize = fracSizeFrom
} else {
wordsFracFrom++
trailingDigitsFrom = 0
}
}
// xIntFrom part
if leadingDigitsFrom > 0 {
i := dig2bytes[leadingDigitsFrom]
x := (d.wordBuf[wordIdxFrom] % powers10[leadingDigitsFrom]) ^ mask
wordIdxFrom++
writeWord(bin[binIdx:], x, i)
binIdx += i
}
// wordsInt + wordsFrac part.
for stop := wordIdxFrom + wordsIntFrom + wordsFracFrom; wordIdxFrom < stop; binIdx += wordSize {
x := d.wordBuf[wordIdxFrom] ^ mask
wordIdxFrom++
writeWord(bin[binIdx:], x, 4)
}
// xFracFrom part
if trailingDigitsFrom > 0 {
var x int32
i := dig2bytes[trailingDigitsFrom]
lim := trailingDigits
if wordsFracFrom < wordsFrac {
lim = digitsPerWord
}
for trailingDigitsFrom < lim && dig2bytes[trailingDigitsFrom] == i {
trailingDigitsFrom++
}
x = (d.wordBuf[wordIdxFrom] / powers10[digitsPerWord-trailingDigitsFrom]) ^ mask
writeWord(bin[binIdx:], x, i)
binIdx += i
}
if fracSize > fracSizeFrom {
binIdxEnd := originIntSize + originFracSize
for fracSize > fracSizeFrom && binIdx < binIdxEnd {
fracSize--
bin[binIdx] = byte(mask)
binIdx++
}
}
bin[0] ^= 0x80
return buf, err
}
// ToHashKey removes the leading and trailing zeros and generates a hash key.
// Two Decimals dec0 and dec1 with different fraction will generate the same hash keys if dec0.Compare(dec1) == 0.
func (d *MyDecimal) ToHashKey() ([]byte, error) {
_, digitsInt := d.removeLeadingZeros()
_, digitsFrac := d.removeTrailingZeros()
prec := digitsInt + digitsFrac
if prec == 0 { // zeroDecimal
prec = 1
}
buf, err := d.ToBin(prec, digitsFrac)
if err == ErrTruncated {
// This err is caused by shorter digitsFrac;
// After removing the trailing zeros from a Decimal,
// so digitsFrac may be less than the real digitsFrac of the Decimal,
// thus ErrTruncated may be raised, we can ignore it here.
err = nil
}
buf = append(buf, byte(digitsFrac))
return buf, err
}
// HashKeySize returns the size of hash key
func (d *MyDecimal) HashKeySize() (int, error) {
_, digitsInt := d.removeLeadingZeros()
_, digitsFrac := d.removeTrailingZeros()
prec := digitsInt + digitsFrac
if prec == 0 { // zeroDecimal
prec = 1
}
size, err := DecimalBinSize(prec, digitsFrac)
if err != nil {
return 0, err
}
return size + 1, nil
}
// PrecisionAndFrac returns the internal precision and frac number.
func (d *MyDecimal) PrecisionAndFrac() (precision, frac int) {
frac = int(d.digitsFrac)
_, digitsInt := d.removeLeadingZeros()
precision = digitsInt + frac
if precision == 0 {
precision = 1
}
return
}
// IsZero checks whether it's a zero decimal.
func (d *MyDecimal) IsZero() bool {
isZero := true
for _, val := range d.wordBuf {
if val != 0 {
isZero = false
break
}
}
return isZero
}
// FromBin Restores decimal from its binary fixed-length representation.
func (d *MyDecimal) FromBin(bin []byte, precision, frac int) (binSize int, err error) {
if len(bin) == 0 {
*d = zeroMyDecimal
return 0, ErrBadNumber
}
digitsInt := precision - frac
wordsInt := digitsInt / digitsPerWord
leadingDigits := digitsInt - wordsInt*digitsPerWord
wordsFrac := frac / digitsPerWord
trailingDigits := frac - wordsFrac*digitsPerWord
wordsIntTo := wordsInt
if leadingDigits > 0 {
wordsIntTo++
}
wordsFracTo := wordsFrac
if trailingDigits > 0 {
wordsFracTo++
}
binIdx := 0
mask := int32(-1)
if bin[binIdx]&0x80 > 0 {
mask = 0
}
binSize, err = DecimalBinSize(precision, frac)
if err != nil {
return 0, err
}
if binSize < 0 || binSize > 40 {
return 0, ErrBadNumber
}
dCopy := make([]byte, 40)
dCopy = dCopy[:binSize]
copy(dCopy, bin)
dCopy[0] ^= 0x80
bin = dCopy
oldWordsIntTo := wordsIntTo
wordsIntTo, wordsFracTo, err = fixWordCntError(wordsIntTo, wordsFracTo)
if err != nil {
if wordsIntTo < oldWordsIntTo {
binIdx += dig2bytes[leadingDigits] + (wordsInt-wordsIntTo)*wordSize
} else {
trailingDigits = 0
wordsFrac = wordsFracTo
}
}
d.negative = mask != 0
d.digitsInt = int8(wordsInt*digitsPerWord + leadingDigits)
d.digitsFrac = int8(wordsFrac*digitsPerWord + trailingDigits)
wordIdx := 0
if leadingDigits > 0 {
i := dig2bytes[leadingDigits]
x := readWord(bin[binIdx:], i)
binIdx += i
d.wordBuf[wordIdx] = x ^ mask
if uint64(d.wordBuf[wordIdx]) >= uint64(powers10[leadingDigits+1]) {
*d = zeroMyDecimal
return binSize, ErrBadNumber
}
if wordIdx > 0 || d.wordBuf[wordIdx] != 0 {
wordIdx++
} else {
d.digitsInt -= int8(leadingDigits)
}
}
for stop := binIdx + wordsInt*wordSize; binIdx < stop; binIdx += wordSize {
d.wordBuf[wordIdx] = readWord(bin[binIdx:], 4) ^ mask
if uint32(d.wordBuf[wordIdx]) > wordMax {
*d = zeroMyDecimal
return binSize, ErrBadNumber
}
if wordIdx > 0 || d.wordBuf[wordIdx] != 0 {
wordIdx++
} else {
d.digitsInt -= digitsPerWord
}
}
for stop := binIdx + wordsFrac*wordSize; binIdx < stop; binIdx += wordSize {
d.wordBuf[wordIdx] = readWord(bin[binIdx:], 4) ^ mask
if uint32(d.wordBuf[wordIdx]) > wordMax {
*d = zeroMyDecimal
return binSize, ErrBadNumber
}
wordIdx++
}
if trailingDigits > 0 {
i := dig2bytes[trailingDigits]
x := readWord(bin[binIdx:], i)
d.wordBuf[wordIdx] = (x ^ mask) * powers10[digitsPerWord-trailingDigits]
if uint32(d.wordBuf[wordIdx]) > wordMax {
*d = zeroMyDecimal
return binSize, ErrBadNumber
}
}
if d.digitsInt == 0 && d.digitsFrac == 0 {
*d = zeroMyDecimal
}
d.resultFrac = int8(frac)
return binSize, err
}
// DecimalBinSize returns the size of array to hold a binary representation of a decimal.
func DecimalBinSize(precision, frac int) (int, error) {
digitsInt := precision - frac
wordsInt := digitsInt / digitsPerWord
wordsFrac := frac / digitsPerWord
xInt := digitsInt - wordsInt*digitsPerWord
xFrac := frac - wordsFrac*digitsPerWord
if xInt < 0 || xInt >= len(dig2bytes) || xFrac < 0 || xFrac >= len(dig2bytes) {
return 0, ErrBadNumber
}
return wordsInt*wordSize + dig2bytes[xInt] + wordsFrac*wordSize + dig2bytes[xFrac], nil
}
func readWord(b []byte, size int) int32 {
var x int32
switch size {
case 1:
x = int32(int8(b[0]))
case 2:
x = int32(int8(b[0]))<<8 + int32(b[1])
case 3:
if b[0]&128 > 0 {
x = int32(uint32(255)<<24 | uint32(b[0])<<16 | uint32(b[1])<<8 | uint32(b[2]))
} else {
x = int32(uint32(b[0])<<16 | uint32(b[1])<<8 | uint32(b[2]))
}
case 4:
x = int32(b[3]) + int32(b[2])<<8 + int32(b[1])<<16 + int32(int8(b[0]))<<24
}
return x
}
func writeWord(b []byte, word int32, size int) {
v := uint32(word)
switch size {
case 1:
b[0] = byte(word)
case 2:
b[0] = byte(v >> 8)
b[1] = byte(v)
case 3:
b[0] = byte(v >> 16)
b[1] = byte(v >> 8)
b[2] = byte(v)
case 4:
b[0] = byte(v >> 24)
b[1] = byte(v >> 16)
b[2] = byte(v >> 8)
b[3] = byte(v)
}
}
// Compare compares one decimal to another, returns -1/0/1.
func (d *MyDecimal) Compare(to *MyDecimal) int {
if d.negative == to.negative {
cmp, err := doSub(d, to, nil)
terror.Log(errors.Trace(err))
return cmp
}
if d.negative {
return -1
}
return 1
}
// None of ToBin, ToFloat64, or ToString can encode MyDecimal without loss.
// So we still need a MarshalJSON/UnmarshalJSON function.
type jsonMyDecimal struct {
DigitsInt int8
DigitsFrac int8
ResultFrac int8
Negative bool
WordBuf [maxWordBufLen]int32
}
// MarshalJSON implements Marshaler.MarshalJSON interface.
func (d *MyDecimal) MarshalJSON() ([]byte, error) {
var r jsonMyDecimal
r.DigitsInt = d.digitsInt
r.DigitsFrac = d.digitsFrac
r.ResultFrac = d.resultFrac
r.Negative = d.negative
r.WordBuf = d.wordBuf
return json.Marshal(r)
}
// UnmarshalJSON implements Unmarshaler.UnmarshalJSON interface.
func (d *MyDecimal) UnmarshalJSON(data []byte) error {
var r jsonMyDecimal
err := json.Unmarshal(data, &r)
if err == nil {
d.digitsInt = r.DigitsInt
d.digitsFrac = r.DigitsFrac
d.resultFrac = r.ResultFrac
d.negative = r.Negative
d.wordBuf = r.WordBuf
}
return err
}
// DecimalNeg reverses decimal's sign.
func DecimalNeg(from *MyDecimal) *MyDecimal {
to := *from
if from.IsZero() {
return &to
}
to.negative = !from.negative
return &to
}
// DecimalAdd adds two decimals, sets the result to 'to'.
// Note: DO NOT use `from1` or `from2` as `to` since the metadata
// of `to` may be changed during evaluating.
func DecimalAdd(from1, from2, to *MyDecimal) error {
from1, from2, to = validateArgs(from1, from2, to)
to.resultFrac = max(from1.resultFrac, from2.resultFrac)
if from1.negative == from2.negative {
return doAdd(from1, from2, to)
}
_, err := doSub(from1, from2, to)
return err
}
// DecimalSub subs one decimal from another, sets the result to 'to'.
func DecimalSub(from1, from2, to *MyDecimal) error {
from1, from2, to = validateArgs(from1, from2, to)
to.resultFrac = max(from1.resultFrac, from2.resultFrac)
if from1.negative == from2.negative {
_, err := doSub(from1, from2, to)
return err
}
return doAdd(from1, from2, to)
}
func validateArgs(f1, f2, to *MyDecimal) (*MyDecimal, *MyDecimal, *MyDecimal) {
if to == nil {
return f1, f2, to
}
if f1 == to {
tmp := *f1
f1 = &tmp
}
if f2 == to {
tmp := *f2
f2 = &tmp
}
to.digitsFrac = 0
to.digitsInt = 0
to.resultFrac = 0
to.negative = false
for i := range to.wordBuf {
to.wordBuf[i] = 0
}
return f1, f2, to
}
func doSub(from1, from2, to *MyDecimal) (cmp int, err error) {
var (
wordsInt1 = digitsToWords(int(from1.digitsInt))
wordsFrac1 = digitsToWords(int(from1.digitsFrac))
wordsInt2 = digitsToWords(int(from2.digitsInt))
wordsFrac2 = digitsToWords(int(from2.digitsFrac))
wordsFracTo = max(wordsFrac1, wordsFrac2)
start1 = 0
stop1 = wordsInt1
idx1 = 0
start2 = 0
stop2 = wordsInt2
idx2 = 0
)
if from1.wordBuf[idx1] == 0 {
for idx1 < stop1 && from1.wordBuf[idx1] == 0 {
idx1++
}
start1 = idx1
wordsInt1 = stop1 - idx1
}
if from2.wordBuf[idx2] == 0 {
for idx2 < stop2 && from2.wordBuf[idx2] == 0 {
idx2++
}
start2 = idx2
wordsInt2 = stop2 - idx2
}
var carry int32
if wordsInt2 > wordsInt1 {
carry = 1
} else if wordsInt2 == wordsInt1 {
end1 := stop1 + wordsFrac1 - 1
end2 := stop2 + wordsFrac2 - 1
for idx1 <= end1 && from1.wordBuf[end1] == 0 {
end1--
}
for idx2 <= end2 && from2.wordBuf[end2] == 0 {
end2--
}
wordsFrac1 = end1 - stop1 + 1
wordsFrac2 = end2 - stop2 + 1
for idx1 <= end1 && idx2 <= end2 && from1.wordBuf[idx1] == from2.wordBuf[idx2] {
idx1++
idx2++
}
if idx1 <= end1 {
if idx2 <= end2 && from2.wordBuf[idx2] > from1.wordBuf[idx1] {
carry = 1
} else {
carry = 0
}
} else {
if idx2 > end2 {
if to == nil {
return 0, nil
}
*to = zeroMyDecimalWithFrac(to.resultFrac)
return 0, nil
}
carry = 1
}
}
if to == nil {
if carry > 0 == from1.negative { // from2 is negative too.
return 1, nil
}
return -1, nil
}
to.negative = from1.negative
/* ensure that always idx1 > idx2 (and wordsInt1 >= wordsInt2) */
if carry > 0 {
from1, from2 = from2, from1
start1, start2 = start2, start1
wordsInt1, wordsInt2 = wordsInt2, wordsInt1
wordsFrac1, wordsFrac2 = wordsFrac2, wordsFrac1
to.negative = !to.negative
}
wordsInt1, wordsFracTo, err = fixWordCntError(wordsInt1, wordsFracTo)
idxTo := wordsInt1 + wordsFracTo
to.digitsFrac = max(from1.digitsFrac, from2.digitsFrac)
to.digitsInt = int8(wordsInt1 * digitsPerWord)
if err != nil {
if to.digitsFrac > int8(wordsFracTo*digitsPerWord) {
to.digitsFrac = int8(wordsFracTo * digitsPerWord)
}
if wordsFrac1 > wordsFracTo {
wordsFrac1 = wordsFracTo
}
if wordsFrac2 > wordsFracTo {
wordsFrac2 = wordsFracTo
}
if wordsInt2 > wordsInt1 {
wordsInt2 = wordsInt1
}
}
carry = 0
/* part 1 - max(frac) ... min (frac) */
if wordsFrac1 > wordsFrac2 {
idx1 = start1 + wordsInt1 + wordsFrac1
stop1 = start1 + wordsInt1 + wordsFrac2
idx2 = start2 + wordsInt2 + wordsFrac2
for wordsFracTo > wordsFrac1 {
wordsFracTo--
idxTo--
to.wordBuf[idxTo] = 0
}
for idx1 > stop1 {
idxTo--
idx1--
to.wordBuf[idxTo] = from1.wordBuf[idx1]
}
} else {
idx1 = start1 + wordsInt1 + wordsFrac1
idx2 = start2 + wordsInt2 + wordsFrac2
stop2 = start2 + wordsInt2 + wordsFrac1
for wordsFracTo > wordsFrac2 {
wordsFracTo--
idxTo--
to.wordBuf[idxTo] = 0
}
for idx2 > stop2 {
idxTo--
idx2--
to.wordBuf[idxTo], carry = sub(0, from2.wordBuf[idx2], carry)
}
}
/* part 2 - min(frac) ... wordsInt2 */
for idx2 > start2 {
idxTo--
idx1--
idx2--
to.wordBuf[idxTo], carry = sub(from1.wordBuf[idx1], from2.wordBuf[idx2], carry)
}
/* part 3 - wordsInt2 ... wordsInt1 */
for carry > 0 && idx1 > start1 {
idxTo--
idx1--
to.wordBuf[idxTo], carry = sub(from1.wordBuf[idx1], 0, carry)
}
for idx1 > start1 {
idxTo--
idx1--
to.wordBuf[idxTo] = from1.wordBuf[idx1]
}
for idxTo > 0 {
idxTo--
to.wordBuf[idxTo] = 0
}
return 0, err
}
func doAdd(from1, from2, to *MyDecimal) error {
var (
err error
wordsInt1 = digitsToWords(int(from1.digitsInt))
wordsFrac1 = digitsToWords(int(from1.digitsFrac))
wordsInt2 = digitsToWords(int(from2.digitsInt))
wordsFrac2 = digitsToWords(int(from2.digitsFrac))
wordsIntTo = max(wordsInt1, wordsInt2)
wordsFracTo = max(wordsFrac1, wordsFrac2)
)
var x int32
if wordsInt1 > wordsInt2 {
x = from1.wordBuf[0]
} else if wordsInt2 > wordsInt1 {
x = from2.wordBuf[0]
} else {
x = from1.wordBuf[0] + from2.wordBuf[0]
}
if x > wordMax-1 { /* yes, there is */
wordsIntTo++
to.wordBuf[0] = 0 /* safety */
}
wordsIntTo, wordsFracTo, err = fixWordCntError(wordsIntTo, wordsFracTo)
if err == ErrOverflow {
maxDecimal(wordBufLen*digitsPerWord, 0, to)
return err
}
idxTo := wordsIntTo + wordsFracTo
to.negative = from1.negative
to.digitsInt = int8(wordsIntTo * digitsPerWord)
to.digitsFrac = max(from1.digitsFrac, from2.digitsFrac)
if err != nil {
if to.digitsFrac > int8(wordsFracTo*digitsPerWord) {
to.digitsFrac = int8(wordsFracTo * digitsPerWord)
}
if wordsFrac1 > wordsFracTo {
wordsFrac1 = wordsFracTo
}
if wordsFrac2 > wordsFracTo {
wordsFrac2 = wordsFracTo
}
if wordsInt1 > wordsIntTo {
wordsInt1 = wordsIntTo
}
if wordsInt2 > wordsIntTo {
wordsInt2 = wordsIntTo
}
}
var dec1, dec2 = from1, from2
var idx1, idx2, stop, stop2 int
/* part 1 - max(frac) ... min (frac) */
if wordsFrac1 > wordsFrac2 {
idx1 = wordsInt1 + wordsFrac1
stop = wordsInt1 + wordsFrac2
idx2 = wordsInt2 + wordsFrac2
if wordsInt1 > wordsInt2 {
stop2 = wordsInt1 - wordsInt2
}
} else {
idx1 = wordsInt2 + wordsFrac2
stop = wordsInt2 + wordsFrac1
idx2 = wordsInt1 + wordsFrac1
if wordsInt2 > wordsInt1 {
stop2 = wordsInt2 - wordsInt1
}
dec1, dec2 = from2, from1
}
for idx1 > stop {
idxTo--
idx1--
to.wordBuf[idxTo] = dec1.wordBuf[idx1]
}
/* part 2 - min(frac) ... min(digitsInt) */
carry := int32(0)
for idx1 > stop2 {
idx1--
idx2--
idxTo--
to.wordBuf[idxTo], carry = add(dec1.wordBuf[idx1], dec2.wordBuf[idx2], carry)
}
/* part 3 - min(digitsInt) ... max(digitsInt) */
stop = 0
if wordsInt1 > wordsInt2 {
idx1 = wordsInt1 - wordsInt2
dec1 = from1
} else {
idx1 = wordsInt2 - wordsInt1
dec1 = from2
}
for idx1 > stop {
idxTo--
idx1--
to.wordBuf[idxTo], carry = add(dec1.wordBuf[idx1], 0, carry)
}
if carry > 0 {
idxTo--
to.wordBuf[idxTo] = 1
}
return err
}
func maxDecimal(precision, frac int, to *MyDecimal) {
digitsInt := precision - frac
to.negative = false
to.digitsInt = int8(digitsInt)
idx := 0
if digitsInt > 0 {
firstWordDigits := digitsInt % digitsPerWord
if firstWordDigits > 0 {
to.wordBuf[idx] = powers10[firstWordDigits] - 1 /* get 9 99 999 ... */
idx++
}
for digitsInt /= digitsPerWord; digitsInt > 0; digitsInt-- {
to.wordBuf[idx] = wordMax
idx++
}
}
to.digitsFrac = int8(frac)
if frac > 0 {
lastDigits := frac % digitsPerWord
for frac /= digitsPerWord; frac > 0; frac-- {
to.wordBuf[idx] = wordMax
idx++
}
if lastDigits > 0 {
to.wordBuf[idx] = fracMax[lastDigits-1]
}
}
}
/*
DecimalMul multiplies two decimals.
from1, from2 - factors
to - product
RETURN VALUE
E_DEC_OK/E_DEC_TRUNCATED/E_DEC_OVERFLOW;
NOTES
in this implementation, with wordSize=4 we have digitsPerWord=9,
and 63-digit number will take only 7 words (basically a 7-digit
"base 999999999" number). Thus there's no need in fast multiplication
algorithms, 7-digit numbers can be multiplied with a naive O(n*n)
method.
XXX if this library is to be used with huge numbers of thousands of
digits, fast multiplication must be implemented.
*/
func DecimalMul(from1, from2, to *MyDecimal) error {
from1, from2, to = validateArgs(from1, from2, to)
var (
err error
wordsInt1 = digitsToWords(int(from1.digitsInt))
wordsFrac1 = digitsToWords(int(from1.digitsFrac))
wordsInt2 = digitsToWords(int(from2.digitsInt))
wordsFrac2 = digitsToWords(int(from2.digitsFrac))
wordsIntTo = digitsToWords(int(from1.digitsInt) + int(from2.digitsInt))
wordsFracTo = wordsFrac1 + wordsFrac2
idx1 = wordsInt1
idx2 = wordsInt2
idxTo int
tmp1 = wordsIntTo
tmp2 = wordsFracTo
)
to.resultFrac = min(from1.resultFrac+from2.resultFrac, mysql.MaxDecimalScale)
wordsIntTo, wordsFracTo, err = fixWordCntError(wordsIntTo, wordsFracTo)
to.negative = from1.negative != from2.negative
to.digitsFrac = min(from1.digitsFrac+from2.digitsFrac, notFixedDec)
to.digitsInt = int8(wordsIntTo * digitsPerWord)
if err == ErrOverflow {
return err
}
if err != nil {
if to.digitsFrac > int8(wordsFracTo*digitsPerWord) {
to.digitsFrac = int8(wordsFracTo * digitsPerWord)
}
if to.digitsInt > int8(wordsIntTo*digitsPerWord) {
to.digitsInt = int8(wordsIntTo * digitsPerWord)
}
if tmp1 > wordsIntTo {
tmp1 -= wordsIntTo
tmp2 = tmp1 >> 1
wordsInt2 -= tmp1 - tmp2
wordsFrac1 = 0
wordsFrac2 = 0
} else {
tmp2 -= wordsFracTo
tmp1 = tmp2 >> 1
if wordsFrac1 <= wordsFrac2 {
wordsFrac1 -= tmp1
wordsFrac2 -= tmp2 - tmp1
} else {
wordsFrac2 -= tmp1
wordsFrac1 -= tmp2 - tmp1
}
}
}
startTo := wordsIntTo + wordsFracTo - 1
start2 := idx2 + wordsFrac2 - 1
stop1 := idx1 - wordsInt1
stop2 := idx2 - wordsInt2
to.wordBuf = zeroMyDecimal.wordBuf
for idx1 += wordsFrac1 - 1; idx1 >= stop1; idx1-- {
carry := int32(0)
idxTo = startTo
idx2 = start2
for idx2 >= stop2 {
var hi, lo int32
p := int64(from1.wordBuf[idx1]) * int64(from2.wordBuf[idx2])
hi = int32(p / wordBase)
lo = int32(p - int64(hi)*wordBase)
to.wordBuf[idxTo], carry = add2(to.wordBuf[idxTo], lo, carry)
carry += hi
idx2--
idxTo--
}
if carry > 0 {
if idxTo < 0 {
return ErrOverflow
}
to.wordBuf[idxTo], carry = add2(to.wordBuf[idxTo], 0, carry)
}
for idxTo--; carry > 0; idxTo-- {
if idxTo < 0 {
return ErrOverflow
}
to.wordBuf[idxTo], carry = add(to.wordBuf[idxTo], 0, carry)
}
startTo--
}
/* Now we have to check for -0.000 case */
if to.negative {
idx := 0
end := wordsIntTo + wordsFracTo
for {
if to.wordBuf[idx] != 0 {
break
}
idx++
/* We got decimal zero */
if idx == end {
*to = zeroMyDecimalWithFrac(to.resultFrac)
break
}
}
}
idxTo = 0
dToMove := wordsIntTo + digitsToWords(int(to.digitsFrac))
for to.wordBuf[idxTo] == 0 && to.digitsInt > digitsPerWord {
idxTo++
to.digitsInt -= digitsPerWord
dToMove--
}
if idxTo > 0 {
curIdx := 0
for dToMove > 0 {
to.wordBuf[curIdx] = to.wordBuf[idxTo]
curIdx++
idxTo++
dToMove--
}
}
return err
}
// DecimalDiv does division of two decimals.
//
// from1 - dividend
// from2 - divisor
// to - quotient
// fracIncr - increment of fraction
func DecimalDiv(from1, from2, to *MyDecimal, fracIncr int) error {
from1, from2, to = validateArgs(from1, from2, to)
to.resultFrac = min(from1.resultFrac+int8(fracIncr), mysql.MaxDecimalScale)
return doDivMod(from1, from2, to, nil, fracIncr)
}
/*
DecimalMod does modulus of two decimals.
from1 - dividend
from2 - divisor
to - modulus
RETURN VALUE
E_DEC_OK/E_DEC_TRUNCATED/E_DEC_OVERFLOW/E_DEC_DIV_ZERO;
NOTES
see do_div_mod()
DESCRIPTION
the modulus R in R = M mod N
is defined as
0 <= |R| < |M|
sign R == sign M
R = M - k*N, where k is integer
thus, there's no requirement for M or N to be integers
*/
func DecimalMod(from1, from2, to *MyDecimal) error {
from1, from2, to = validateArgs(from1, from2, to)
to.resultFrac = max(from1.resultFrac, from2.resultFrac)
return doDivMod(from1, from2, nil, to, 0)
}
func doDivMod(from1, from2, to, mod *MyDecimal, fracIncr int) error {
var (
frac1 = digitsToWords(int(from1.digitsFrac)) * digitsPerWord
prec1 = int(from1.digitsInt) + frac1
frac2 = digitsToWords(int(from2.digitsFrac)) * digitsPerWord
prec2 = int(from2.digitsInt) + frac2
)
if mod != nil {
to = mod
}
/* removing all the leading zeros */
i := ((prec2 - 1) % digitsPerWord) + 1
idx2 := 0
for prec2 > 0 && from2.wordBuf[idx2] == 0 {
prec2 -= i
i = digitsPerWord
idx2++
}
if prec2 <= 0 {
/* short-circuit everything: from2 == 0 */
return ErrDivByZero
}
prec2 -= countLeadingZeroes((prec2-1)%digitsPerWord, from2.wordBuf[idx2])
i = ((prec1 - 1) % digitsPerWord) + 1
idx1 := 0
for prec1 > 0 && from1.wordBuf[idx1] == 0 {
prec1 -= i
i = digitsPerWord
idx1++
}
if prec1 <= 0 {
/* short-circuit everything: from1 == 0 */
*to = zeroMyDecimalWithFrac(to.resultFrac)
return nil
}
prec1 -= countLeadingZeroes((prec1-1)%digitsPerWord, from1.wordBuf[idx1])
/* let's fix fracIncr, taking into account frac1,frac2 increase */
fracIncr -= frac1 - int(from1.digitsFrac) + frac2 - int(from2.digitsFrac)
if fracIncr < 0 {
fracIncr = 0
}
digitsIntTo := (prec1 - frac1) - (prec2 - frac2)
if from1.wordBuf[idx1] >= from2.wordBuf[idx2] {
digitsIntTo++
}
var wordsIntTo int
if digitsIntTo < 0 {
digitsIntTo /= digitsPerWord
wordsIntTo = 0
} else {
wordsIntTo = digitsToWords(digitsIntTo)
}
var wordsFracTo int
var err error
if mod != nil {
// we're calculating N1 % N2.
// The result will have
// digitsFrac=max(frac1, frac2), as for subtraction
// digitsInt=from2.digitsInt
to.negative = from1.negative
to.digitsFrac = max(from1.digitsFrac, from2.digitsFrac)
} else {
wordsFracTo = digitsToWords(frac1 + frac2 + fracIncr)
wordsIntTo, wordsFracTo, err = fixWordCntError(wordsIntTo, wordsFracTo)
to.negative = from1.negative != from2.negative
to.digitsInt = int8(wordsIntTo * digitsPerWord)
to.digitsFrac = int8(wordsFracTo * digitsPerWord)
}
idxTo := 0
stopTo := wordsIntTo + wordsFracTo
if mod == nil {
for digitsIntTo < 0 && idxTo < wordBufLen {
to.wordBuf[idxTo] = 0
idxTo++
digitsIntTo++
}
}
i = digitsToWords(prec1)
len1 := max(i+digitsToWords(2*frac2+fracIncr+1)+1, 3)
tmp1 := make([]int32, len1)
copy(tmp1, from1.wordBuf[idx1:idx1+i])
start1 := 0
var stop1 int
start2 := idx2
stop2 := idx2 + digitsToWords(prec2) - 1
/* removing end zeroes */
for from2.wordBuf[stop2] == 0 && stop2 >= start2 {
stop2--
}
len2 := stop2 - start2
stop2++
/*
calculating norm2 (normalized from2.wordBuf[start2]) - we need from2.wordBuf[start2] to be large
(at least > DIG_BASE/2), but unlike Knuth's Alg. D we don't want to
normalize input numbers (as we don't make a copy of the divisor).
Thus we normalize first dec1 of buf2 only, and we'll normalize tmp1[start1]
on the fly for the purpose of guesstimation only.
It's also faster, as we're saving on normalization of from2.
*/
normFactor := wordBase / int64(from2.wordBuf[start2]+1)
norm2 := int32(normFactor * int64(from2.wordBuf[start2]))
if len2 > 0 {
norm2 += int32(normFactor * int64(from2.wordBuf[start2+1]) / wordBase)
}
dcarry := int32(0)
if tmp1[start1] < from2.wordBuf[start2] {
dcarry = tmp1[start1]
start1++
}
// main loop
var guess int64
for ; idxTo < stopTo; idxTo++ {
/* short-circuit, if possible */
if dcarry == 0 && tmp1[start1] < from2.wordBuf[start2] {
guess = 0
} else {
/* D3: make a guess */
x := int64(tmp1[start1]) + int64(dcarry)*wordBase
y := int64(tmp1[start1+1])
guess = (normFactor*x + normFactor*y/wordBase) / int64(norm2)
if guess >= wordBase {
guess = wordBase - 1
}
if len2 > 0 {
/* remove normalization */
if int64(from2.wordBuf[start2+1])*guess > (x-guess*int64(from2.wordBuf[start2]))*wordBase+y {
guess--
}
if int64(from2.wordBuf[start2+1])*guess > (x-guess*int64(from2.wordBuf[start2]))*wordBase+y {
guess--
}
}
/* D4: multiply and subtract */
idx2 = stop2
idx1 = start1 + len2
var carry int32
for carry = 0; idx2 > start2; idx1-- {
var hi, lo int32
idx2--
x = guess * int64(from2.wordBuf[idx2])
hi = int32(x / wordBase)
lo = int32(x - int64(hi)*wordBase)
tmp1[idx1], carry = sub2(tmp1[idx1], lo, carry)
carry += hi
}
if dcarry < carry {
carry = 1
} else {
carry = 0
}
/* D5: check the remainder */
if carry > 0 {
/* D6: correct the guess */
guess--
idx2 = stop2
idx1 = start1 + len2
for carry = 0; idx2 > start2; idx1-- {
idx2--
tmp1[idx1], carry = add(tmp1[idx1], from2.wordBuf[idx2], carry)
}
}
}
if mod == nil {
to.wordBuf[idxTo] = int32(guess)
}
dcarry = tmp1[start1]
start1++
}
if mod != nil {
/*
now the result is in tmp1, it has
digitsInt=prec1-frac1
digitsFrac=max(frac1, frac2)
*/
if dcarry != 0 {
start1--
tmp1[start1] = dcarry
}
idxTo = 0
digitsIntTo = prec1 - frac1 - start1*digitsPerWord
if digitsIntTo < 0 {
/* If leading zeroes in the fractional part were earlier stripped */
wordsIntTo = digitsIntTo / digitsPerWord
} else {
wordsIntTo = digitsToWords(digitsIntTo)
}
wordsFracTo = digitsToWords(int(to.digitsFrac))
err = nil
if wordsIntTo == 0 && wordsFracTo == 0 {
*to = zeroMyDecimal
return err
}
if wordsIntTo <= 0 {
if -wordsIntTo >= wordBufLen {
*to = zeroMyDecimal
return ErrTruncated
}
stop1 = start1 + wordsIntTo + wordsFracTo
wordsFracTo += wordsIntTo
to.digitsInt = 0
for wordsIntTo < 0 {
to.wordBuf[idxTo] = 0
idxTo++
wordsIntTo++
}
} else {
if wordsIntTo > wordBufLen {
to.digitsInt = int8(digitsPerWord * wordBufLen)
to.digitsFrac = 0
return ErrOverflow
}
stop1 = start1 + wordsIntTo + wordsFracTo
to.digitsInt = int8(min(wordsIntTo*digitsPerWord, int(from2.digitsInt)))
}
if wordsIntTo+wordsFracTo > wordBufLen {
stop1 -= wordsIntTo + wordsFracTo - wordBufLen
wordsFracTo = wordBufLen - wordsIntTo
to.digitsFrac = int8(wordsFracTo * digitsPerWord)
err = ErrTruncated
}
for start1 < stop1 {
to.wordBuf[idxTo] = tmp1[start1]
idxTo++
start1++
}
}
idxTo, digitsIntTo = to.removeLeadingZeros()
to.digitsInt = int8(digitsIntTo)
if idxTo != 0 {
copy(to.wordBuf[:], to.wordBuf[idxTo:])
}
if to.IsZero() {
to.negative = false
}
return err
}
// DecimalPeak returns the length of the encoded decimal.
func DecimalPeak(b []byte) (int, error) {
if len(b) < 3 {
return 0, ErrBadNumber
}
precision := int(b[0])
frac := int(b[1])
binSize, err := DecimalBinSize(precision, frac)
if err != nil {
return 0, err
}
return binSize + 2, nil
}
// NewDecFromInt creates a MyDecimal from int.
func NewDecFromInt(i int64) *MyDecimal {
return new(MyDecimal).FromInt(i)
}
// NewDecFromUint creates a MyDecimal from uint.
func NewDecFromUint(i uint64) *MyDecimal {
return new(MyDecimal).FromUint(i)
}
// NewDecFromFloatForTest creates a MyDecimal from float, as it returns no error, it should only be used in test.
func NewDecFromFloatForTest(f float64) *MyDecimal {
dec := new(MyDecimal)
err := dec.FromFloat64(f)
if err != nil {
log.Panic("encountered error", zap.Error(err), zap.String("DecimalStr", strconv.FormatFloat(f, 'g', -1, 64)))
}
return dec
}
// NewDecFromStringForTest creates a MyDecimal from string, as it returns no error, it should only be used in test.
func NewDecFromStringForTest(s string) *MyDecimal {
dec := new(MyDecimal)
err := dec.FromString([]byte(s))
if err != nil {
log.Panic("encountered error", zap.Error(err), zap.String("DecimalStr", s))
}
return dec
}
// NewMaxOrMinDec returns the max or min value decimal for given precision and fraction.
func NewMaxOrMinDec(negative bool, prec, frac int) *MyDecimal {
str := make([]byte, prec+2)
for i := range str {
str[i] = '9'
}
if negative {
str[0] = '-'
} else {
str[0] = '+'
}
str[1+prec-frac] = '.'
dec := new(MyDecimal)
err := dec.FromString(str)
terror.Log(errors.Trace(err))
return dec
}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package types
import (
"fmt"
"math"
"time"
"github.com/pingcap/errors"
)
// AddUint64 adds uint64 a and b if no overflow, else returns error.
func AddUint64(a uint64, b uint64) (uint64, error) {
if math.MaxUint64-a < b {
return 0, ErrOverflow.GenWithStackByArgs("BIGINT UNSIGNED", fmt.Sprintf("(%d, %d)", a, b))
}
return a + b, nil
}
// AddInt64 adds int64 a and b if no overflow, otherwise returns error.
func AddInt64(a int64, b int64) (int64, error) {
if (a > 0 && b > 0 && math.MaxInt64-a < b) ||
(a < 0 && b < 0 && math.MinInt64-a > b) {
return 0, ErrOverflow.GenWithStackByArgs("BIGINT", fmt.Sprintf("(%d, %d)", a, b))
}
return a + b, nil
}
// AddDuration adds time.Duration a and b if no overflow, otherwise returns error.
func AddDuration(a time.Duration, b time.Duration) (time.Duration, error) {
if (a > 0 && b > 0 && math.MaxInt64-a < b) ||
(a < 0 && b < 0 && math.MinInt64-a > b) {
return 0, ErrOverflow.GenWithStackByArgs("BIGINT", fmt.Sprintf("(%d, %d)", int64(a), int64(b)))
}
return a + b, nil
}
// SubDuration subtracts time.Duration a with b and returns time.Duration if no overflow error.
func SubDuration(a time.Duration, b time.Duration) (time.Duration, error) {
if (a > 0 && b < 0 && math.MaxInt64-a < -b) ||
(a < 0 && b > 0 && math.MinInt64-a > -b) ||
(a == 0 && b == math.MinInt64) {
return 0, ErrOverflow.GenWithStackByArgs("BIGINT", fmt.Sprintf("(%d, %d)", a, b))
}
return a - b, nil
}
// AddInteger adds uint64 a and int64 b and returns uint64 if no overflow error.
func AddInteger(a uint64, b int64) (uint64, error) {
if b >= 0 {
return AddUint64(a, uint64(b))
}
if uint64(-b) > a {
return 0, ErrOverflow.GenWithStackByArgs("BIGINT UNSIGNED", fmt.Sprintf("(%d, %d)", a, b))
}
return a - uint64(-b), nil
}
// SubUint64 subtracts uint64 a with b and returns uint64 if no overflow error.
func SubUint64(a uint64, b uint64) (uint64, error) {
if a < b {
return 0, ErrOverflow.GenWithStackByArgs("BIGINT UNSIGNED", fmt.Sprintf("(%d, %d)", a, b))
}
return a - b, nil
}
// SubInt64 subtracts int64 a with b and returns int64 if no overflow error.
func SubInt64(a int64, b int64) (int64, error) {
if (a > 0 && b < 0 && math.MaxInt64-a < -b) ||
(a < 0 && b > 0 && math.MinInt64-a > -b) ||
(a == 0 && b == math.MinInt64) {
return 0, ErrOverflow.GenWithStackByArgs("BIGINT", fmt.Sprintf("(%d, %d)", a, b))
}
return a - b, nil
}
// SubUintWithInt subtracts uint64 a with int64 b and returns uint64 if no overflow error.
func SubUintWithInt(a uint64, b int64) (uint64, error) {
if b < 0 {
return AddUint64(a, uint64(-b))
}
return SubUint64(a, uint64(b))
}
// SubIntWithUint subtracts int64 a with uint64 b and returns uint64 if no overflow error.
func SubIntWithUint(a int64, b uint64) (uint64, error) {
if a < 0 || uint64(a) < b {
return 0, ErrOverflow.GenWithStackByArgs("BIGINT UNSIGNED", fmt.Sprintf("(%d, %d)", a, b))
}
return uint64(a) - b, nil
}
// MulUint64 multiplies uint64 a and b and returns uint64 if no overflow error.
func MulUint64(a uint64, b uint64) (uint64, error) {
if b > 0 && a > math.MaxUint64/b {
return 0, ErrOverflow.GenWithStackByArgs("BIGINT UNSIGNED", fmt.Sprintf("(%d, %d)", a, b))
}
return a * b, nil
}
// MulInt64 multiplies int64 a and b and returns int64 if no overflow error.
func MulInt64(a int64, b int64) (int64, error) {
if a == 0 || b == 0 {
return 0, nil
}
var (
res uint64
err error
negative = false
)
if a > 0 && b > 0 {
res, err = MulUint64(uint64(a), uint64(b))
} else if a < 0 && b < 0 {
res, err = MulUint64(uint64(-a), uint64(-b))
} else if a < 0 && b > 0 {
negative = true
res, err = MulUint64(uint64(-a), uint64(b))
} else {
negative = true
res, err = MulUint64(uint64(a), uint64(-b))
}
if err != nil {
return 0, errors.Trace(err)
}
if negative {
// negative result
if res > math.MaxInt64+1 {
return 0, ErrOverflow.GenWithStackByArgs("BIGINT", fmt.Sprintf("(%d, %d)", a, b))
}
return -int64(res), nil
}
// positive result
if res > math.MaxInt64 {
return 0, ErrOverflow.GenWithStackByArgs("BIGINT", fmt.Sprintf("(%d, %d)", a, b))
}
return int64(res), nil
}
// MulInteger multiplies uint64 a and int64 b, and returns uint64 if no overflow error.
func MulInteger(a uint64, b int64) (uint64, error) {
if a == 0 || b == 0 {
return 0, nil
}
if b < 0 {
return 0, ErrOverflow.GenWithStackByArgs("BIGINT UNSIGNED", fmt.Sprintf("(%d, %d)", a, b))
}
return MulUint64(a, uint64(b))
}
// DivInt64 divides int64 a with b, returns int64 if no overflow error.
// It just checks overflow, if b is zero, a "divide by zero" panic throws.
func DivInt64(a int64, b int64) (int64, error) {
if a == math.MinInt64 && b == -1 {
return 0, ErrOverflow.GenWithStackByArgs("BIGINT", fmt.Sprintf("(%d, %d)", a, b))
}
return a / b, nil
}
// DivUintWithInt divides uint64 a with int64 b, returns uint64 if no overflow error.
// It just checks overflow, if b is zero, a "divide by zero" panic throws.
func DivUintWithInt(a uint64, b int64) (uint64, error) {
if b < 0 {
if a != 0 && uint64(-b) <= a {
return 0, ErrOverflow.GenWithStackByArgs("BIGINT UNSIGNED", fmt.Sprintf("(%d, %d)", a, b))
}
return 0, nil
}
return a / uint64(b), nil
}
// DivIntWithUint divides int64 a with uint64 b, returns uint64 if no overflow error.
// It just checks overflow, if b is zero, a "divide by zero" panic throws.
func DivIntWithUint(a int64, b uint64) (uint64, error) {
if a < 0 {
if uint64(-a) >= b {
return 0, ErrOverflow.GenWithStackByArgs("BIGINT UNSIGNED", fmt.Sprintf("(%d, %d)", a, b))
}
return 0, nil
}
return uint64(a) / b, nil
}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package types
import (
"strconv"
"strings"
"github.com/pingcap/errors"
"github.com/pingcap/tidb/pkg/util/collate"
"github.com/pingcap/tidb/pkg/util/stringutil"
)
var zeroSet = Set{Name: "", Value: 0}
// Set is for MySQL Set type.
type Set struct {
Name string
Value uint64
}
// String implements fmt.Stringer interface.
func (e Set) String() string {
return e.Name
}
// ToNumber changes Set to float64 for numeric operation.
func (e Set) ToNumber() float64 {
return float64(e.Value)
}
// Copy deep copy a Set.
func (e Set) Copy() Set {
return Set{
Name: stringutil.Copy(e.Name),
Value: e.Value,
}
}
// ParseSet creates a Set with name or value.
func ParseSet(elems []string, name string, collation string) (Set, error) {
if setName, err := ParseSetName(elems, name, collation); err == nil {
return setName, nil
}
// name doesn't exist, maybe an integer?
if num, err := strconv.ParseUint(name, 0, 64); err == nil {
return ParseSetValue(elems, num)
}
return Set{}, errors.Errorf("item %s is not in Set %v", name, elems)
}
// ParseSetName creates a Set with name.
func ParseSetName(elems []string, name string, collation string) (Set, error) {
if len(name) == 0 {
return zeroSet, nil
}
ctor := collate.GetCollator(collation)
seps := strings.Split(name, ",")
marked := make(map[string]struct{}, len(seps))
for _, s := range seps {
marked[string(ctor.Key(s))] = struct{}{}
}
items := make([]string, 0, len(seps))
value := uint64(0)
for i, n := range elems {
key := string(ctor.Key(n))
if _, ok := marked[key]; ok {
value |= 1 << uint64(i)
delete(marked, key)
items = append(items, n)
}
}
if len(marked) == 0 {
return Set{Name: strings.Join(items, ","), Value: value}, nil
}
return Set{}, errors.Errorf("item %s is not in Set %v", name, elems)
}
var (
setIndexValue []uint64
setIndexInvertValue []uint64
)
func init() {
setIndexValue = make([]uint64, 64)
setIndexInvertValue = make([]uint64, 64)
for i := range 64 {
setIndexValue[i] = 1 << uint64(i)
setIndexInvertValue[i] = ^setIndexValue[i]
}
}
// ParseSetValue creates a Set with special number.
func ParseSetValue(elems []string, number uint64) (Set, error) {
if number == 0 {
return zeroSet, nil
}
value := number
var items []string
for i := range elems {
if number&setIndexValue[i] > 0 {
items = append(items, elems[i])
number &= setIndexInvertValue[i]
}
}
if number != 0 {
return Set{}, errors.Errorf("invalid number %d for Set %v", number, elems)
}
return Set{Name: strings.Join(items, ","), Value: value}, nil
}
// Copyright 2026 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package types
import "strings"
// String is a lightweight string contract for time parsing APIs.
// It lets callers mark unsafe string sources (for example, zero-copy chunk buffers)
// so error arguments can be frozen by pingcap/errors before deferred formatting.
type String interface {
String() string
}
// PlainStr is the default string wrapper for stable string sources.
type PlainStr string
// String returns the string value.
func (s PlainStr) String() string {
return string(s)
}
// HackedStr marks strings that may alias mutable buffers. It implements
// errors.HackedStr so pingcap/errors freezes the argument on error construction
// and avoids later mutations showing up in warning/error messages.
type HackedStr string
// String returns the string value.
func (s HackedStr) String() string {
return string(s)
}
// FreezeStr clones the string to detach from mutable backing storage.
func (s HackedStr) FreezeStr() string {
return strings.Clone(string(s))
}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package types
import (
"bytes"
"encoding/json"
"fmt"
"io"
"math"
"regexp"
"strconv"
"strings"
gotime "time"
"unicode"
"github.com/pingcap/errors"
"github.com/pingcap/tidb/pkg/errno"
"github.com/pingcap/tidb/pkg/parser/mysql"
"github.com/pingcap/tidb/pkg/parser/terror"
"github.com/pingcap/tidb/pkg/util/dbterror"
"github.com/pingcap/tidb/pkg/util/logutil"
"github.com/pingcap/tidb/pkg/util/mathutil"
"github.com/pingcap/tidb/pkg/util/parser"
"go.uber.org/zap"
)
// Time format without fractional seconds precision.
const (
DateFormat = gotime.DateOnly
TimeFormat = gotime.DateTime
// TimeFSPFormat is time format with fractional seconds precision.
TimeFSPFormat = "2006-01-02 15:04:05.000000"
// UTCTimeFormat is used to parse and format gotime.
UTCTimeFormat = "2006-01-02 15:04:05 UTC"
)
const (
// MinYear is the minimum for mysql year type.
MinYear int16 = 1901
// MaxYear is the maximum for mysql year type.
MaxYear int16 = 2155
// MaxDuration is the maximum for duration.
MaxDuration int64 = 838*10000 + 59*100 + 59
// MinTime is the minimum for mysql time type.
MinTime = -(838*gotime.Hour + 59*gotime.Minute + 59*gotime.Second)
// MaxTime is the maximum for mysql time type.
MaxTime = 838*gotime.Hour + 59*gotime.Minute + 59*gotime.Second
// ZeroDatetimeStr is the string representation of a zero datetime.
ZeroDatetimeStr = "0000-00-00 00:00:00"
// ZeroDateStr is the string representation of a zero date.
ZeroDateStr = "0000-00-00"
// TimeMaxHour is the max hour for mysql time type.
TimeMaxHour = 838
// TimeMaxMinute is the max minute for mysql time type.
TimeMaxMinute = 59
// TimeMaxSecond is the max second for mysql time type.
TimeMaxSecond = 59
// TimeMaxValue is the maximum value for mysql time type.
TimeMaxValue = TimeMaxHour*10000 + TimeMaxMinute*100 + TimeMaxSecond
// TimeMaxValueSeconds is the maximum second value for mysql time type.
TimeMaxValueSeconds = TimeMaxHour*3600 + TimeMaxMinute*60 + TimeMaxSecond
)
const (
// YearIndex is index of 'YEARS-MONTHS DAYS HOURS:MINUTES:SECONDS.MICROSECONDS' expr Format
YearIndex = 0 + iota
// MonthIndex is index of 'YEARS-MONTHS DAYS HOURS:MINUTES:SECONDS.MICROSECONDS' expr Format
MonthIndex
// DayIndex is index of 'YEARS-MONTHS DAYS HOURS:MINUTES:SECONDS.MICROSECONDS' expr Format
DayIndex
// HourIndex is index of 'YEARS-MONTHS DAYS HOURS:MINUTES:SECONDS.MICROSECONDS' expr Format
HourIndex
// MinuteIndex is index of 'YEARS-MONTHS DAYS HOURS:MINUTES:SECONDS.MICROSECONDS' expr Format
MinuteIndex
// SecondIndex is index of 'YEARS-MONTHS DAYS HOURS:MINUTES:SECONDS.MICROSECONDS' expr Format
SecondIndex
// MicrosecondIndex is index of 'YEARS-MONTHS DAYS HOURS:MINUTES:SECONDS.MICROSECONDS' expr Format
MicrosecondIndex
)
const (
// YearMonthMaxCnt is max parameters count 'YEARS-MONTHS' expr Format allowed
YearMonthMaxCnt = 2
// DayHourMaxCnt is max parameters count 'DAYS HOURS' expr Format allowed
DayHourMaxCnt = 2
// DayMinuteMaxCnt is max parameters count 'DAYS HOURS:MINUTES' expr Format allowed
DayMinuteMaxCnt = 3
// DaySecondMaxCnt is max parameters count 'DAYS HOURS:MINUTES:SECONDS' expr Format allowed
DaySecondMaxCnt = 4
// DayMicrosecondMaxCnt is max parameters count 'DAYS HOURS:MINUTES:SECONDS.MICROSECONDS' expr Format allowed
DayMicrosecondMaxCnt = 5
// HourMinuteMaxCnt is max parameters count 'HOURS:MINUTES' expr Format allowed
HourMinuteMaxCnt = 2
// HourSecondMaxCnt is max parameters count 'HOURS:MINUTES:SECONDS' expr Format allowed
HourSecondMaxCnt = 3
// HourMicrosecondMaxCnt is max parameters count 'HOURS:MINUTES:SECONDS.MICROSECONDS' expr Format allowed
HourMicrosecondMaxCnt = 4
// MinuteSecondMaxCnt is max parameters count 'MINUTES:SECONDS' expr Format allowed
MinuteSecondMaxCnt = 2
// MinuteMicrosecondMaxCnt is max parameters count 'MINUTES:SECONDS.MICROSECONDS' expr Format allowed
MinuteMicrosecondMaxCnt = 3
// SecondMicrosecondMaxCnt is max parameters count 'SECONDS.MICROSECONDS' expr Format allowed
SecondMicrosecondMaxCnt = 2
// TimeValueCnt is parameters count 'YEARS-MONTHS DAYS HOURS:MINUTES:SECONDS.MICROSECONDS' expr Format
TimeValueCnt = 7
)
// Zero values for different types.
var (
// ZeroDuration is the zero value for Duration type.
ZeroDuration = Duration{Duration: gotime.Duration(0), Fsp: DefaultFsp}
// ZeroCoreTime is the zero value for Time type.
ZeroTime = Time{}
// ZeroDatetime is the zero value for datetime Time.
ZeroDatetime = NewTime(ZeroCoreTime, mysql.TypeDatetime, DefaultFsp)
// ZeroTimestamp is the zero value for timestamp Time.
ZeroTimestamp = NewTime(ZeroCoreTime, mysql.TypeTimestamp, DefaultFsp)
// ZeroDate is the zero value for date Time.
ZeroDate = NewTime(ZeroCoreTime, mysql.TypeDate, DefaultFsp)
)
var (
// MinDatetime is the minimum for Golang Time type.
MinDatetime = FromDate(1, 1, 1, 0, 0, 0, 0)
// MaxDatetime is the maximum for mysql datetime type.
MaxDatetime = FromDate(9999, 12, 31, 23, 59, 59, 999999)
// BoundTimezone is the timezone for min and max timestamp.
BoundTimezone = gotime.UTC
// MinTimestamp is the minimum for mysql timestamp type.
MinTimestamp = NewTime(FromDate(1970, 1, 1, 0, 0, 1, 0), mysql.TypeTimestamp, DefaultFsp)
// MaxTimestamp is the maximum for mysql timestamp type.
MaxTimestamp = NewTime(FromDate(2038, 1, 19, 3, 14, 7, 999999), mysql.TypeTimestamp, DefaultFsp)
// WeekdayNames lists names of weekdays, which are used in builtin time function `dayname`.
WeekdayNames = []string{
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday",
}
// MonthNames lists names of months, which are used in builtin time function `monthname`.
MonthNames = []string{
"January", "February",
"March", "April",
"May", "June",
"July", "August",
"September", "October",
"November", "December",
}
)
const (
// GoDurationDay is the gotime.Duration which equals to a Day.
GoDurationDay = gotime.Hour * 24
// GoDurationWeek is the gotime.Duration which equals to a Week.
GoDurationWeek = GoDurationDay * 7
)
// FromGoTime translates time.Time to mysql time internal representation.
func FromGoTime(t gotime.Time) CoreTime {
// Plus 500 nanosecond for rounding of the millisecond part.
t = t.Add(500 * gotime.Nanosecond)
year, month, day := t.Date()
hour, minute, second := t.Clock()
microsecond := t.Nanosecond() / 1000
return FromDate(year, int(month), day, hour, minute, second, microsecond)
}
// FromDate makes a internal time representation from the given date.
func FromDate(year int, month int, day int, hour int, minute int, second int, microsecond int) CoreTime {
v := uint64(ZeroCoreTime)
v |= (uint64(microsecond) << microsecondBitFieldOffset) & microsecondBitFieldMask
v |= (uint64(second) << secondBitFieldOffset) & secondBitFieldMask
v |= (uint64(minute) << minuteBitFieldOffset) & minuteBitFieldMask
v |= (uint64(hour) << hourBitFieldOffset) & hourBitFieldMask
v |= (uint64(day) << dayBitFieldOffset) & dayBitFieldMask
v |= (uint64(month) << monthBitFieldOffset) & monthBitFieldMask
v |= (uint64(year) << yearBitFieldOffset) & yearBitFieldMask
return CoreTime(v)
}
// FromDateChecked makes a internal time representation from the given date with field overflow check.
func FromDateChecked(year, month, day, hour, minute, second, microsecond int) (CoreTime, bool) {
if uint64(year) >= (1<<yearBitFieldWidth) ||
uint64(month) >= (1<<monthBitFieldWidth) ||
uint64(day) >= (1<<dayBitFieldWidth) ||
uint64(hour) >= (1<<hourBitFieldWidth) ||
uint64(minute) >= (1<<minuteBitFieldWidth) ||
uint64(second) >= (1<<secondBitFieldWidth) ||
uint64(microsecond) >= (1<<microsecondBitFieldWidth) {
return ZeroCoreTime, false
}
return FromDate(year, month, day, hour, minute, second, microsecond), true
}
// coreTime is an alias to CoreTime, embedd in Time.
type coreTime = CoreTime
// Time is the struct for handling datetime, timestamp and date.
type Time struct {
coreTime
}
// Clock returns the hour, minute, and second within the day specified by t.
func (t Time) Clock() (hour int, minute int, second int) {
return t.Hour(), t.Minute(), t.Second()
}
const (
// Core time bit fields.
yearBitFieldOffset, yearBitFieldWidth uint64 = 50, 14
monthBitFieldOffset, monthBitFieldWidth uint64 = 46, 4
dayBitFieldOffset, dayBitFieldWidth uint64 = 41, 5
hourBitFieldOffset, hourBitFieldWidth uint64 = 36, 5
minuteBitFieldOffset, minuteBitFieldWidth uint64 = 30, 6
secondBitFieldOffset, secondBitFieldWidth uint64 = 24, 6
microsecondBitFieldOffset, microsecondBitFieldWidth uint64 = 4, 20
// fspTt bit field.
// `fspTt` format:
// | fsp: 3 bits | type: 1 bit |
// When `fsp` is valid (in range [0, 6]):
// 1. `type` bit 0 represent `DateTime`
// 2. `type` bit 1 represent `Timestamp`
//
// Since s`Date` does not require `fsp`, we could use `fspTt` == 0b1110 to represent it.
fspTtBitFieldOffset, fspTtBitFieldWidth uint64 = 0, 4
yearBitFieldMask uint64 = ((1 << yearBitFieldWidth) - 1) << yearBitFieldOffset
monthBitFieldMask uint64 = ((1 << monthBitFieldWidth) - 1) << monthBitFieldOffset
dayBitFieldMask uint64 = ((1 << dayBitFieldWidth) - 1) << dayBitFieldOffset
hourBitFieldMask uint64 = ((1 << hourBitFieldWidth) - 1) << hourBitFieldOffset
minuteBitFieldMask uint64 = ((1 << minuteBitFieldWidth) - 1) << minuteBitFieldOffset
secondBitFieldMask uint64 = ((1 << secondBitFieldWidth) - 1) << secondBitFieldOffset
microsecondBitFieldMask uint64 = ((1 << microsecondBitFieldWidth) - 1) << microsecondBitFieldOffset
fspTtBitFieldMask uint64 = ((1 << fspTtBitFieldWidth) - 1) << fspTtBitFieldOffset
fspTtForDate uint = 0b1110
fspBitFieldMask uint64 = 0b1110
coreTimeBitFieldMask = ^fspTtBitFieldMask
)
// NewTime constructs time from core time, type and fsp.
func NewTime(coreTime CoreTime, tp uint8, fsp int) Time {
t := ZeroTime
p := (*uint64)(&t.coreTime)
*p |= uint64(coreTime) & coreTimeBitFieldMask
if tp == mysql.TypeDate {
*p |= uint64(fspTtForDate)
return t
}
if fsp == UnspecifiedFsp {
fsp = DefaultFsp
}
*p |= uint64(fsp) << 1
if tp == mysql.TypeTimestamp {
*p |= 1
}
return t
}
func (t Time) getFspTt() uint {
return uint(uint64(t.coreTime) & fspTtBitFieldMask)
}
func (t *Time) setFspTt(fspTt uint) {
*(*uint64)(&t.coreTime) &= ^(fspTtBitFieldMask)
*(*uint64)(&t.coreTime) |= uint64(fspTt)
}
// Type returns type value.
func (t Time) Type() uint8 {
if t.getFspTt() == fspTtForDate {
return mysql.TypeDate
}
if uint64(t.coreTime)&1 == 1 {
return mysql.TypeTimestamp
}
return mysql.TypeDatetime
}
// Fsp returns fsp value.
func (t Time) Fsp() int {
fspTt := t.getFspTt()
if fspTt == fspTtForDate {
return 0
}
return int(fspTt >> 1)
}
// SetType updates the type in Time.
// Only DateTime/Date/Timestamp is valid.
func (t *Time) SetType(tp uint8) {
fspTt := t.getFspTt()
if fspTt == fspTtForDate && tp != mysql.TypeDate {
fspTt = 0
}
switch tp {
case mysql.TypeDate:
fspTt = fspTtForDate
case mysql.TypeTimestamp:
fspTt |= 1
case mysql.TypeDatetime:
fspTt &= ^(uint(1))
}
t.setFspTt(fspTt)
}
// SetFsp updates the fsp in Time.
func (t *Time) SetFsp(fsp int) {
if t.getFspTt() == fspTtForDate {
return
}
if fsp == UnspecifiedFsp {
fsp = DefaultFsp
}
*(*uint64)(&t.coreTime) &= ^(fspBitFieldMask)
*(*uint64)(&t.coreTime) |= uint64(fsp) << 1
}
// CoreTime returns core time.
func (t Time) CoreTime() CoreTime {
return CoreTime(uint64(t.coreTime) & coreTimeBitFieldMask)
}
// SetCoreTime updates core time.
func (t *Time) SetCoreTime(ct CoreTime) {
*(*uint64)(&t.coreTime) &= ^coreTimeBitFieldMask
*(*uint64)(&t.coreTime) |= uint64(ct) & coreTimeBitFieldMask
}
// CurrentTime returns current time with type tp.
func CurrentTime(tp uint8) Time {
return NewTime(FromGoTime(gotime.Now()), tp, 0)
}
// ConvertTimeZone converts the time value from one timezone to another.
// The input time should be a valid timestamp.
func (t *Time) ConvertTimeZone(from, to *gotime.Location) error {
if !t.IsZero() {
raw, err := t.GoTime(from)
if err != nil {
return errors.Trace(err)
}
converted := raw.In(to)
t.SetCoreTime(FromGoTime(converted))
}
return nil
}
func (t Time) String() string {
if t.Type() == mysql.TypeDate {
// We control the format, so no error would occur.
str, err := t.DateFormat("%Y-%m-%d")
terror.Log(errors.Trace(err))
return str
}
str, err := t.DateFormat("%Y-%m-%d %H:%i:%s")
terror.Log(errors.Trace(err))
fsp := t.Fsp()
if fsp > 0 {
tmp := fmt.Sprintf(".%06d", t.Microsecond())
str = str + tmp[:1+fsp]
}
return str
}
// IsZero returns a boolean indicating whether the time is equal to ZeroCoreTime.
func (t Time) IsZero() bool {
return compareTime(t.coreTime, ZeroCoreTime) == 0
}
// InvalidZero returns a boolean indicating whether the month or day is zero.
// Several functions are strict when passed a DATE() function value as their argument and reject incomplete dates with a day part of zero:
// CONVERT_TZ(), DATE_ADD(), DATE_SUB(), DAYOFYEAR(), TIMESTAMPDIFF(),
// TO_DAYS(), TO_SECONDS(), WEEK(), WEEKDAY(), WEEKOFYEAR(), YEARWEEK().
// Mysql Doc: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html
func (t Time) InvalidZero() bool {
return t.Month() == 0 || t.Day() == 0
}
const numberFormat = "%Y%m%d%H%i%s"
const dateFormat = "%Y%m%d"
// ToNumber returns a formatted number.
// e.g,
// 2012-12-12 -> 20121212
// 2012-12-12T10:10:10 -> 20121212101010
// 2012-12-12T10:10:10.123456 -> 20121212101010.123456
func (t Time) ToNumber() *MyDecimal {
dec := new(MyDecimal)
t.FillNumber(dec)
return dec
}
// FillNumber is the same as ToNumber,
// but reuses input decimal instead of allocating one.
func (t Time) FillNumber(dec *MyDecimal) {
if t.IsZero() {
dec.FromInt(0)
return
}
// Fix issue #1046
// Prevents from converting 2012-12-12 to 20121212000000
var tfStr string
if t.Type() == mysql.TypeDate {
tfStr = dateFormat
} else {
tfStr = numberFormat
}
s, err := t.DateFormat(tfStr)
if err != nil {
logutil.BgLogger().Error("never happen because we've control the format!", zap.String("category", "fatal"))
}
fsp := t.Fsp()
if fsp > 0 {
s1 := fmt.Sprintf("%s.%06d", s, t.Microsecond())
s = s1[:len(s)+fsp+1]
}
// We skip checking error here because time formatted string can be parsed certainly.
err = dec.FromString([]byte(s))
terror.Log(errors.Trace(err))
}
// Convert converts t with type tp.
func (t Time) Convert(ctx Context, tp uint8) (Time, error) {
t1 := t
if t.Type() == tp || t.IsZero() {
t1.SetType(tp)
return t1, nil
}
t1.SetType(tp)
err := t1.Check(ctx)
if tp == mysql.TypeTimestamp && ErrTimestampInDSTTransition.Equal(err) {
tAdj, adjErr := t1.AdjustedGoTime(ctx.Location())
if adjErr == nil {
ctx.AppendWarning(err)
return Time{FromGoTime(tAdj)}, nil
}
}
return t1, errors.Trace(err)
}
// ConvertToDuration converts mysql datetime, timestamp and date to mysql time type.
// e.g,
// 2012-12-12T10:10:10 -> 10:10:10
// 2012-12-12 -> 0
func (t Time) ConvertToDuration() (Duration, error) {
if t.IsZero() {
return ZeroDuration, nil
}
hour, minute, second := t.Clock()
frac := t.Microsecond() * 1000
d := gotime.Duration(hour*3600+minute*60+second)*gotime.Second + gotime.Duration(frac) //nolint:durationcheck
// TODO: check convert validation
return Duration{Duration: d, Fsp: t.Fsp()}, nil
}
// Compare returns an integer comparing the time instant t to o.
// If t is after o, returns 1, equal o, returns 0, before o, returns -1.
func (t Time) Compare(o Time) int {
return compareTime(t.coreTime, o.coreTime)
}
// CompareString is like Compare,
// but parses string to Time then compares.
func (t Time) CompareString(ctx Context, str string) (int, error) {
// use MaxFsp to parse the string
o, err := ParseTime(ctx, str, t.Type(), MaxFsp)
if err != nil {
return 0, errors.Trace(err)
}
return t.Compare(o), nil
}
// roundTime rounds the time value according to digits count specified by fsp.
func roundTime(t gotime.Time, fsp int) gotime.Time {
d := gotime.Duration(math.Pow10(9 - fsp))
return t.Round(d)
}
// RoundFrac rounds the fraction part of a time-type value according to `fsp`.
func (t Time) RoundFrac(ctx Context, fsp int) (Time, error) {
if t.Type() == mysql.TypeDate || t.IsZero() {
// date type has no fsp
return t, nil
}
fsp, err := CheckFsp(fsp)
if err != nil {
return t, errors.Trace(err)
}
if fsp == t.Fsp() {
// have same fsp
return t, nil
}
var nt CoreTime
if t1, err := t.GoTime(ctx.Location()); err == nil {
t1 = roundTime(t1, fsp)
nt = FromGoTime(t1)
} else {
// Take the hh:mm:ss part out to avoid handle month or day = 0.
hour, minute, second, microsecond := t.Hour(), t.Minute(), t.Second(), t.Microsecond()
t1 := gotime.Date(1, 1, 1, hour, minute, second, microsecond*1000, ctx.Location())
t2 := roundTime(t1, fsp)
hour, minute, second = t2.Clock()
microsecond = t2.Nanosecond() / 1000
// TODO: when hh:mm:ss overflow one day after rounding, it should be add to yy:mm:dd part,
// but mm:dd may contain 0, it makes the code complex, so we ignore it here.
if t2.Day()-1 > 0 {
return t, errors.Trace(ErrWrongValue.GenWithStackByArgs(TimeStr, t.String()))
}
var ok bool
nt, ok = FromDateChecked(t.Year(), t.Month(), t.Day(), hour, minute, second, microsecond)
if !ok {
return t, errors.Trace(ErrWrongValue.GenWithStackByArgs(TimeStr, t.String()))
}
}
return NewTime(nt, t.Type(), fsp), nil
}
// MarshalJSON implements Marshaler.MarshalJSON interface.
func (t Time) MarshalJSON() ([]byte, error) {
return json.Marshal(t.coreTime)
}
// UnmarshalJSON implements Unmarshaler.UnmarshalJSON interface.
func (t *Time) UnmarshalJSON(data []byte) error {
return json.Unmarshal(data, &t.coreTime)
}
// GetFsp gets the fsp of a string.
func GetFsp(s string) int {
index := GetFracIndex(s)
var fsp int
if index < 0 {
fsp = 0
} else {
fsp = len(s) - index - 1
}
if fsp > 6 {
fsp = 6
}
return fsp
}
// GetFracIndex finds the last '.' for get fracStr, index = -1 means fracStr not found.
// but for format like '2019.01.01 00:00:00', the index should be -1.
//
// It will not be affected by the time zone suffix.
// For format like '2020-01-01 12:00:00.123456+05:00' and `2020-01-01 12:00:00.123456-05:00`, the index should be 19.
// related issue https://github.com/pingcap/tidb/issues/35291 and https://github.com/pingcap/tidb/issues/49555
func GetFracIndex(s string) (index int) {
tzIndex, _, _, _, _ := GetTimezone(s)
var end int
if tzIndex != -1 {
end = tzIndex - 1
} else {
end = len(s) - 1
}
index = -1
for i := end; i >= 0; i-- {
if s[i] != '+' && s[i] != '-' && isPunctuation(s[i]) {
if s[i] == '.' {
index = i
}
break
}
}
return index
}
// RoundFrac rounds fractional seconds precision with new fsp and returns a new one.
// We will use the “round half up” rule, e.g, >= 0.5 -> 1, < 0.5 -> 0,
// so 2011:11:11 10:10:10.888888 round 0 -> 2011:11:11 10:10:11
// and 2011:11:11 10:10:10.111111 round 0 -> 2011:11:11 10:10:10
func RoundFrac(t gotime.Time, fsp int) (gotime.Time, error) {
_, err := CheckFsp(fsp)
if err != nil {
return t, errors.Trace(err)
}
return t.Round(gotime.Duration(math.Pow10(9-fsp)) * gotime.Nanosecond), nil //nolint:durationcheck
}
// TruncateFrac truncates fractional seconds precision with new fsp and returns a new one.
// 2011:11:11 10:10:10.888888 round 0 -> 2011:11:11 10:10:10
// 2011:11:11 10:10:10.111111 round 0 -> 2011:11:11 10:10:10
func TruncateFrac(t gotime.Time, fsp int) (gotime.Time, error) {
if _, err := CheckFsp(fsp); err != nil {
return t, err
}
return t.Truncate(gotime.Duration(math.Pow10(9-fsp)) * gotime.Nanosecond), nil //nolint:durationcheck
}
// ToPackedUint encodes Time to a packed uint64 value.
//
// 1 bit 0
// 17 bits year*13+month (year 0-9999, month 0-12)
// 5 bits day (0-31)
// 5 bits hour (0-23)
// 6 bits minute (0-59)
// 6 bits second (0-59)
// 24 bits microseconds (0-999999)
//
// Total: 64 bits = 8 bytes
//
// 0YYYYYYY.YYYYYYYY.YYdddddh.hhhhmmmm.mmssssss.ffffffff.ffffffff.ffffffff
func (t Time) ToPackedUint() (uint64, error) {
tm := t
if t.IsZero() {
return 0, nil
}
year, month, day := tm.Year(), tm.Month(), tm.Day()
hour, minute, sec := tm.Hour(), tm.Minute(), tm.Second()
ymd := uint64(((year*13 + month) << 5) | day)
hms := uint64(hour<<12 | minute<<6 | sec)
micro := uint64(tm.Microsecond())
return ((ymd<<17 | hms) << 24) | micro, nil
}
// FromPackedUint decodes Time from a packed uint64 value.
func (t *Time) FromPackedUint(packed uint64) error {
if packed == 0 {
t.SetCoreTime(ZeroCoreTime)
return nil
}
ymdhms := packed >> 24
ymd := ymdhms >> 17
day := int(ymd & (1<<5 - 1))
ym := ymd >> 5
month := int(ym % 13)
year := int(ym / 13)
hms := ymdhms & (1<<17 - 1)
second := int(hms & (1<<6 - 1))
minute := int((hms >> 6) & (1<<6 - 1))
hour := int(hms >> 12)
microsec := int(packed % (1 << 24))
t.SetCoreTime(FromDate(year, month, day, hour, minute, second, microsec))
return nil
}
// Check function checks whether t matches valid Time format.
// If allowZeroInDate is false, it returns ErrZeroDate when month or day is zero.
// FIXME: See https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_no_zero_in_date
func (t Time) Check(ctx Context) error {
allowZeroInDate := ctx.Flags().IgnoreZeroInDate()
allowInvalidDate := ctx.Flags().IgnoreInvalidDateErr()
var err error
switch t.Type() {
case mysql.TypeTimestamp:
err = checkTimestampType(t.coreTime, ctx.Location())
case mysql.TypeDatetime, mysql.TypeDate:
err = checkDatetimeType(t.coreTime, allowZeroInDate, allowInvalidDate)
}
return errors.Trace(err)
}
// Sub subtracts t1 from t, returns a duration value.
// Note that sub should not be done on different time types.
func (t *Time) Sub(ctx Context, t1 *Time) Duration {
var duration gotime.Duration
if t.Type() == mysql.TypeTimestamp && t1.Type() == mysql.TypeTimestamp {
a, err := t.GoTime(ctx.Location())
terror.Log(errors.Trace(err))
b, err := t1.GoTime(ctx.Location())
terror.Log(errors.Trace(err))
duration = a.Sub(b)
} else {
seconds, microseconds, neg := calcTimeTimeDiff(t.coreTime, t1.coreTime, 1)
duration = gotime.Duration(seconds*1e9 + microseconds*1e3)
if neg {
duration = -duration
}
}
fsp := t.Fsp()
fsp1 := t1.Fsp()
if fsp < fsp1 {
fsp = fsp1
}
return Duration{
Duration: duration,
Fsp: fsp,
}
}
// Add adds d to t, returns the result time value.
func (t *Time) Add(ctx Context, d Duration) (Time, error) {
seconds, microseconds, _ := calcTimeDurationDiff(t.coreTime, d)
days := seconds / secondsIn24Hour
year, month, day := getDateFromDaynr(uint(days))
var tm Time
tm.setYear(uint16(year))
tm.setMonth(uint8(month))
tm.setDay(uint8(day))
calcTimeFromSec(&tm.coreTime, seconds%secondsIn24Hour, microseconds)
if t.Type() == mysql.TypeDate {
tm.setHour(0)
tm.setMinute(0)
tm.setSecond(0)
tm.setMicrosecond(0)
}
fsp := max(d.Fsp, t.Fsp())
ret := NewTime(tm.coreTime, t.Type(), fsp)
return ret, ret.Check(ctx)
}
// TimestampDiff returns t2 - t1 where t1 and t2 are date or datetime expressions.
// The unit for the result (an integer) is given by the unit argument.
// The legal values for unit are "YEAR" "QUARTER" "MONTH" "DAY" "HOUR" "SECOND" and so on.
func TimestampDiff(unit string, t1 Time, t2 Time) int64 {
return timestampDiff(unit, t1.coreTime, t2.coreTime)
}
// ParseDateFormat parses a formatted date string and returns separated components.
func ParseDateFormat(format string) []string {
format = strings.TrimSpace(format)
if len(format) == 0 {
return nil
}
// Date format must start with number.
if !isDigit(format[0]) {
return nil
}
start := 0
// Initialize `seps` with capacity of 6. The input `format` is typically
// a date time of the form time.DateTime, which has 6 numeric parts
// (the fractional second part is usually removed by `splitDateTime`).
// Setting `seps`'s capacity to 6 avoids reallocation in this common case.
seps := make([]string, 0, 6)
for i := 1; i < len(format)-1; i++ {
if isValidSeparator(format[i], len(seps)) {
prevParts := len(seps)
seps = append(seps, format[start:i])
start = i + 1
// consume further consecutive separators
for j := i + 1; j < len(format); j++ {
if !isValidSeparator(format[j], prevParts) {
break
}
start++
i++
}
continue
}
if !isDigit(format[i]) {
return nil
}
}
seps = append(seps, format[start:])
return seps
}
// helper for date part splitting, punctuation characters are valid separators anywhere,
// while space and 'T' are valid separators only between date and time.
func isValidSeparator(c byte, prevParts int) bool {
if isPunctuation(c) {
return true
}
// for https://github.com/pingcap/tidb/issues/32232
if prevParts == 2 && (c == 'T' || c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r') {
return true
}
if prevParts > 4 && !isDigit(c) {
return true
}
return false
}
var validIdxCombinations = map[int]struct {
h int
m int
}{
100: {0, 0}, // 23:59:59Z
30: {2, 0}, // 23:59:59+08
50: {4, 2}, // 23:59:59+0800
63: {5, 2}, // 23:59:59+08:00
// postgres supports the following additional syntax that deviates from ISO8601, although we won't support it
// currently, it will be fairly easy to add in the current parsing framework
// 23:59:59Z+08
// 23:59:59Z+08:00
}
// GetTimezone parses the trailing timezone information of a given time string literal. If idx = -1 is returned, it
// means timezone information not found, otherwise it indicates the index of the starting index of the timezone
// information. If the timezone contains sign, hour part and/or minute part, it will be returned as is, otherwise an
// empty string will be returned.
//
// Supported syntax:
//
// MySQL compatible: ((?P<tz_sign>[-+])(?P<tz_hour>[0-9]{2}):(?P<tz_minute>[0-9]{2})){0,1}$, see
// https://dev.mysql.com/doc/refman/8.0/en/time-zone-support.html and https://dev.mysql.com/doc/refman/8.0/en/datetime.html
// the first link specified that timezone information should be in "[H]H:MM, prefixed with a + or -" while the
// second link specified that for string literal, "hour values less than than 10, a leading zero is required.".
// ISO-8601: Z|((((?P<tz_sign>[-+])(?P<tz_hour>[0-9]{2})(:(?P<tz_minute>[0-9]{2}){0,1}){0,1})|((?P<tz_minute>[0-9]{2}){0,1}){0,1}))$
// see https://www.cl.cam.ac.uk/~mgk25/iso-time.html
func GetTimezone(lit string) (idx int, tzSign, tzHour, tzSep, tzMinute string) {
idx, zidx, sidx, spidx := -1, -1, -1, -1
// idx is for the position of the starting of the timezone information
// zidx is for the z symbol
// sidx is for the sign
// spidx is for the separator
l := len(lit)
// the following loop finds the first index of Z, sign, and separator from backwards.
for i := l - 1; 0 <= i; i-- {
if lit[i] == 'Z' {
zidx = i
break
}
if sidx == -1 && (lit[i] == '-' || lit[i] == '+') {
sidx = i
}
if spidx == -1 && lit[i] == ':' {
spidx = i
}
}
// we could enumerate all valid combinations of these values and look it up in a table, see validIdxCombinations
// zidx can be -1 (23:59:59+08:00), l-1 (23:59:59Z)
// sidx can be -1, l-3, l-5, l-6
// spidx can be -1, l-3
k := 0
if l-zidx == 1 {
k += 100
}
if t := l - sidx; t == 3 || t == 5 || t == 6 {
k += t * 10
}
if l-spidx == 3 {
k += 3
}
if v, ok := validIdxCombinations[k]; ok {
hidx, midx := l-v.h, l-v.m
valid := func(v string) bool {
return '0' <= v[0] && v[0] <= '9' && '0' <= v[1] && v[1] <= '9'
}
if sidx != -1 {
tzSign = lit[sidx : sidx+1]
idx = sidx
}
if zidx != -1 {
idx = zidx
}
if (l - spidx) == 3 {
tzSep = lit[spidx : spidx+1]
}
if v.h != 0 {
tzHour = lit[hidx : hidx+2]
if !valid(tzHour) {
return -1, "", "", "", ""
}
}
if v.m != 0 {
tzMinute = lit[midx : midx+2]
if !valid(tzMinute) {
return -1, "", "", "", ""
}
}
return
}
return -1, "", "", "", ""
}
// See https://dev.mysql.com/doc/refman/5.7/en/date-and-time-literals.html.
// splitDateTime splits the string literal into 3 parts, date & time, FSP(Fractional Seconds Precision) and time zone.
// For FSP, The only delimiter recognized between a date & time part and a fractional seconds part is the decimal point,
// therefore we could look from backwards at the literal to find the index of the decimal point.
// For time zone, the possible delimiter could be +/- (w.r.t. MySQL 8.0, see
// https://dev.mysql.com/doc/refman/8.0/en/datetime.html) and Z/z (w.r.t. ISO 8601, see section Time zone in
// https://www.cl.cam.ac.uk/~mgk25/iso-time.html). We also look from backwards for the delimiter, see GetTimezone.
func splitDateTime(format string) (seps []string, fracStr string, hasTZ bool, tzSign, tzHour, tzSep, tzMinute string, truncated bool) {
tzIndex, tzSign, tzHour, tzSep, tzMinute := GetTimezone(format)
if tzIndex > 0 {
hasTZ = true
for ; tzIndex > 0 && isPunctuation(format[tzIndex-1]); tzIndex-- {
// In case of multiple separators, e.g. 2020-10--10
continue
}
format = format[:tzIndex]
}
fracIndex := GetFracIndex(format)
if fracIndex > 0 {
// Only contain digits
fracEnd := fracIndex + 1
for fracEnd < len(format) && isDigit(format[fracEnd]) {
fracEnd++
}
truncated = (fracEnd != len(format))
fracStr = format[fracIndex+1 : fracEnd]
for ; fracIndex > 0 && isPunctuation(format[fracIndex-1]); fracIndex-- {
// In case of multiple separators, e.g. 2020-10..10
continue
}
format = format[:fracIndex]
}
seps = ParseDateFormat(format)
return
}
// See https://dev.mysql.com/doc/refman/5.7/en/date-and-time-literals.html.
func parseDatetime(ctx Context, str String, fsp int, isFloat bool) (Time, error) {
var (
year, month, day, hour, minute, second, deltaHour, deltaMinute int
fracStr string
tzSign, tzHour, tzSep, tzMinute string
hasTZ, hhmmss bool
err error
)
rawStr := str.String()
seps, fracStr, hasTZ, tzSign, tzHour, tzSep, tzMinute, truncatedOrIncorrect := splitDateTime(rawStr)
if truncatedOrIncorrect {
ctx.AppendWarning(ErrTruncatedWrongVal.FastGenByArgs("datetime", str))
}
/*
if we have timezone parsed, there are the following cases to be considered, however some of them are wrongly parsed, and we should consider absorb them back to seps.
1. Z, then it must be time zone information, and we should not tamper with it
2. -HH, it might be from
1. no fracStr
1. YYYY-MM-DD
2. YYYY-MM-DD-HH
3. YYYY-MM-DD HH-MM
4. YYYY-MM-DD HH:MM-SS
5. YYYY-MM-DD HH:MM:SS-HH (correct, no need absorb)
2. with fracStr
1. YYYY.MM-DD
2. YYYY-MM.DD-HH
3. YYYY-MM-DD.HH-MM
4. YYYY-MM-DD HH.MM-SS
5. YYYY-MM-DD HH:MM.SS-HH (correct, no need absorb)
3. -HH:MM, similarly it might be from
1. no fracStr
1. YYYY-MM:DD
2. YYYY-MM-DD:HH
3. YYYY-MM-DD-HH:MM
4. YYYY-MM-DD HH-MM:SS
5. YYYY-MM-DD HH:MM-SS:HH (invalid)
6. YYYY-MM-DD HH:MM:SS-HH:MM (correct, no need absorb)
2. with fracStr
1. YYYY.MM-DD:HH
2. YYYY-MM.DD-HH:MM
3. YYYY-MM-DD.HH-MM:SS
4. YYYY-MM-DD HH.MM-SS:HH (invalid)
5. YYYY-MM-DD HH:MM.SS-HH:MM (correct, no need absorb)
4. -HHMM, there should only be one case, that is both the date and time part have existed, only then could we have fracStr or time zone
1. YYYY-MM-DD HH:MM:SS.FSP-HHMM (correct, no need absorb)
to summarize, FSP and timezone is only valid if we have date and time presented, otherwise we should consider absorbing
FSP or timezone into seps. additionally, if we want to absorb timezone, we either absorb them all, or not, meaning
we won't only absorb tzHour but not tzMinute.
additional case to consider is that when the time literal is presented in float string (e.g. `YYYYMMDD.HHMMSS`), in
this case, FSP should not be absorbed and only `+HH:MM` would be allowed (i.e. Z, +HHMM, +HH that comes from ISO8601
should be banned), because it only conforms to MySQL's timezone parsing logic, but it is not valid in ISO8601.
However, I think it is generally acceptable to allow a wider spectrum of timezone format in string literal.
*/
// noAbsorb tests if can absorb FSP or TZ
noAbsorb := func(seps []string) bool {
// if we have more than 5 parts (i.e. 6), the tailing part can't be absorbed
// or if we only have 1 part, but its length is longer than 4, then it is at least YYMMD, in this case, FSP can
// not be absorbed, and it will be handled later, and the leading sign prevents TZ from being absorbed, because
// if date part has no separators, we can't use -/+ as separators between date & time.
return len(seps) > 5 || (len(seps) == 1 && len(seps[0]) > 4)
}
if len(fracStr) != 0 && !isFloat {
if !noAbsorb(seps) {
seps = append(seps, fracStr)
fracStr = ""
}
}
if hasTZ && tzSign != "" {
// if tzSign is empty, we can be sure that the string literal contains timezone (such as 2010-10-10T10:10:10Z),
// therefore we could safely skip this branch.
if !noAbsorb(seps) && !(tzMinute != "" && tzSep == "") {
// we can't absorb timezone if there is no separate between tzHour and tzMinute
if len(tzHour) != 0 {
seps = append(seps, tzHour)
}
if len(tzMinute) != 0 {
seps = append(seps, tzMinute)
}
hasTZ = false
}
}
switch len(seps) {
case 0:
return ZeroDatetime, errors.Trace(ErrWrongValue.GenWithStackByArgs(DateTimeStr, str))
case 1:
l := len(seps[0])
// Values specified as numbers
if isFloat {
numOfTime, err := StrToInt(ctx, seps[0], false)
if err != nil {
return ZeroDatetime, errors.Trace(ErrWrongValue.GenWithStackByArgs(DateTimeStr, str))
}
dateTime, err := ParseDatetimeFromNum(ctx, numOfTime)
if err != nil {
return ZeroDatetime, errors.Trace(ErrWrongValue.GenWithStackByArgs(DateTimeStr, str))
}
year, month, day, hour, minute, second =
dateTime.Year(), dateTime.Month(), dateTime.Day(), dateTime.Hour(), dateTime.Minute(), dateTime.Second()
// case: 0.XXX or like "20170118.999"
if seps[0] == "0" || (l >= 9 && l <= 14) {
hhmmss = true
}
break
}
// Values specified as strings
switch l {
case 14: // No delimiter.
// YYYYMMDDHHMMSS
_, err = fmt.Sscanf(seps[0], "%4d%2d%2d%2d%2d%2d", &year, &month, &day, &hour, &minute, &second)
hhmmss = true
case 12: // YYMMDDHHMMSS
_, err = fmt.Sscanf(seps[0], "%2d%2d%2d%2d%2d%2d", &year, &month, &day, &hour, &minute, &second)
year = adjustYear(year)
hhmmss = true
case 11: // YYMMDDHHMMS
_, err = fmt.Sscanf(seps[0], "%2d%2d%2d%2d%2d%1d", &year, &month, &day, &hour, &minute, &second)
year = adjustYear(year)
hhmmss = true
case 10: // YYMMDDHHMM
_, err = fmt.Sscanf(seps[0], "%2d%2d%2d%2d%2d", &year, &month, &day, &hour, &minute)
year = adjustYear(year)
case 9: // YYMMDDHHM
_, err = fmt.Sscanf(seps[0], "%2d%2d%2d%2d%1d", &year, &month, &day, &hour, &minute)
year = adjustYear(year)
case 8: // YYYYMMDD
_, err = fmt.Sscanf(seps[0], "%4d%2d%2d", &year, &month, &day)
case 7: // YYMMDDH
_, err = fmt.Sscanf(seps[0], "%2d%2d%2d%1d", &year, &month, &day, &hour)
year = adjustYear(year)
case 6, 5:
// YYMMDD && YYMMD
_, err = fmt.Sscanf(seps[0], "%2d%2d%2d", &year, &month, &day)
year = adjustYear(year)
default:
return ZeroDatetime, errors.Trace(ErrWrongValue.GenWithStackByArgs(TimeStr, str))
}
if l == 5 || l == 6 || l == 8 {
// YYMMDD or YYYYMMDD
// We must handle float => string => datetime, the difference is that fractional
// part of float type is discarded directly, while fractional part of string type
// is parsed to HH:MM:SS.
if !isFloat {
// '20170118.123423' => 2017-01-18 12:34:23.234
switch len(fracStr) {
case 0:
case 1, 2:
_, err = fmt.Sscanf(fracStr, "%2d ", &hour)
case 3, 4:
_, err = fmt.Sscanf(fracStr, "%2d%2d ", &hour, &minute)
default:
_, err = fmt.Sscanf(fracStr, "%2d%2d%2d ", &hour, &minute, &second)
}
truncatedOrIncorrect = err != nil
}
// 20170118.123423 => 2017-01-18 00:00:00
}
if l == 9 || l == 10 {
if len(fracStr) == 0 {
second = 0
} else {
_, err = fmt.Sscanf(fracStr, "%2d ", &second)
}
truncatedOrIncorrect = err != nil
}
if truncatedOrIncorrect {
ctx.AppendWarning(ErrTruncatedWrongVal.FastGenByArgs("datetime", str))
err = nil
}
case 2:
return ZeroDatetime, errors.Trace(ErrWrongValue.FastGenByArgs(DateTimeStr, str))
case 3:
// YYYY-MM-DD
err = scanTimeArgs(seps, &year, &month, &day)
case 4:
// YYYY-MM-DD HH
err = scanTimeArgs(seps, &year, &month, &day, &hour)
case 5:
// YYYY-MM-DD HH-MM
err = scanTimeArgs(seps, &year, &month, &day, &hour, &minute)
case 6:
// We don't have fractional seconds part.
// YYYY-MM-DD HH-MM-SS
err = scanTimeArgs(seps, &year, &month, &day, &hour, &minute, &second)
hhmmss = true
default:
// For case like `2020-05-28 23:59:59 00:00:00`, the seps should be > 6, the reluctant parts should be truncated.
seps = seps[:6]
// YYYY-MM-DD HH-MM-SS
ctx.AppendWarning(ErrTruncatedWrongVal.FastGenByArgs("datetime", str))
err = scanTimeArgs(seps, &year, &month, &day, &hour, &minute, &second)
hhmmss = true
}
if err != nil {
if err == io.EOF {
return ZeroDatetime, errors.Trace(ErrWrongValue.GenWithStackByArgs(DateTimeStr, str))
}
return ZeroDatetime, errors.Trace(err)
}
// If str is sepereated by delimiters, the first one is year, and if the year is 1/2 digit,
// we should adjust it.
// TODO: adjust year is very complex, now we only consider the simplest way.
if len(seps[0]) <= 2 && !isFloat {
if !(year == 0 && month == 0 && day == 0 && hour == 0 && minute == 0 && second == 0 && fracStr == "") {
year = adjustYear(year)
}
// Skip a special case "00-00-00".
}
var microsecond int
var overflow bool
if hhmmss {
// If input string is "20170118.999", without hhmmss, fsp is meaningless.
// TODO: this case is not only meaningless, but erroneous, please confirm.
microsecond, overflow, err = ParseFrac(fracStr, fsp)
if err != nil {
return ZeroDatetime, errors.Trace(err)
}
}
tmp, ok := FromDateChecked(year, month, day, hour, minute, second, microsecond)
if !ok {
return ZeroDatetime, errors.Trace(ErrWrongValue.GenWithStackByArgs(DateTimeStr, str))
}
if overflow {
// Convert to Go time and add 1 second, to handle input like 2017-01-05 08:40:59.575601
var t1 gotime.Time
if t1, err = tmp.GoTime(ctx.Location()); err != nil {
return ZeroDatetime, errors.Trace(err)
}
tmp = FromGoTime(t1.Add(gotime.Second))
}
if hasTZ {
// without hhmmss, timezone is also meaningless
if !hhmmss {
return ZeroDatetime, errors.Trace(ErrWrongValue.GenWithStack(DateTimeStr, str))
}
if len(tzHour) != 0 {
deltaHour = int((tzHour[0]-'0')*10 + (tzHour[1] - '0'))
}
if len(tzMinute) != 0 {
deltaMinute = int((tzMinute[0]-'0')*10 + (tzMinute[1] - '0'))
}
// allowed delta range is [-14:00, 14:00], and we will intentionally reject -00:00
if deltaHour > 14 || deltaMinute > 59 || (deltaHour == 14 && deltaMinute != 0) || (tzSign == "-" && deltaHour == 0 && deltaMinute == 0) {
return ZeroDatetime, errors.Trace(ErrWrongValue.GenWithStackByArgs(DateTimeStr, str))
}
// by default, if the temporal string literal does not contain timezone information, it will be in the timezone
// specified by the time_zone system variable. However, if the timezone is specified in the string literal, we
// will use the specified timezone to interpret the string literal and convert it into the system timezone.
offset := deltaHour*60*60 + deltaMinute*60
if tzSign == "-" {
offset = -offset
}
loc := gotime.FixedZone(fmt.Sprintf("UTC%s%s:%s", tzSign, tzHour, tzMinute), offset)
t1, err := tmp.GoTime(loc)
if err != nil {
return ZeroDatetime, errors.Trace(err)
}
t1 = t1.In(ctx.Location())
tmp = FromGoTime(t1)
}
nt := NewTime(tmp, mysql.TypeDatetime, fsp)
return nt, nil
}
func scanTimeArgs(seps []string, args ...*int) error {
if len(seps) != len(args) {
return errors.Trace(ErrWrongValue.GenWithStackByArgs(TimeStr, seps))
}
var err error
for i, s := range seps {
*args[i], err = strconv.Atoi(s)
if err != nil {
return errors.Trace(err)
}
}
return nil
}
// ParseYear parses a formatted string and returns a year number.
func ParseYear(str string) (int16, error) {
v, err := strconv.ParseInt(str, 10, 16)
if err != nil {
return 0, errors.Trace(err)
}
y := int16(v)
if len(str) == 2 || len(str) == 1 {
y = int16(adjustYear(int(y)))
} else if len(str) != 4 {
return 0, errors.Trace(ErrInvalidYearFormat)
}
if y < MinYear || y > MaxYear {
return 0, errors.Trace(ErrInvalidYearFormat)
}
return y, nil
}
// adjustYear adjusts year according to y.
// See https://dev.mysql.com/doc/refman/5.7/en/two-digit-years.html
func adjustYear(y int) int {
if y >= 0 && y <= 69 {
y = 2000 + y
} else if y >= 70 && y <= 99 {
y = 1900 + y
}
return y
}
// AdjustYear is used for adjusting year and checking its validation.
func AdjustYear(y int64, adjustZero bool) (int64, error) {
if y == 0 && !adjustZero {
return y, nil
}
y = int64(adjustYear(int(y)))
if y < 0 {
return 0, errors.Trace(ErrWarnDataOutOfRange)
}
if y < int64(MinYear) {
return int64(MinYear), errors.Trace(ErrWarnDataOutOfRange)
}
if y > int64(MaxYear) {
return int64(MaxYear), errors.Trace(ErrWarnDataOutOfRange)
}
return y, nil
}
// NewDuration construct duration with time.
func NewDuration(hour, minute, second, microsecond int, fsp int) Duration {
return Duration{
Duration: gotime.Duration(hour)*gotime.Hour + gotime.Duration(minute)*gotime.Minute + gotime.Duration(second)*gotime.Second + gotime.Duration(microsecond)*gotime.Microsecond, //nolint:durationcheck
Fsp: fsp,
}
}
// Duration is the type for MySQL TIME type.
type Duration struct {
gotime.Duration
// Fsp is short for Fractional Seconds Precision.
// See http://dev.mysql.com/doc/refman/5.7/en/fractional-seconds.html
Fsp int
}
// MaxMySQLDuration returns Duration with maximum mysql time.
func MaxMySQLDuration(fsp int) Duration {
return NewDuration(TimeMaxHour, TimeMaxMinute, TimeMaxSecond, 0, fsp)
}
// Neg negative d, returns a duration value.
func (d Duration) Neg() Duration {
return Duration{
Duration: -d.Duration,
Fsp: d.Fsp,
}
}
// Add adds d to d, returns a duration value.
func (d Duration) Add(v Duration) (Duration, error) {
if v == (Duration{}) {
return d, nil
}
dsum, err := AddInt64(int64(d.Duration), int64(v.Duration))
if err != nil {
return Duration{}, errors.Trace(err)
}
if d.Fsp >= v.Fsp {
return Duration{Duration: gotime.Duration(dsum), Fsp: d.Fsp}, nil
}
return Duration{Duration: gotime.Duration(dsum), Fsp: v.Fsp}, nil
}
// Sub subtracts d to d, returns a duration value.
func (d Duration) Sub(v Duration) (Duration, error) {
if v == (Duration{}) {
return d, nil
}
dsum, err := SubInt64(int64(d.Duration), int64(v.Duration))
if err != nil {
return Duration{}, errors.Trace(err)
}
if d.Fsp >= v.Fsp {
return Duration{Duration: gotime.Duration(dsum), Fsp: d.Fsp}, nil
}
return Duration{Duration: gotime.Duration(dsum), Fsp: v.Fsp}, nil
}
// DurationFormat returns a textual representation of the duration value formatted
// according to layout.
// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format
func (d Duration) DurationFormat(layout string) (string, error) {
var buf bytes.Buffer
inPatternMatch := false
for _, b := range layout {
if inPatternMatch {
if err := d.convertDateFormat(b, &buf); err != nil {
return "", errors.Trace(err)
}
inPatternMatch = false
continue
}
// It's not in pattern match now.
if b == '%' {
inPatternMatch = true
} else {
buf.WriteRune(b)
}
}
return buf.String(), nil
}
func (d Duration) convertDateFormat(b rune, buf *bytes.Buffer) error {
switch b {
case 'H':
buf.WriteString(FormatIntWidthN(d.Hour(), 2))
case 'k':
buf.WriteString(strconv.FormatInt(int64(d.Hour()), 10))
case 'h', 'I':
t := d.Hour()
if t%12 == 0 {
buf.WriteString("12")
} else {
buf.WriteString(FormatIntWidthN(t%12, 2))
}
case 'l':
t := d.Hour()
if t%12 == 0 {
buf.WriteString("12")
} else {
buf.WriteString(strconv.FormatInt(int64(t%12), 10))
}
case 'i':
buf.WriteString(FormatIntWidthN(d.Minute(), 2))
case 'p':
hour := d.Hour()
if hour/12%2 == 0 {
buf.WriteString("AM")
} else {
buf.WriteString("PM")
}
case 'r':
h := d.Hour()
h %= 24
switch {
case h == 0:
fmt.Fprintf(buf, "%02d:%02d:%02d AM", 12, d.Minute(), d.Second())
case h == 12:
fmt.Fprintf(buf, "%02d:%02d:%02d PM", 12, d.Minute(), d.Second())
case h < 12:
fmt.Fprintf(buf, "%02d:%02d:%02d AM", h, d.Minute(), d.Second())
default:
fmt.Fprintf(buf, "%02d:%02d:%02d PM", h-12, d.Minute(), d.Second())
}
case 'T':
fmt.Fprintf(buf, "%02d:%02d:%02d", d.Hour(), d.Minute(), d.Second())
case 'S', 's':
buf.WriteString(FormatIntWidthN(d.Second(), 2))
case 'f':
fmt.Fprintf(buf, "%06d", d.MicroSecond())
default:
buf.WriteRune(b)
}
return nil
}
// String returns the time formatted using default TimeFormat and fsp.
func (d Duration) String() string {
var buf bytes.Buffer
sign, hours, minutes, seconds, fraction := splitDuration(d.Duration)
if sign < 0 {
buf.WriteByte('-')
}
fmt.Fprintf(&buf, "%02d:%02d:%02d", hours, minutes, seconds)
if d.Fsp > 0 {
buf.WriteString(".")
buf.WriteString(d.formatFrac(fraction))
}
p := buf.String()
return p
}
func (d Duration) formatFrac(frac int) string {
s := fmt.Sprintf("%06d", frac)
return s[0:d.Fsp]
}
// ToNumber changes duration to number format.
// e.g,
// 10:10:10 -> 101010
func (d Duration) ToNumber() *MyDecimal {
sign, hours, minutes, seconds, fraction := splitDuration(d.Duration)
var (
s string
signStr string
)
if sign < 0 {
signStr = "-"
}
if d.Fsp == 0 {
s = fmt.Sprintf("%s%02d%02d%02d", signStr, hours, minutes, seconds)
} else {
s = fmt.Sprintf("%s%02d%02d%02d.%s", signStr, hours, minutes, seconds, d.formatFrac(fraction))
}
// We skip checking error here because time formatted string can be parsed certainly.
dec := new(MyDecimal)
err := dec.FromString([]byte(s))
terror.Log(errors.Trace(err))
return dec
}
// ConvertToTime converts duration to Time.
// Tp is TypeDatetime, TypeTimestamp and TypeDate.
func (d Duration) ConvertToTime(ctx Context, tp uint8) (Time, error) {
year, month, day := gotime.Now().In(ctx.Location()).Date()
datePart := FromDate(year, int(month), day, 0, 0, 0, 0)
mixDateAndDuration(&datePart, d)
t := NewTime(datePart, mysql.TypeDatetime, d.Fsp)
return t.Convert(ctx, tp)
}
// ConvertToTimeWithTimestamp converts duration to Time by system timestamp.
// Tp is TypeDatetime, TypeTimestamp and TypeDate.
func (d Duration) ConvertToTimeWithTimestamp(ctx Context, tp uint8, ts gotime.Time) (Time, error) {
year, month, day := ts.In(ctx.Location()).Date()
datePart := FromDate(year, int(month), day, 0, 0, 0, 0)
mixDateAndDuration(&datePart, d)
t := NewTime(datePart, mysql.TypeDatetime, d.Fsp)
return t.Convert(ctx, tp)
}
// ConvertToYear converts duration to Year.
func (d Duration) ConvertToYear(ctx Context) (int64, error) {
return d.ConvertToYearFromNow(ctx, gotime.Now())
}
// ConvertToYearFromNow converts duration to Year, with the `now` specified by the argument.
func (d Duration) ConvertToYearFromNow(ctx Context, now gotime.Time) (int64, error) {
if ctx.Flags().CastTimeToYearThroughConcat() {
// this error will never happen, because we always give a valid FSP
dur, _ := d.RoundFrac(DefaultFsp, ctx.Location())
// the range of a duration will never exceed the range of `mysql.TypeLonglong`
ival, _ := dur.ToNumber().ToInt()
return AdjustYear(ival, false)
}
year, month, day := now.In(ctx.Location()).Date()
datePart := FromDate(year, int(month), day, 0, 0, 0, 0)
mixDateAndDuration(&datePart, d)
return AdjustYear(int64(datePart.Year()), false)
}
// RoundFrac rounds fractional seconds precision with new fsp and returns a new one.
// We will use the “round half up” rule, e.g, >= 0.5 -> 1, < 0.5 -> 0,
// so 10:10:10.999999 round 0 -> 10:10:11
// and 10:10:10.000000 round 0 -> 10:10:10
func (d Duration) RoundFrac(fsp int, loc *gotime.Location) (Duration, error) {
tz := loc
if tz == nil {
logutil.BgLogger().Warn("use gotime.local because sc.timezone is nil")
tz = gotime.Local
}
fsp, err := CheckFsp(fsp)
if err != nil {
return d, errors.Trace(err)
}
if fsp == d.Fsp {
return d, nil
}
n := gotime.Date(0, 0, 0, 0, 0, 0, 0, tz)
nd := n.Add(d.Duration).Round(gotime.Duration(math.Pow10(9-fsp)) * gotime.Nanosecond).Sub(n) //nolint:durationcheck
return Duration{Duration: nd, Fsp: fsp}, nil
}
// Compare returns an integer comparing the Duration instant t to o.
// If d is after o, returns 1, equal o, returns 0, before o, returns -1.
func (d Duration) Compare(o Duration) int {
if d.Duration > o.Duration {
return 1
} else if d.Duration == o.Duration {
return 0
}
return -1
}
// CompareString is like Compare,
// but parses str to Duration then compares.
func (d Duration) CompareString(ctx Context, str string) (int, error) {
// use MaxFsp to parse the string
o, _, err := ParseDuration(ctx, str, MaxFsp)
if err != nil {
return 0, err
}
return d.Compare(o), nil
}
// Hour returns current hour.
// e.g, hour("11:11:11") -> 11
func (d Duration) Hour() int {
_, hour, _, _, _ := splitDuration(d.Duration)
return hour
}
// Minute returns current minute.
// e.g, hour("11:11:11") -> 11
func (d Duration) Minute() int {
_, _, minute, _, _ := splitDuration(d.Duration)
return minute
}
// Second returns current second.
// e.g, hour("11:11:11") -> 11
func (d Duration) Second() int {
_, _, _, second, _ := splitDuration(d.Duration)
return second
}
// MicroSecond returns current microsecond.
// e.g, hour("11:11:11.11") -> 110000
func (d Duration) MicroSecond() int {
_, _, _, _, frac := splitDuration(d.Duration)
return frac
}
func isNegativeDuration(str string) (bool, string) {
rest, err := parser.Char(str, '-')
if err != nil {
return false, str
}
return true, rest
}
func matchColon(str string) (string, error) {
rest := parser.Space0(str)
rest, err := parser.Char(rest, ':')
if err != nil {
return str, err
}
rest = parser.Space0(rest)
return rest, nil
}
func matchDayHHMMSS(str string) (int, [3]int, string, error) {
day, rest, err := parser.Number(str)
if err != nil {
return 0, [3]int{}, str, err
}
rest, err = parser.Space(rest, 1)
if err != nil {
return 0, [3]int{}, str, err
}
hhmmss, rest, err := matchHHMMSSDelimited(rest, false)
if err != nil {
return 0, [3]int{}, str, err
}
return day, hhmmss, rest, nil
}
func matchHHMMSSDelimited(str string, requireColon bool) ([3]int, string, error) {
hhmmss := [3]int{}
hour, rest, err := parser.Number(str)
if err != nil {
return [3]int{}, str, err
}
hhmmss[0] = hour
for i := 1; i < 3; i++ {
remain, err := matchColon(rest)
if err != nil {
if i == 1 && requireColon {
return [3]int{}, str, err
}
break
}
num, remain, err := parser.Number(remain)
if err != nil {
return [3]int{}, str, err
}
hhmmss[i] = num
rest = remain
}
return hhmmss, rest, nil
}
func matchHHMMSSCompact(str string) ([3]int, string, error) {
num, rest, err := parser.Number(str)
if err != nil {
return [3]int{}, str, err
}
hhmmss := [3]int{num / 10000, (num / 100) % 100, num % 100}
return hhmmss, rest, nil
}
func hhmmssAddOverflow(hms []int, overflow bool) {
mod := []int{-1, 60, 60}
for i := 2; i >= 0 && overflow; i-- {
hms[i]++
if hms[i] == mod[i] {
overflow = true
hms[i] = 0
} else {
overflow = false
}
}
}
func checkHHMMSS(hms [3]int) bool {
m, s := hms[1], hms[2]
return m < 60 && s < 60
}
// matchFrac returns overflow, fraction, rest, error
func matchFrac(str string, fsp int) (bool, int, string, error) {
rest, err := parser.Char(str, '.')
if err != nil {
return false, 0, str, nil
}
digits, rest, err := parser.Digit(rest, 0)
if err != nil {
return false, 0, str, err
}
frac, overflow, err := ParseFrac(digits, fsp)
if err != nil {
return false, 0, str, err
}
return overflow, frac, rest, nil
}
func matchDuration(str string, fsp int) (Duration, bool, error) {
fsp, err := CheckFsp(fsp)
if err != nil {
return ZeroDuration, true, errors.Trace(err)
}
if len(str) == 0 {
return ZeroDuration, true, ErrTruncatedWrongVal.GenWithStackByArgs("time", str)
}
negative, rest := isNegativeDuration(str)
rest = parser.Space0(rest)
charsLen := len(rest)
hhmmss := [3]int{}
if day, hms, remain, err := matchDayHHMMSS(rest); err == nil {
hms[0] += 24 * day
rest, hhmmss = remain, hms
} else if hms, remain, err := matchHHMMSSDelimited(rest, true); err == nil {
rest, hhmmss = remain, hms
} else if hms, remain, err := matchHHMMSSCompact(rest); err == nil {
rest, hhmmss = remain, hms
} else {
return ZeroDuration, true, ErrTruncatedWrongVal.GenWithStackByArgs("time", str)
}
rest = parser.Space0(rest)
overflow, frac, rest, err := matchFrac(rest, fsp)
if err != nil || (len(rest) > 0 && charsLen >= 12) {
return ZeroDuration, true, ErrTruncatedWrongVal.GenWithStackByArgs("time", str)
}
if overflow {
hhmmssAddOverflow(hhmmss[:], overflow)
frac = 0
}
if !checkHHMMSS(hhmmss) {
return ZeroDuration, true, ErrTruncatedWrongVal.GenWithStackByArgs("time", str)
}
if hhmmss[0] > TimeMaxHour {
var t gotime.Duration
if negative {
t = MinTime
} else {
t = MaxTime
}
return Duration{t, fsp}, false, ErrTruncatedWrongVal.GenWithStackByArgs("time", str)
}
d := gotime.Duration(hhmmss[0]*3600+hhmmss[1]*60+hhmmss[2])*gotime.Second + gotime.Duration(frac)*gotime.Microsecond //nolint:durationcheck
if negative {
d = -d
}
d, err = TruncateOverflowMySQLTime(d)
if err == nil && len(rest) > 0 {
return Duration{d, fsp}, false, ErrTruncatedWrongVal.GenWithStackByArgs("time", str)
}
return Duration{d, fsp}, false, errors.Trace(err)
}
// canFallbackToDateTime return true
// 1. the string is failed to be parsed by `matchDuration`
// 2. the string is start with a series of digits whose length match the full format of DateTime literal (12, 14)
// or the string start with a date literal.
func canFallbackToDateTime(str string) bool {
digits, rest, err := parser.Digit(str, 1)
if err != nil {
return false
}
if len(digits) == 12 || len(digits) == 14 {
return true
}
rest, err = parser.AnyPunct(rest)
if err != nil {
return false
}
_, rest, err = parser.Digit(rest, 1)
if err != nil {
return false
}
rest, err = parser.AnyPunct(rest)
if err != nil {
return false
}
_, rest, err = parser.Digit(rest, 1)
if err != nil {
return false
}
return len(rest) > 0 && (rest[0] == ' ' || rest[0] == 'T')
}
// ParseDuration parses the time form a formatted string with a fractional seconds part,
// returns the duration type Time value and bool to indicate whether the result is null.
// See http://dev.mysql.com/doc/refman/5.7/en/fractional-seconds.html
func ParseDuration(ctx Context, str string, fsp int) (Duration, bool, error) {
rest := strings.TrimSpace(str)
d, isNull, err := matchDuration(rest, fsp)
if err == nil {
return d, isNull, nil
}
if !canFallbackToDateTime(rest) {
return d, isNull, ErrTruncatedWrongVal.GenWithStackByArgs("time", str)
}
datetime, err := ParseDatetime(ctx, rest)
if err != nil {
return ZeroDuration, true, ErrTruncatedWrongVal.GenWithStackByArgs("time", str)
}
d, err = datetime.ConvertToDuration()
if err != nil {
return ZeroDuration, true, ErrTruncatedWrongVal.GenWithStackByArgs("time", str)
}
d, err = d.RoundFrac(fsp, ctx.Location())
return d, false, err
}
// TruncateOverflowMySQLTime truncates d when it overflows, and returns ErrTruncatedWrongVal.
func TruncateOverflowMySQLTime(d gotime.Duration) (gotime.Duration, error) {
if d > MaxTime {
return MaxTime, ErrTruncatedWrongVal.GenWithStackByArgs("time", d)
} else if d < MinTime {
return MinTime, ErrTruncatedWrongVal.GenWithStackByArgs("time", d)
}
return d, nil
}
func splitDuration(t gotime.Duration) (sign int, hours int, minutes int, seconds int, fraction int) {
sign = 1
if t < 0 {
t = -t
sign = -1
}
hoursDuration := t / gotime.Hour
t -= hoursDuration * gotime.Hour //nolint:durationcheck
minutesDuration := t / gotime.Minute
t -= minutesDuration * gotime.Minute //nolint:durationcheck
secondsDuration := t / gotime.Second
t -= secondsDuration * gotime.Second //nolint:durationcheck
fractionDuration := t / gotime.Microsecond
return sign, int(hoursDuration), int(minutesDuration), int(secondsDuration), int(fractionDuration)
}
var maxDaysInMonth = []int{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
func getTime(ctx Context, num, originNum int64, tp byte) (Time, error) {
s1 := num / 1000000
s2 := num - s1*1000000
year := int(s1 / 10000)
s1 %= 10000
month := int(s1 / 100)
day := int(s1 % 100)
hour := int(s2 / 10000)
s2 %= 10000
minute := int(s2 / 100)
second := int(s2 % 100)
ct, ok := FromDateChecked(year, month, day, hour, minute, second, 0)
if !ok {
numStr := strconv.FormatInt(originNum, 10)
return ZeroDatetime, errors.Trace(ErrWrongValue.GenWithStackByArgs(TimeStr, numStr))
}
t := NewTime(ct, tp, DefaultFsp)
err := t.Check(ctx)
return t, errors.Trace(err)
}
// parseDateTimeFromNum parses date time from num.
// See number_to_datetime function.
// https://github.com/mysql/mysql-server/blob/5.7/sql-common/my_time.c
func parseDateTimeFromNum(ctx Context, num int64) (Time, error) {
t := ZeroDate
// Check zero.
if num == 0 {
return t, nil
}
originNum := num
// Check datetime type.
if num >= 10000101000000 {
t.SetType(mysql.TypeDatetime)
return getTime(ctx, num, originNum, t.Type())
}
// Check MMDD.
if num < 101 {
return t, errors.Trace(ErrWrongValue.GenWithStackByArgs(TimeStr, strconv.FormatInt(num, 10)))
}
// Adjust year
// YYMMDD, year: 2000-2069
if num <= (70-1)*10000+1231 {
num = (num + 20000000) * 1000000
return getTime(ctx, num, originNum, t.Type())
}
// Check YYMMDD.
if num < 70*10000+101 {
return t, errors.Trace(ErrWrongValue.GenWithStackByArgs(TimeStr, strconv.FormatInt(num, 10)))
}
// Adjust year
// YYMMDD, year: 1970-1999
if num <= 991231 {
num = (num + 19000000) * 1000000
return getTime(ctx, num, originNum, t.Type())
}
// Adjust hour/min/second.
if num <= 99991231 {
num = num * 1000000
return getTime(ctx, num, originNum, t.Type())
}
// Check MMDDHHMMSS.
if num < 101000000 {
return t, errors.Trace(ErrWrongValue.GenWithStackByArgs(TimeStr, strconv.FormatInt(num, 10)))
}
// Set TypeDatetime type.
t.SetType(mysql.TypeDatetime)
// Adjust year
// YYMMDDHHMMSS, 2000-2069
if num <= 69*10000000000+1231235959 {
num = num + 20000000000000
return getTime(ctx, num, originNum, t.Type())
}
// Check YYYYMMDDHHMMSS.
if num < 70*10000000000+101000000 {
return t, errors.Trace(ErrWrongValue.GenWithStackByArgs(TimeStr, strconv.FormatInt(num, 10)))
}
// Adjust year
// YYMMDDHHMMSS, 1970-1999
if num <= 991231235959 {
num = num + 19000000000000
return getTime(ctx, num, originNum, t.Type())
}
return getTime(ctx, num, originNum, t.Type())
}
// ParseTime parses a formatted string with type tp and specific fsp.
// Type is TypeDatetime, TypeTimestamp and TypeDate.
// Fsp is in range [0, 6].
// MySQL supports many valid datetime format, but still has some limitation.
// If delimiter exists, the date part and time part is separated by a space or T,
// other punctuation character can be used as the delimiter between date parts or time parts.
// If no delimiter, the format must be YYYYMMDDHHMMSS or YYMMDDHHMMSS
// If we have fractional seconds part, we must use decimal points as the delimiter.
// The valid datetime range is from '1000-01-01 00:00:00.000000' to '9999-12-31 23:59:59.999999'.
// The valid timestamp range is from '1970-01-01 00:00:01.000000' to '2038-01-19 03:14:07.999999'.
// The valid date range is from '1000-01-01' to '9999-12-31'
// explicitTz is used to handle a data race of timeZone, refer to https://github.com/pingcap/tidb/issues/40710. It only works for timestamp now, be careful to use it!
func ParseTime(ctx Context, str string, tp byte, fsp int) (Time, error) {
return ParseTimeWithString(ctx, PlainStr(str), tp, fsp)
}
// ParseTimeWithString parses a formatted string with type tp and specific fsp.
// The string wrapper allows callers to mark unsafe string sources so warning/error
// arguments are frozen before deferred formatting.
func ParseTimeWithString(ctx Context, str String, tp byte, fsp int) (Time, error) {
return parseTime(ctx, str, tp, fsp, false)
}
// ParseTimeFromFloatString is similar to ParseTime, except that it's used to parse a float converted string.
func ParseTimeFromFloatString(ctx Context, str string, tp byte, fsp int) (Time, error) {
// MySQL compatibility: 0.0 should not be converted to null, see #11203
if len(str) >= 3 && str[:3] == "0.0" {
return NewTime(ZeroCoreTime, tp, DefaultFsp), nil
}
return parseTime(ctx, PlainStr(str), tp, fsp, true)
}
func parseTime(ctx Context, str String, tp byte, fsp int, isFloat bool) (Time, error) {
fsp, err := CheckFsp(fsp)
if err != nil {
return NewTime(ZeroCoreTime, tp, DefaultFsp), errors.Trace(err)
}
t, err := parseDatetime(ctx, str, fsp, isFloat)
if err != nil {
return NewTime(ZeroCoreTime, tp, DefaultFsp), errors.Trace(err)
}
t.SetType(tp)
if err = t.Check(ctx); err != nil {
if tp == mysql.TypeTimestamp && !t.IsZero() {
tAdjusted, errAdjusted := adjustTimestampErrForDST(ctx.Location(), str, tp, t, err)
if ErrTimestampInDSTTransition.Equal(errAdjusted) {
return tAdjusted, errors.Trace(errAdjusted)
}
}
return NewTime(ZeroCoreTime, tp, DefaultFsp), errors.Trace(err)
}
return t, nil
}
func adjustTimestampErrForDST(loc *gotime.Location, str String, tp byte, t Time, err error) (Time, error) {
if tp != mysql.TypeTimestamp || t.IsZero() {
return t, err
}
minTS, maxTS := MinTimestamp, MaxTimestamp
minErr := minTS.ConvertTimeZone(gotime.UTC, loc)
maxErr := maxTS.ConvertTimeZone(gotime.UTC, loc)
if minErr == nil && maxErr == nil &&
t.Compare(minTS) > 0 && t.Compare(maxTS) < 0 {
// Handle the case when the timestamp given is in the DST transition
if tAdjusted, err2 := t.AdjustedGoTime(loc); err2 == nil {
t.SetCoreTime(FromGoTime(tAdjusted))
return t, errors.Trace(ErrTimestampInDSTTransition.GenWithStackByArgs(str, loc.String()))
}
}
return t, err
}
// ParseDatetime is a helper function wrapping ParseTime with datetime type and default fsp.
func ParseDatetime(ctx Context, str string) (Time, error) {
return ParseTime(ctx, str, mysql.TypeDatetime, GetFsp(str))
}
// ParseTimestamp is a helper function wrapping ParseTime with timestamp type and default fsp.
func ParseTimestamp(ctx Context, str string) (Time, error) {
return ParseTime(ctx, str, mysql.TypeTimestamp, GetFsp(str))
}
// ParseDate is a helper function wrapping ParseTime with date type.
func ParseDate(ctx Context, str string) (Time, error) {
// date has no fractional seconds precision
return ParseTime(ctx, str, mysql.TypeDate, MinFsp)
}
// ParseTimeFromYear parse a `YYYY` formed year to corresponded Datetime type.
// Note: the invoker must promise the `year` is in the range [MinYear, MaxYear].
func ParseTimeFromYear(year int64) (Time, error) {
if year == 0 {
return NewTime(ZeroCoreTime, mysql.TypeDate, DefaultFsp), nil
}
dt := FromDate(int(year), 0, 0, 0, 0, 0, 0)
return NewTime(dt, mysql.TypeDatetime, DefaultFsp), nil
}
// ParseTimeFromNum parses a formatted int64,
// returns the value which type is tp.
func ParseTimeFromNum(ctx Context, num int64, tp byte, fsp int) (Time, error) {
// MySQL compatibility: 0 should not be converted to null, see #11203
if num == 0 {
zt := NewTime(ZeroCoreTime, tp, DefaultFsp)
if !ctx.Flags().IgnoreZeroDateErr() {
switch tp {
case mysql.TypeTimestamp:
return zt, ErrTruncatedWrongVal.GenWithStackByArgs(TimestampStr, "0")
case mysql.TypeDate:
return zt, ErrTruncatedWrongVal.GenWithStackByArgs(DateStr, "0")
case mysql.TypeDatetime:
return zt, ErrTruncatedWrongVal.GenWithStackByArgs(DateTimeStr, "0")
}
}
return zt, nil
}
fsp, err := CheckFsp(fsp)
if err != nil {
return NewTime(ZeroCoreTime, tp, DefaultFsp), errors.Trace(err)
}
t, err := parseDateTimeFromNum(ctx, num)
if err != nil {
return NewTime(ZeroCoreTime, tp, DefaultFsp), errors.Trace(err)
}
t.SetType(tp)
t.SetFsp(fsp)
if err := t.Check(ctx); err != nil {
return NewTime(ZeroCoreTime, tp, DefaultFsp), errors.Trace(err)
}
return t, nil
}
// ParseDatetimeFromNum is a helper function wrapping ParseTimeFromNum with datetime type and default fsp.
func ParseDatetimeFromNum(ctx Context, num int64) (Time, error) {
return ParseTimeFromNum(ctx, num, mysql.TypeDatetime, DefaultFsp)
}
// ParseTimestampFromNum is a helper function wrapping ParseTimeFromNum with timestamp type and default fsp.
func ParseTimestampFromNum(ctx Context, num int64) (Time, error) {
return ParseTimeFromNum(ctx, num, mysql.TypeTimestamp, DefaultFsp)
}
// ParseDateFromNum is a helper function wrapping ParseTimeFromNum with date type.
func ParseDateFromNum(ctx Context, num int64) (Time, error) {
// date has no fractional seconds precision
return ParseTimeFromNum(ctx, num, mysql.TypeDate, MinFsp)
}
// TimeFromDays Converts a day number to a date.
func TimeFromDays(num int64) Time {
if num < 0 {
return NewTime(FromDate(0, 0, 0, 0, 0, 0, 0), mysql.TypeDate, 0)
}
year, month, day := getDateFromDaynr(uint(num))
ct, ok := FromDateChecked(int(year), int(month), int(day), 0, 0, 0, 0)
if !ok {
return NewTime(FromDate(0, 0, 0, 0, 0, 0, 0), mysql.TypeDate, 0)
}
return NewTime(ct, mysql.TypeDate, 0)
}
func checkDateType(t CoreTime, allowZeroInDate, allowInvalidDate bool) error {
year, month, day := t.Year(), t.Month(), t.Day()
if year == 0 && month == 0 && day == 0 {
return nil
}
if !allowZeroInDate && (month == 0 || day == 0) {
return ErrWrongValue.GenWithStackByArgs(DateTimeStr, fmt.Sprintf("%04d-%02d-%02d", year, month, day))
}
if err := checkDateRange(t); err != nil {
return errors.Trace(err)
}
if err := checkMonthDay(year, month, day, allowInvalidDate); err != nil {
return errors.Trace(err)
}
return nil
}
func checkDateRange(t CoreTime) error {
// Oddly enough, MySQL document says date range should larger than '1000-01-01',
// but we can insert '0001-01-01' actually.
if t.Year() < 0 || t.Month() < 0 || t.Day() < 0 {
return errors.Trace(ErrWrongValue.GenWithStackByArgs(TimeStr, t))
}
if compareTime(t, MaxDatetime) > 0 {
return errors.Trace(ErrWrongValue.GenWithStackByArgs(TimeStr, t))
}
return nil
}
func checkMonthDay(year, month, day int, allowInvalidDate bool) error {
if month < 0 || month > 12 {
return errors.Trace(ErrWrongValue.GenWithStackByArgs(DateTimeStr, fmt.Sprintf("%d-%d-%d", year, month, day)))
}
maxDay := 31
if !allowInvalidDate {
if month > 0 {
maxDay = maxDaysInMonth[month-1]
}
if month == 2 && !isLeapYear(uint16(year)) {
maxDay = 28
}
}
if day < 0 || day > maxDay {
return errors.Trace(ErrWrongValue.GenWithStackByArgs(DateTimeStr, fmt.Sprintf("%d-%d-%d", year, month, day)))
}
return nil
}
func checkTimestampType(t CoreTime, tz *gotime.Location) error {
if compareTime(t, ZeroCoreTime) == 0 {
return nil
}
var checkTime CoreTime
if tz != BoundTimezone {
convertTime := NewTime(t, mysql.TypeTimestamp, DefaultFsp)
err := convertTime.ConvertTimeZone(tz, BoundTimezone)
if err != nil {
_, err2 := adjustTimestampErrForDST(tz, PlainStr(t.String()), mysql.TypeTimestamp, Time{t}, err)
return err2
}
checkTime = convertTime.coreTime
} else {
checkTime = t
}
if compareTime(checkTime, MaxTimestamp.coreTime) > 0 || compareTime(checkTime, MinTimestamp.coreTime) < 0 {
return errors.Trace(ErrWrongValue.GenWithStackByArgs(TimeStr, t))
}
if _, err := t.GoTime(tz); err != nil {
return errors.Trace(err)
}
return nil
}
func checkDatetimeType(t CoreTime, allowZeroInDate, allowInvalidDate bool) error {
if err := checkDateType(t, allowZeroInDate, allowInvalidDate); err != nil {
return errors.Trace(err)
}
hour, minute, second := t.Hour(), t.Minute(), t.Second()
if hour < 0 || hour >= 24 {
return errors.Trace(ErrWrongValue.GenWithStackByArgs(TimeStr, strconv.Itoa(hour)))
}
if minute < 0 || minute >= 60 {
return errors.Trace(ErrWrongValue.GenWithStackByArgs(TimeStr, strconv.Itoa(minute)))
}
if second < 0 || second >= 60 {
return errors.Trace(ErrWrongValue.GenWithStackByArgs(TimeStr, strconv.Itoa(second)))
}
return nil
}
// ExtractDatetimeNum extracts time value number from datetime unit and format.
func ExtractDatetimeNum(t *Time, unit string) (int64, error) {
// TODO: Consider time_zone variable.
switch strings.ToUpper(unit) {
case "DAY":
return int64(t.Day()), nil
case "WEEK":
week := t.Week(0)
return int64(week), nil
case "MONTH":
return int64(t.Month()), nil
case "QUARTER":
m := int64(t.Month())
// 1 - 3 -> 1
// 4 - 6 -> 2
// 7 - 9 -> 3
// 10 - 12 -> 4
return (m + 2) / 3, nil
case "YEAR":
return int64(t.Year()), nil
case "DAY_MICROSECOND":
h, m, s := t.Clock()
d := t.Day()
return int64(d*1000000+h*10000+m*100+s)*1000000 + int64(t.Microsecond()), nil
case "DAY_SECOND":
h, m, s := t.Clock()
d := t.Day()
return int64(d)*1000000 + int64(h)*10000 + int64(m)*100 + int64(s), nil
case "DAY_MINUTE":
h, m, _ := t.Clock()
d := t.Day()
return int64(d)*10000 + int64(h)*100 + int64(m), nil
case "DAY_HOUR":
h, _, _ := t.Clock()
d := t.Day()
return int64(d)*100 + int64(h), nil
case "YEAR_MONTH":
y, m := t.Year(), t.Month()
return int64(y)*100 + int64(m), nil
default:
return 0, errors.Errorf("invalid unit %s", unit)
}
}
// ExtractDurationNum extracts duration value number from duration unit and format.
func ExtractDurationNum(d *Duration, unit string) (res int64, err error) {
switch strings.ToUpper(unit) {
case "MICROSECOND":
res = int64(d.MicroSecond())
case "SECOND":
res = int64(d.Second())
case "MINUTE":
res = int64(d.Minute())
case "HOUR":
res = int64(d.Hour())
case "SECOND_MICROSECOND":
res = int64(d.Second())*1000000 + int64(d.MicroSecond())
case "MINUTE_MICROSECOND":
res = int64(d.Minute())*100000000 + int64(d.Second())*1000000 + int64(d.MicroSecond())
case "MINUTE_SECOND":
res = int64(d.Minute()*100 + d.Second())
case "HOUR_MICROSECOND":
res = int64(d.Hour())*10000000000 + int64(d.Minute())*100000000 + int64(d.Second())*1000000 + int64(d.MicroSecond())
case "HOUR_SECOND":
res = int64(d.Hour())*10000 + int64(d.Minute())*100 + int64(d.Second())
case "HOUR_MINUTE":
res = int64(d.Hour())*100 + int64(d.Minute())
case "DAY_MICROSECOND":
res = int64(d.Hour()*10000+d.Minute()*100+d.Second())*1000000 + int64(d.MicroSecond())
case "DAY_SECOND":
res = int64(d.Hour())*10000 + int64(d.Minute())*100 + int64(d.Second())
case "DAY_MINUTE":
res = int64(d.Hour())*100 + int64(d.Minute())
case "DAY_HOUR":
res = int64(d.Hour())
default:
return 0, errors.Errorf("invalid unit %s", unit)
}
if d.Duration < 0 {
res = -res
}
return res, nil
}
// parseSingleTimeValue parse the format according the given unit. If we set strictCheck true, we'll check whether
// the converted value not exceed the range of MySQL's TIME type.
// The returned values are year, month, day, nanosecond and fsp.
func parseSingleTimeValue(unit string, format string, strictCheck bool) (year int64, month int64, day int64, nanosecond int64, fsp int, err error) {
// Format is a preformatted number, it format should be A[.[B]].
decimalPointPos := strings.IndexRune(format, '.')
if decimalPointPos == -1 {
decimalPointPos = len(format)
}
sign := int64(1)
if len(format) > 0 && format[0] == '-' {
sign = int64(-1)
}
// We should also continue even if an error occurs here
// because the called may ignore the error and use the return value.
iv, err := strconv.ParseInt(format[0:decimalPointPos], 10, 64)
if err != nil {
err = ErrWrongValue.GenWithStackByArgs(DateTimeStr, format)
}
riv := iv // Rounded integer value
decimalLen := 0
dv := int64(0)
lf := len(format) - 1
// Has fraction part
if decimalPointPos < lf {
var tmpErr error
dvPre := oneToSixDigitRegex.FindString(format[decimalPointPos+1:]) // the numberical prefix of the fraction part
decimalLen = len(dvPre)
if decimalLen >= 6 {
// MySQL rounds down to 1e-6.
if dv, tmpErr = strconv.ParseInt(dvPre[0:6], 10, 64); tmpErr != nil && err == nil {
err = ErrWrongValue.GenWithStackByArgs(DateTimeStr, format)
}
} else {
if dv, tmpErr = strconv.ParseInt(dvPre+"000000"[:6-decimalLen], 10, 64); tmpErr != nil && err == nil {
err = ErrWrongValue.GenWithStackByArgs(DateTimeStr, format)
}
}
if dv >= 500000 { // Round up, and we should keep 6 digits for microsecond, so dv should in [000000, 999999].
riv += sign
}
if unit != "SECOND" && err == nil {
err = ErrTruncatedWrongVal.GenWithStackByArgs(format)
}
dv *= sign
}
switch strings.ToUpper(unit) {
case "MICROSECOND":
if strictCheck && mathutil.Abs(riv) > TimeMaxValueSeconds*1000 {
return 0, 0, 0, 0, 0, ErrDatetimeFunctionOverflow.GenWithStackByArgs("time")
}
dayCount := riv / int64(GoDurationDay/gotime.Microsecond)
riv %= int64(GoDurationDay / gotime.Microsecond)
return 0, 0, dayCount, riv * int64(gotime.Microsecond), MaxFsp, err
case "SECOND":
if strictCheck && mathutil.Abs(iv) > TimeMaxValueSeconds {
return 0, 0, 0, 0, 0, ErrDatetimeFunctionOverflow.GenWithStackByArgs("time")
}
dayCount := iv / int64(GoDurationDay/gotime.Second)
iv %= int64(GoDurationDay / gotime.Second)
return 0, 0, dayCount, iv*int64(gotime.Second) + dv*int64(gotime.Microsecond), decimalLen, err
case "MINUTE":
if strictCheck && mathutil.Abs(riv) > TimeMaxHour*60+TimeMaxMinute {
return 0, 0, 0, 0, 0, ErrDatetimeFunctionOverflow.GenWithStackByArgs("time")
}
dayCount := riv / int64(GoDurationDay/gotime.Minute)
riv %= int64(GoDurationDay / gotime.Minute)
return 0, 0, dayCount, riv * int64(gotime.Minute), 0, err
case "HOUR":
if strictCheck && mathutil.Abs(riv) > TimeMaxHour {
return 0, 0, 0, 0, 0, ErrDatetimeFunctionOverflow.GenWithStackByArgs("time")
}
dayCount := riv / 24
riv %= 24
return 0, 0, dayCount, riv * int64(gotime.Hour), 0, err
case "DAY":
if strictCheck && mathutil.Abs(riv) > TimeMaxHour/24 {
return 0, 0, 0, 0, 0, ErrDatetimeFunctionOverflow.GenWithStackByArgs("time")
}
return 0, 0, riv, 0, 0, err
case "WEEK":
if strictCheck && 7*mathutil.Abs(riv) > TimeMaxHour/24 {
return 0, 0, 0, 0, 0, ErrDatetimeFunctionOverflow.GenWithStackByArgs("time")
}
return 0, 0, 7 * riv, 0, 0, err
case "MONTH":
if strictCheck && mathutil.Abs(riv) > 1 {
return 0, 0, 0, 0, 0, ErrDatetimeFunctionOverflow.GenWithStackByArgs("time")
}
return 0, riv, 0, 0, 0, err
case "QUARTER":
if strictCheck {
return 0, 0, 0, 0, 0, ErrDatetimeFunctionOverflow.GenWithStackByArgs("time")
}
return 0, 3 * riv, 0, 0, 0, err
case "YEAR":
if strictCheck {
return 0, 0, 0, 0, 0, ErrDatetimeFunctionOverflow.GenWithStackByArgs("time")
}
return riv, 0, 0, 0, 0, err
}
return 0, 0, 0, 0, 0, errors.Errorf("invalid singel timeunit - %s", unit)
}
// parseTimeValue gets years, months, days, nanoseconds and fsp from a string
// nanosecond will not exceed length of single day
// MySQL permits any punctuation delimiter in the expr format.
// See https://dev.mysql.com/doc/refman/8.0/en/expressions.html#temporal-intervals
func parseTimeValue(format string, index, cnt int) (years int64, months int64, days int64, nanoseconds int64, fsp int, err error) {
neg := false
originalFmt := format
fsp = map[bool]int{true: MaxFsp, false: MinFsp}[index == MicrosecondIndex]
format = strings.TrimSpace(format)
if len(format) > 0 && format[0] == '-' {
neg = true
format = format[1:]
}
fields := make([]string, TimeValueCnt)
for i := range fields {
fields[i] = "0"
}
matches := numericRegex.FindAllString(format, -1)
if len(matches) > cnt {
return 0, 0, 0, 0, 0, ErrWrongValue.GenWithStackByArgs(DateTimeStr, originalFmt)
}
for i := range matches {
if neg {
fields[index] = "-" + matches[len(matches)-1-i]
} else {
fields[index] = matches[len(matches)-1-i]
}
index--
}
// ParseInt may return an error when overflowed, but we should continue to parse the rest of the string because
// the caller may ignore the error and use the return value.
// In this case, we should return a big value to make sure the result date after adding this interval
// is also overflowed and NULL is returned to the user.
years, err = strconv.ParseInt(fields[YearIndex], 10, 64)
if err != nil {
err = ErrWrongValue.GenWithStackByArgs(DateTimeStr, originalFmt)
}
var tmpErr error
months, tmpErr = strconv.ParseInt(fields[MonthIndex], 10, 64)
if err == nil && tmpErr != nil {
err = ErrWrongValue.GenWithStackByArgs(DateTimeStr, originalFmt)
}
days, tmpErr = strconv.ParseInt(fields[DayIndex], 10, 64)
if err == nil && tmpErr != nil {
err = ErrWrongValue.GenWithStackByArgs(DateTimeStr, originalFmt)
}
hours, tmpErr := strconv.ParseInt(fields[HourIndex], 10, 64)
if tmpErr != nil && err == nil {
err = ErrWrongValue.GenWithStackByArgs(DateTimeStr, originalFmt)
}
minutes, tmpErr := strconv.ParseInt(fields[MinuteIndex], 10, 64)
if tmpErr != nil && err == nil {
err = ErrWrongValue.GenWithStackByArgs(DateTimeStr, originalFmt)
}
seconds, tmpErr := strconv.ParseInt(fields[SecondIndex], 10, 64)
if tmpErr != nil && err == nil {
err = ErrWrongValue.GenWithStackByArgs(DateTimeStr, originalFmt)
}
microseconds, tmpErr := strconv.ParseInt(alignFrac(fields[MicrosecondIndex], MaxFsp), 10, 64)
if tmpErr != nil && err == nil {
err = ErrWrongValue.GenWithStackByArgs(DateTimeStr, originalFmt)
}
seconds = hours*3600 + minutes*60 + seconds
days += seconds / (3600 * 24)
seconds %= 3600 * 24
return years, months, days, seconds*int64(gotime.Second) + microseconds*int64(gotime.Microsecond), fsp, err
}
func parseAndValidateDurationValue(format string, index, cnt int) (int64, int, error) {
year, month, day, nano, fsp, err := parseTimeValue(format, index, cnt)
if err != nil {
return 0, 0, err
}
if year != 0 || month != 0 || mathutil.Abs(day) > TimeMaxHour/24 {
return 0, 0, ErrDatetimeFunctionOverflow.GenWithStackByArgs("time")
}
dur := day*int64(GoDurationDay) + nano
if mathutil.Abs(dur) > int64(MaxTime) {
return 0, 0, ErrDatetimeFunctionOverflow.GenWithStackByArgs("time")
}
return dur, fsp, nil
}
// ParseDurationValue parses time value from time unit and format.
// Returns y years m months d days + n nanoseconds
// Nanoseconds will no longer than one day.
func ParseDurationValue(unit string, format string) (y int64, m int64, d int64, n int64, fsp int, _ error) {
switch strings.ToUpper(unit) {
case "MICROSECOND", "SECOND", "MINUTE", "HOUR", "DAY", "WEEK", "MONTH", "QUARTER", "YEAR":
return parseSingleTimeValue(unit, format, false)
case "SECOND_MICROSECOND":
return parseTimeValue(format, MicrosecondIndex, SecondMicrosecondMaxCnt)
case "MINUTE_MICROSECOND":
return parseTimeValue(format, MicrosecondIndex, MinuteMicrosecondMaxCnt)
case "MINUTE_SECOND":
return parseTimeValue(format, SecondIndex, MinuteSecondMaxCnt)
case "HOUR_MICROSECOND":
return parseTimeValue(format, MicrosecondIndex, HourMicrosecondMaxCnt)
case "HOUR_SECOND":
return parseTimeValue(format, SecondIndex, HourSecondMaxCnt)
case "HOUR_MINUTE":
return parseTimeValue(format, MinuteIndex, HourMinuteMaxCnt)
case "DAY_MICROSECOND":
return parseTimeValue(format, MicrosecondIndex, DayMicrosecondMaxCnt)
case "DAY_SECOND":
return parseTimeValue(format, SecondIndex, DaySecondMaxCnt)
case "DAY_MINUTE":
return parseTimeValue(format, MinuteIndex, DayMinuteMaxCnt)
case "DAY_HOUR":
return parseTimeValue(format, HourIndex, DayHourMaxCnt)
case "YEAR_MONTH":
return parseTimeValue(format, MonthIndex, YearMonthMaxCnt)
default:
return 0, 0, 0, 0, 0, errors.Errorf("invalid single timeunit - %s", unit)
}
}
// ExtractDurationValue extract the value from format to Duration.
func ExtractDurationValue(unit string, format string) (Duration, error) {
unit = strings.ToUpper(unit)
switch unit {
case "MICROSECOND", "SECOND", "MINUTE", "HOUR", "DAY", "WEEK", "MONTH", "QUARTER", "YEAR":
_, month, day, nano, fsp, err := parseSingleTimeValue(unit, format, true)
if err != nil {
return ZeroDuration, err
}
dur := Duration{Duration: gotime.Duration((month*30+day)*int64(GoDurationDay) + nano), Fsp: fsp}
return dur, err
case "SECOND_MICROSECOND":
d, fsp, err := parseAndValidateDurationValue(format, MicrosecondIndex, SecondMicrosecondMaxCnt)
if err != nil {
return ZeroDuration, err
}
return Duration{Duration: gotime.Duration(d), Fsp: fsp}, nil
case "MINUTE_MICROSECOND":
d, fsp, err := parseAndValidateDurationValue(format, MicrosecondIndex, MinuteMicrosecondMaxCnt)
if err != nil {
return ZeroDuration, err
}
return Duration{Duration: gotime.Duration(d), Fsp: fsp}, nil
case "MINUTE_SECOND":
d, fsp, err := parseAndValidateDurationValue(format, SecondIndex, MinuteSecondMaxCnt)
if err != nil {
return ZeroDuration, err
}
return Duration{Duration: gotime.Duration(d), Fsp: fsp}, nil
case "HOUR_MICROSECOND":
d, fsp, err := parseAndValidateDurationValue(format, MicrosecondIndex, HourMicrosecondMaxCnt)
if err != nil {
return ZeroDuration, err
}
return Duration{Duration: gotime.Duration(d), Fsp: fsp}, nil
case "HOUR_SECOND":
d, fsp, err := parseAndValidateDurationValue(format, SecondIndex, HourSecondMaxCnt)
if err != nil {
return ZeroDuration, err
}
return Duration{Duration: gotime.Duration(d), Fsp: fsp}, nil
case "HOUR_MINUTE":
d, fsp, err := parseAndValidateDurationValue(format, MinuteIndex, HourMinuteMaxCnt)
if err != nil {
return ZeroDuration, err
}
return Duration{Duration: gotime.Duration(d), Fsp: fsp}, nil
case "DAY_MICROSECOND":
d, fsp, err := parseAndValidateDurationValue(format, MicrosecondIndex, DayMicrosecondMaxCnt)
if err != nil {
return ZeroDuration, err
}
return Duration{Duration: gotime.Duration(d), Fsp: fsp}, nil
case "DAY_SECOND":
d, fsp, err := parseAndValidateDurationValue(format, SecondIndex, DaySecondMaxCnt)
if err != nil {
return ZeroDuration, err
}
return Duration{Duration: gotime.Duration(d), Fsp: fsp}, nil
case "DAY_MINUTE":
d, fsp, err := parseAndValidateDurationValue(format, MinuteIndex, DayMinuteMaxCnt)
if err != nil {
return ZeroDuration, err
}
return Duration{Duration: gotime.Duration(d), Fsp: fsp}, nil
case "DAY_HOUR":
d, fsp, err := parseAndValidateDurationValue(format, HourIndex, DayHourMaxCnt)
if err != nil {
return ZeroDuration, err
}
return Duration{Duration: gotime.Duration(d), Fsp: fsp}, nil
case "YEAR_MONTH":
_, _, err := parseAndValidateDurationValue(format, MonthIndex, YearMonthMaxCnt)
if err != nil {
return ZeroDuration, err
}
// MONTH must exceed the limit of mysql's duration. So just returns overflow error.
return ZeroDuration, ErrDatetimeFunctionOverflow.GenWithStackByArgs("time")
default:
return ZeroDuration, errors.Errorf("invalid single timeunit - %s", unit)
}
}
// IsClockUnit returns true when unit is interval unit with hour, minute, second or microsecond.
func IsClockUnit(unit string) bool {
switch strings.ToUpper(unit) {
case "MICROSECOND", "SECOND", "MINUTE", "HOUR",
"SECOND_MICROSECOND", "MINUTE_MICROSECOND", "HOUR_MICROSECOND", "DAY_MICROSECOND",
"MINUTE_SECOND", "HOUR_SECOND", "DAY_SECOND",
"HOUR_MINUTE", "DAY_MINUTE",
"DAY_HOUR":
return true
default:
return false
}
}
// IsDateUnit returns true when unit is interval unit with year, quarter, month, week or day.
func IsDateUnit(unit string) bool {
switch strings.ToUpper(unit) {
case "DAY", "WEEK", "MONTH", "QUARTER", "YEAR",
"DAY_MICROSECOND", "DAY_SECOND", "DAY_MINUTE", "DAY_HOUR",
"YEAR_MONTH":
return true
default:
return false
}
}
// IsMicrosecondUnit returns true when unit is interval unit with microsecond.
func IsMicrosecondUnit(unit string) bool {
switch strings.ToUpper(unit) {
case "MICROSECOND", "SECOND_MICROSECOND", "MINUTE_MICROSECOND", "HOUR_MICROSECOND", "DAY_MICROSECOND":
return true
default:
return false
}
}
// IsDateFormat returns true when the specified time format could contain only date.
func IsDateFormat(format string) bool {
format = strings.TrimSpace(format)
seps := ParseDateFormat(format)
length := len(format)
switch len(seps) {
case 1:
// "20129" will be parsed to 2020-12-09, which is date format.
if (length == 8) || (length == 6) || (length == 5) {
return true
}
case 3:
return true
}
return false
}
// ParseTimeFromInt64 parses mysql time value from int64.
func ParseTimeFromInt64(ctx Context, num int64) (Time, error) {
return parseDateTimeFromNum(ctx, num)
}
// ParseTimeFromFloat64 parses mysql time value from float64.
// It is used in scenarios that distinguish date and datetime, e.g., date_add/sub() with first argument being real.
// For example, 20010203 parses to date (no HMS) and 20010203040506 parses to datetime (with HMS).
func ParseTimeFromFloat64(ctx Context, f float64) (Time, error) {
intPart := int64(f)
t, err := parseDateTimeFromNum(ctx, intPart)
if err != nil {
return ZeroTime, err
}
if t.Type() == mysql.TypeDatetime {
// US part is only kept when the integral part is recognized as datetime.
fracPart := uint32(math.Round((f - float64(intPart)) * 1000000.0))
ct := t.CoreTime()
ct.setMicrosecond(fracPart)
t.SetCoreTime(ct)
}
return t, err
}
// ParseTimeFromDecimal parses mysql time value from decimal.
// It is used in scenarios that distinguish date and datetime, e.g., date_add/sub() with first argument being decimal.
// For example, 20010203 parses to date (no HMS) and 20010203040506 parses to datetime (with HMS).
func ParseTimeFromDecimal(ctx Context, dec *MyDecimal) (t Time, err error) {
intPart, err := dec.ToInt()
if err != nil && !terror.ErrorEqual(err, ErrTruncated) {
return ZeroTime, err
}
fsp := min(MaxFsp, int(dec.GetDigitsFrac()))
t, err = parseDateTimeFromNum(ctx, intPart)
if err != nil {
return ZeroTime, err
}
t.SetFsp(fsp)
if fsp == 0 || t.Type() == mysql.TypeDate {
// Shortcut for integer value or date value (fractional part omitted).
return t, err
}
intPartDec := new(MyDecimal).FromInt(intPart)
fracPartDec := new(MyDecimal)
err = DecimalSub(dec, intPartDec, fracPartDec)
if err != nil {
return ZeroTime, errors.Trace(dbterror.ClassTypes.NewStd(errno.ErrIncorrectDatetimeValue).GenWithStackByArgs(dec.ToString()))
}
million := new(MyDecimal).FromInt(1000000)
msPartDec := new(MyDecimal)
err = DecimalMul(fracPartDec, million, msPartDec)
if err != nil && !terror.ErrorEqual(err, ErrTruncated) {
return ZeroTime, errors.Trace(dbterror.ClassTypes.NewStd(errno.ErrIncorrectDatetimeValue).GenWithStackByArgs(dec.ToString()))
}
msPart, err := msPartDec.ToInt()
if err != nil && !terror.ErrorEqual(err, ErrTruncated) {
return ZeroTime, errors.Trace(dbterror.ClassTypes.NewStd(errno.ErrIncorrectDatetimeValue).GenWithStackByArgs(dec.ToString()))
}
ct := t.CoreTime()
ct.setMicrosecond(uint32(msPart))
t.SetCoreTime(ct)
return t, nil
}
// DateFormat returns a textual representation of the time value formatted
// according to layout.
// See http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format
func (t Time) DateFormat(layout string) (string, error) {
var buf bytes.Buffer
inPatternMatch := false
for _, b := range layout {
if inPatternMatch {
if err := t.convertDateFormat(b, &buf); err != nil {
return "", errors.Trace(err)
}
inPatternMatch = false
continue
}
// It's not in pattern match now.
if b == '%' {
inPatternMatch = true
} else {
buf.WriteRune(b)
}
}
return buf.String(), nil
}
var abbrevWeekdayName = []string{
"Sun", "Mon", "Tue",
"Wed", "Thu", "Fri", "Sat",
}
func (t Time) convertDateFormat(b rune, buf *bytes.Buffer) error {
switch b {
case 'b':
m := t.Month()
if m == 0 || m > 12 {
return errors.Trace(ErrWrongValue.GenWithStackByArgs(TimeStr, strconv.Itoa(m)))
}
buf.WriteString(MonthNames[m-1][:3])
case 'M':
m := t.Month()
if m == 0 || m > 12 {
return errors.Trace(ErrWrongValue.GenWithStackByArgs(TimeStr, strconv.Itoa(m)))
}
buf.WriteString(MonthNames[m-1])
case 'm':
buf.WriteString(FormatIntWidthN(t.Month(), 2))
case 'c':
buf.WriteString(strconv.FormatInt(int64(t.Month()), 10))
case 'D':
buf.WriteString(strconv.FormatInt(int64(t.Day()), 10))
buf.WriteString(abbrDayOfMonth(t.Day()))
case 'd':
buf.WriteString(FormatIntWidthN(t.Day(), 2))
case 'e':
buf.WriteString(strconv.FormatInt(int64(t.Day()), 10))
case 'j':
fmt.Fprintf(buf, "%03d", t.YearDay())
case 'H':
buf.WriteString(FormatIntWidthN(t.Hour(), 2))
case 'k':
buf.WriteString(strconv.FormatInt(int64(t.Hour()), 10))
case 'h', 'I':
tt := t.Hour()
if tt%12 == 0 {
buf.WriteString("12")
} else {
buf.WriteString(FormatIntWidthN(tt%12, 2))
}
case 'l':
tt := t.Hour()
if tt%12 == 0 {
buf.WriteString("12")
} else {
buf.WriteString(strconv.FormatInt(int64(tt%12), 10))
}
case 'i':
buf.WriteString(FormatIntWidthN(t.Minute(), 2))
case 'p':
hour := t.Hour()
if hour/12%2 == 0 {
buf.WriteString("AM")
} else {
buf.WriteString("PM")
}
case 'r':
h := t.Hour()
h %= 24
switch {
case h == 0:
fmt.Fprintf(buf, "%02d:%02d:%02d AM", 12, t.Minute(), t.Second())
case h == 12:
fmt.Fprintf(buf, "%02d:%02d:%02d PM", 12, t.Minute(), t.Second())
case h < 12:
fmt.Fprintf(buf, "%02d:%02d:%02d AM", h, t.Minute(), t.Second())
default:
fmt.Fprintf(buf, "%02d:%02d:%02d PM", h-12, t.Minute(), t.Second())
}
case 'T':
fmt.Fprintf(buf, "%02d:%02d:%02d", t.Hour(), t.Minute(), t.Second())
case 'S', 's':
buf.WriteString(FormatIntWidthN(t.Second(), 2))
case 'f':
fmt.Fprintf(buf, "%06d", t.Microsecond())
case 'U':
w := t.Week(0)
buf.WriteString(FormatIntWidthN(w, 2))
case 'u':
w := t.Week(1)
buf.WriteString(FormatIntWidthN(w, 2))
case 'V':
w := t.Week(2)
buf.WriteString(FormatIntWidthN(w, 2))
case 'v':
_, w := t.YearWeek(3)
buf.WriteString(FormatIntWidthN(w, 2))
case 'a':
weekday := t.Weekday()
buf.WriteString(abbrevWeekdayName[weekday])
case 'W':
buf.WriteString(t.Weekday().String())
case 'w':
buf.WriteString(strconv.FormatInt(int64(t.Weekday()), 10))
case 'X':
year, _ := t.YearWeek(2)
if year < 0 {
buf.WriteString(strconv.FormatUint(uint64(math.MaxUint32), 10))
} else {
buf.WriteString(FormatIntWidthN(year, 4))
}
case 'x':
year, _ := t.YearWeek(3)
if year < 0 {
buf.WriteString(strconv.FormatUint(uint64(math.MaxUint32), 10))
} else {
buf.WriteString(FormatIntWidthN(year, 4))
}
case 'Y':
buf.WriteString(FormatIntWidthN(t.Year(), 4))
case 'y':
str := FormatIntWidthN(t.Year(), 4)
buf.WriteString(str[2:])
default:
buf.WriteRune(b)
}
return nil
}
// FormatIntWidthN uses to format int with width. Insufficient digits are filled by 0.
func FormatIntWidthN(num, n int) string {
numString := strconv.FormatInt(int64(num), 10)
if len(numString) >= n {
return numString
}
padBytes := make([]byte, n-len(numString))
for i := range padBytes {
padBytes[i] = '0'
}
return string(padBytes) + numString
}
func abbrDayOfMonth(day int) string {
var str string
switch day {
case 1, 21, 31:
str = "st"
case 2, 22:
str = "nd"
case 3, 23:
str = "rd"
default:
str = "th"
}
return str
}
// StrToDate converts date string according to format.
// See https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format
func (t *Time) StrToDate(typeCtx Context, date, format string) bool {
ctx := make(map[string]int)
var tm CoreTime
success, warning := strToDate(&tm, date, format, ctx)
if !success {
t.SetCoreTime(ZeroCoreTime)
t.SetType(mysql.TypeDatetime)
t.SetFsp(0)
return false
}
if err := mysqlTimeFix(&tm, ctx); err != nil {
return false
}
t.SetCoreTime(tm)
t.SetType(mysql.TypeDatetime)
if t.Check(typeCtx) != nil {
return false
}
if warning {
// Only append this warning when success but still need warning.
// Currently this only happens when `date` has extra characters at the end.
typeCtx.AppendWarning(ErrTruncatedWrongVal.FastGenByArgs(DateTimeStr, date))
}
return true
}
// mysqlTimeFix fixes the Time use the values in the context.
func mysqlTimeFix(t *CoreTime, ctx map[string]int) error {
// Key of the ctx is the format char, such as `%j` `%p` and so on.
if yearOfDay, ok := ctx["%j"]; ok {
// TODO: Implement the function that converts day of year to yy:mm:dd.
_ = yearOfDay
}
if valueAMorPm, ok := ctx["%p"]; ok {
if _, ok := ctx["%H"]; ok {
return ErrWrongValue.GenWithStackByArgs(TimeStr, t)
}
if t.Hour() == 0 {
return ErrWrongValue.GenWithStackByArgs(TimeStr, t)
}
if t.Hour() == 12 {
// 12 is a special hour.
switch valueAMorPm {
case constForAM:
t.setHour(0)
case constForPM:
t.setHour(12)
}
return nil
}
if valueAMorPm == constForPM {
t.setHour(t.getHour() + 12)
}
} else {
if _, ok := ctx["%h"]; ok && t.Hour() == 12 {
t.setHour(0)
}
}
return nil
}
// strToDate converts date string according to format,
// the value will be stored in argument t or ctx.
// The second return value is true when success but still need to append a warning.
func strToDate(t *CoreTime, date string, format string, ctx map[string]int) (success bool, warning bool) {
date = skipWhiteSpace(date)
format = skipWhiteSpace(format)
token, formatRemain, succ := getFormatToken(format)
if !succ {
return false, false
}
if token == "" {
if len(date) != 0 {
// Extra characters at the end of date are ignored, but a warning should be reported at this case.
return true, true
}
// Normal case. Both token and date are empty now.
return true, false
}
if len(date) == 0 {
ctx[token] = 0
return true, false
}
dateRemain, succ := matchDateWithToken(t, date, token, ctx)
if !succ {
return false, false
}
return strToDate(t, dateRemain, formatRemain, ctx)
}
// getFormatToken takes one format control token from the string.
// format "%d %H %m" will get token "%d" and the remain is " %H %m".
func getFormatToken(format string) (token string, remain string, succ bool) {
if len(format) == 0 {
return "", "", true
}
// Just one character.
if len(format) == 1 {
if format[0] == '%' {
return "", "", false
}
return format, "", true
}
// More than one character.
if format[0] == '%' {
return format[:2], format[2:], true
}
return format[:1], format[1:], true
}
func skipWhiteSpace(input string) string {
for i, c := range input {
if !unicode.IsSpace(c) {
return input[i:]
}
}
return ""
}
var monthAbbrev = map[string]gotime.Month{
"jan": gotime.January,
"feb": gotime.February,
"mar": gotime.March,
"apr": gotime.April,
"may": gotime.May,
"jun": gotime.June,
"jul": gotime.July,
"aug": gotime.August,
"sep": gotime.September,
"oct": gotime.October,
"nov": gotime.November,
"dec": gotime.December,
}
type dateFormatParser func(t *CoreTime, date string, ctx map[string]int) (remain string, succ bool)
var dateFormatParserTable = map[string]dateFormatParser{
"%b": abbreviatedMonth, // Abbreviated month name (Jan..Dec)
"%c": monthNumeric, // Month, numeric (0..12)
"%d": dayOfMonthNumeric, // Day of the month, numeric (0..31)
"%e": dayOfMonthNumeric, // Day of the month, numeric (0..31)
"%f": microSeconds, // Microseconds (000000..999999)
"%h": hour12Numeric, // Hour (01..12)
"%H": hour24Numeric, // Hour (00..23)
"%I": hour12Numeric, // Hour (01..12)
"%i": minutesNumeric, // Minutes, numeric (00..59)
"%j": dayOfYearNumeric, // Day of year (001..366)
"%k": hour24Numeric, // Hour (0..23)
"%l": hour12Numeric, // Hour (1..12)
"%M": fullNameMonth, // Month name (January..December)
"%m": monthNumeric, // Month, numeric (00..12)
"%p": isAMOrPM, // AM or PM
"%r": time12Hour, // Time, 12-hour (hh:mm:ss followed by AM or PM)
"%s": secondsNumeric, // Seconds (00..59)
"%S": secondsNumeric, // Seconds (00..59)
"%T": time24Hour, // Time, 24-hour (hh:mm:ss)
"%Y": yearNumericFourDigits, // Year, numeric, four digits
"%#": skipAllNums, // Skip all numbers
"%.": skipAllPunct, // Skip all punctation characters
"%@": skipAllAlpha, // Skip all alpha characters
// Deprecated since MySQL 5.7.5
"%y": yearNumericTwoDigits, // Year, numeric (two digits)
// TODO: Add the following...
// "%a": abbreviatedWeekday, // Abbreviated weekday name (Sun..Sat)
// "%D": dayOfMonthWithSuffix, // Day of the month with English suffix (0th, 1st, 2nd, 3rd)
// "%U": weekMode0, // Week (00..53), where Sunday is the first day of the week; WEEK() mode 0
// "%u": weekMode1, // Week (00..53), where Monday is the first day of the week; WEEK() mode 1
// "%V": weekMode2, // Week (01..53), where Sunday is the first day of the week; WEEK() mode 2; used with %X
// "%v": weekMode3, // Week (01..53), where Monday is the first day of the week; WEEK() mode 3; used with %x
// "%W": weekdayName, // Weekday name (Sunday..Saturday)
// "%w": dayOfWeek, // Day of the week (0=Sunday..6=Saturday)
// "%X": yearOfWeek, // Year for the week where Sunday is the first day of the week, numeric, four digits; used with %V
// "%x": yearOfWeek, // Year for the week, where Monday is the first day of the week, numeric, four digits; used with %v
}
// GetFormatType checks the type(Duration, Date or Datetime) of a format string.
func GetFormatType(format string) (isDuration, isDate bool) {
format = skipWhiteSpace(format)
var token string
var succ bool
for {
token, format, succ = getFormatToken(format)
if len(token) == 0 {
break
}
if !succ {
isDuration, isDate = false, false
break
}
if len(token) >= 2 && token[0] == '%' {
switch token[1] {
case 'h', 'H', 'i', 'I', 's', 'S', 'k', 'l', 'f', 'r', 'T':
isDuration = true
case 'y', 'Y', 'm', 'M', 'c', 'b', 'D', 'd', 'e':
isDate = true
}
}
if isDuration && isDate {
break
}
}
return
}
func matchDateWithToken(t *CoreTime, date string, token string, ctx map[string]int) (remain string, succ bool) {
if parse, ok := dateFormatParserTable[token]; ok {
return parse(t, date, ctx)
}
if strings.HasPrefix(date, token) {
return date[len(token):], true
}
return date, false
}
// Try to parse digits with number of `limit` starting from `input`
// Return <number, n chars to step forward> if success.
// Return <_, 0> if fail.
func parseNDigits(input string, limit int) (number int, step int) {
if limit <= 0 {
return 0, 0
}
var num uint64 = 0
step = 0
for ; step < len(input) && step < limit && '0' <= input[step] && input[step] <= '9'; step++ {
num = num*10 + uint64(input[step]-'0')
}
return int(num), step
}
func secondsNumeric(t *CoreTime, input string, _ map[string]int) (string, bool) {
v, step := parseNDigits(input, 2)
if step <= 0 || v >= 60 {
return input, false
}
t.setSecond(uint8(v))
return input[step:], true
}
func minutesNumeric(t *CoreTime, input string, _ map[string]int) (string, bool) {
v, step := parseNDigits(input, 2)
if step <= 0 || v >= 60 {
return input, false
}
t.setMinute(uint8(v))
return input[step:], true
}
type parseState int32
const (
parseStateNormal parseState = 1
parseStateFail parseState = 2
parseStateEndOfLine parseState = 3
)
func parseSep(input string) (string, parseState) {
input = skipWhiteSpace(input)
if len(input) == 0 {
return input, parseStateEndOfLine
}
if input[0] != ':' {
return input, parseStateFail
}
if input = skipWhiteSpace(input[1:]); len(input) == 0 {
return input, parseStateEndOfLine
}
return input, parseStateNormal
}
func time12Hour(t *CoreTime, input string, _ map[string]int) (string, bool) {
tryParse := func(input string) (string, parseState) {
// hh:mm:ss AM
/// Note that we should update `t` as soon as possible, or we
/// can not get correct result for incomplete input like "12:13"
/// that is shorter than "hh:mm:ss"
hour, step := parseNDigits(input, 2) // 1..12
if step <= 0 || hour > 12 || hour == 0 {
return input, parseStateFail
}
// Handle special case: 12:34:56 AM -> 00:34:56
// For PM, we will add 12 it later
if hour == 12 {
hour = 0
}
t.setHour(uint8(hour))
// ':'
var state parseState
if input, state = parseSep(input[step:]); state != parseStateNormal {
return input, state
}
minute, step := parseNDigits(input, 2) // 0..59
if step <= 0 || minute > 59 {
return input, parseStateFail
}
t.setMinute(uint8(minute))
// ':'
if input, state = parseSep(input[step:]); state != parseStateNormal {
return input, state
}
second, step := parseNDigits(input, 2) // 0..59
if step <= 0 || second > 59 {
return input, parseStateFail
}
t.setSecond(uint8(second))
input = skipWhiteSpace(input[step:])
if len(input) == 0 {
// No "AM"/"PM" suffix, it is ok
return input, parseStateEndOfLine
} else if len(input) < 2 {
// some broken char, fail
return input, parseStateFail
}
switch {
case hasCaseInsensitivePrefix(input, "AM"):
t.setHour(uint8(hour))
case hasCaseInsensitivePrefix(input, "PM"):
t.setHour(uint8(hour + 12))
default:
return input, parseStateFail
}
return input[2:], parseStateNormal
}
remain, state := tryParse(input)
if state == parseStateFail {
return input, false
}
return remain, true
}
func time24Hour(t *CoreTime, input string, _ map[string]int) (string, bool) {
tryParse := func(input string) (string, parseState) {
// hh:mm:ss
/// Note that we should update `t` as soon as possible, or we
/// can not get correct result for incomplete input like "12:13"
/// that is shorter than "hh:mm:ss"
hour, step := parseNDigits(input, 2) // 0..23
if step <= 0 || hour > 23 {
return input, parseStateFail
}
t.setHour(uint8(hour))
// ':'
var state parseState
if input, state = parseSep(input[step:]); state != parseStateNormal {
return input, state
}
minute, step := parseNDigits(input, 2) // 0..59
if step <= 0 || minute > 59 {
return input, parseStateFail
}
t.setMinute(uint8(minute))
// ':'
if input, state = parseSep(input[step:]); state != parseStateNormal {
return input, state
}
second, step := parseNDigits(input, 2) // 0..59
if step <= 0 || second > 59 {
return input, parseStateFail
}
t.setSecond(uint8(second))
return input[step:], parseStateNormal
}
remain, state := tryParse(input)
if state == parseStateFail {
return input, false
}
return remain, true
}
const (
constForAM = 1 + iota
constForPM
)
func isAMOrPM(_ *CoreTime, input string, ctx map[string]int) (string, bool) {
if len(input) < 2 {
return input, false
}
s := strings.ToLower(input[:2])
switch s {
case "am":
ctx["%p"] = constForAM
case "pm":
ctx["%p"] = constForPM
default:
return input, false
}
return input[2:], true
}
// oneToSixDigitRegex: it was just for [0, 999999]
var oneToSixDigitRegex = regexp.MustCompile("^[0-9]{0,6}")
// numericRegex: it was for any numeric characters
var numericRegex = regexp.MustCompile("[0-9]+")
func dayOfMonthNumeric(t *CoreTime, input string, _ map[string]int) (string, bool) {
v, step := parseNDigits(input, 2) // 0..31
if step <= 0 || v > 31 {
return input, false
}
t.setDay(uint8(v))
return input[step:], true
}
func hour24Numeric(t *CoreTime, input string, ctx map[string]int) (string, bool) {
v, step := parseNDigits(input, 2) // 0..23
if step <= 0 || v > 23 {
return input, false
}
t.setHour(uint8(v))
ctx["%H"] = v
return input[step:], true
}
func hour12Numeric(t *CoreTime, input string, ctx map[string]int) (string, bool) {
v, step := parseNDigits(input, 2) // 1..12
if step <= 0 || v > 12 || v == 0 {
return input, false
}
t.setHour(uint8(v))
ctx["%h"] = v
return input[step:], true
}
func microSeconds(t *CoreTime, input string, _ map[string]int) (string, bool) {
v, step := parseNDigits(input, 6)
if step <= 0 {
t.setMicrosecond(0)
return input, true
}
for i := step; i < 6; i++ {
v *= 10
}
t.setMicrosecond(uint32(v))
return input[step:], true
}
func yearNumericFourDigits(t *CoreTime, input string, ctx map[string]int) (string, bool) {
return yearNumericNDigits(t, input, ctx, 4)
}
func yearNumericTwoDigits(t *CoreTime, input string, ctx map[string]int) (string, bool) {
return yearNumericNDigits(t, input, ctx, 2)
}
func yearNumericNDigits(t *CoreTime, input string, _ map[string]int, n int) (string, bool) {
year, step := parseNDigits(input, n)
if step <= 0 {
return input, false
} else if step <= 2 {
year = adjustYear(year)
}
t.setYear(uint16(year))
return input[step:], true
}
func dayOfYearNumeric(_ *CoreTime, input string, ctx map[string]int) (string, bool) {
// MySQL declares that "%j" should be "Day of year (001..366)". But actually,
// it accepts a number that is up to three digits, which range is [1, 999].
v, step := parseNDigits(input, 3)
if step <= 0 || v == 0 {
return input, false
}
ctx["%j"] = v
return input[step:], true
}
func abbreviatedMonth(t *CoreTime, input string, _ map[string]int) (string, bool) {
if len(input) >= 3 {
monthName := strings.ToLower(input[:3])
if month, ok := monthAbbrev[monthName]; ok {
t.setMonth(uint8(month))
return input[len(monthName):], true
}
}
return input, false
}
func hasCaseInsensitivePrefix(input, prefix string) bool {
if len(input) < len(prefix) {
return false
}
return strings.EqualFold(input[:len(prefix)], prefix)
}
func fullNameMonth(t *CoreTime, input string, _ map[string]int) (string, bool) {
for i, month := range MonthNames {
if hasCaseInsensitivePrefix(input, month) {
t.setMonth(uint8(i + 1))
return input[len(month):], true
}
}
return input, false
}
func monthNumeric(t *CoreTime, input string, _ map[string]int) (string, bool) {
v, step := parseNDigits(input, 2) // 1..12
if step <= 0 || v > 12 {
return input, false
}
t.setMonth(uint8(v))
return input[step:], true
}
// DateFSP gets fsp from date string.
func DateFSP(date string) (fsp int) {
i := strings.LastIndex(date, ".")
if i != -1 {
fsp = len(date) - i - 1
}
return
}
// DateTimeIsOverflow returns if this date is overflow.
// See: https://dev.mysql.com/doc/refman/8.0/en/datetime.html
func DateTimeIsOverflow(ctx Context, date Time) (bool, error) {
tz := ctx.Location()
if tz == nil {
logutil.BgLogger().Warn("use gotime.local because sc.timezone is nil")
tz = gotime.Local
}
var err error
var b, e, t gotime.Time
switch date.Type() {
case mysql.TypeDate, mysql.TypeDatetime:
if b, err = MinDatetime.GoTime(tz); err != nil {
return false, err
}
if e, err = MaxDatetime.GoTime(tz); err != nil {
return false, err
}
case mysql.TypeTimestamp:
minTS, maxTS := MinTimestamp, MaxTimestamp
if tz != gotime.UTC {
if err = minTS.ConvertTimeZone(gotime.UTC, tz); err != nil {
return false, err
}
if err = maxTS.ConvertTimeZone(gotime.UTC, tz); err != nil {
return false, err
}
}
if b, err = minTS.GoTime(tz); err != nil {
return false, err
}
if e, err = maxTS.GoTime(tz); err != nil {
return false, err
}
default:
return false, nil
}
if t, err = date.AdjustedGoTime(tz); err != nil {
return false, err
}
inRange := (t.After(b) || t.Equal(b)) && (t.Before(e) || t.Equal(e))
return !inRange, nil
}
func skipAllNums(_ *CoreTime, input string, _ map[string]int) (string, bool) {
retIdx := 0
for i, ch := range input {
if !unicode.IsNumber(ch) {
break
}
retIdx = i + 1
}
return input[retIdx:], true
}
func skipAllPunct(_ *CoreTime, input string, _ map[string]int) (string, bool) {
retIdx := 0
for i, ch := range input {
if !unicode.IsPunct(ch) {
break
}
retIdx = i + 1
}
return input[retIdx:], true
}
func skipAllAlpha(_ *CoreTime, input string, _ map[string]int) (string, bool) {
retIdx := 0
for i, ch := range input {
if !unicode.IsLetter(ch) {
break
}
retIdx = i + 1
}
return input[retIdx:], true
}
// Copyright 2023 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package types
import (
"github.com/pingcap/errors"
"github.com/pingcap/tidb/pkg/errno"
)
// HandleTruncate ignores or returns the error based on the Context state.
func (c *Context) HandleTruncate(err error) error {
// TODO: At present we have not checked whether the error can be ignored or treated as warning.
// We will do that later, and then append WarnDataTruncated instead of the error itself.
if err == nil {
return nil
}
err = errors.Cause(err)
if e, ok := err.(*errors.Error); !ok ||
(e.Code() != errno.ErrTruncatedWrongValue &&
e.Code() != errno.ErrDataTooLong &&
e.Code() != errno.ErrTruncatedWrongValueForField &&
e.Code() != errno.ErrWarnDataOutOfRange &&
e.Code() != errno.ErrDataOutOfRange &&
e.Code() != errno.ErrBadNumber &&
e.Code() != errno.ErrWrongValueForType &&
e.Code() != errno.ErrDatetimeFunctionOverflow &&
e.Code() != errno.WarnDataTruncated &&
e.Code() != errno.ErrIncorrectDatetimeValue) {
return err
}
if c.Flags().IgnoreTruncateErr() {
return nil
}
if c.Flags().TruncateAsWarning() {
c.AppendWarning(err)
return nil
}
return err
}
// Copyright 2024 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package types
import (
"encoding/binary"
"fmt"
"math"
"slices"
"strconv"
"strings"
"unsafe"
jsoniter "github.com/json-iterator/go"
"github.com/pingcap/errors"
"github.com/pingcap/tidb/pkg/parser/types"
)
func init() {
var buf [4]byte
binary.NativeEndian.PutUint32(buf[:], 0x2)
if buf[0] == 0x02 && buf[1] == 0x00 && buf[2] == 0x00 && buf[3] == 0x00 {
return
}
panic("VectorFloat32 only supports little endian")
}
// CreateVectorFloat32 creates a VectorFloat32. Returns error if there are invalid values like NaN and Inf.
func CreateVectorFloat32(vector []float32) (VectorFloat32, error) {
for _, v := range vector {
if math.IsNaN(float64(v)) {
valueError := errors.Errorf("NaN not allowed in vector")
return ZeroVectorFloat32, valueError
}
if math.IsInf(float64(v), 0) {
valueError := errors.Errorf("infinite value not allowed in vector")
return ZeroVectorFloat32, valueError
}
}
vec := InitVectorFloat32(len(vector))
copy(vec.Elements(), vector)
return vec, nil
}
// MustCreateVectorFloat32 creates a VectorFloat32. Panics if there are invalid values like NaN and Inf.
func MustCreateVectorFloat32(v []float32) VectorFloat32 {
r, err := CreateVectorFloat32(v)
if err != nil {
panic(err)
}
return r
}
// VectorFloat32 represents a vector of float32.
//
// Memory Format:
// 4 byte - Length
// 4 byte * N - Data in Float32
//
// Normally, the data layout in storage (i.e. after serialization) is identical
// to the memory layout. However, in BigEndian machines, we have BigEndian in
// memory and always have LittleEndian in storage or during data exchange.
type VectorFloat32 struct {
data []byte // Note: data must be a well-formatted byte slice (len >= 4)
}
// ZeroVectorFloat32 is a zero value of VectorFloat32.
var ZeroVectorFloat32 = InitVectorFloat32( /* dims= */ 0)
// InitVectorFloat32 initializes a vector with the given dimension. The values are initialized to zero.
func InitVectorFloat32(dims int) VectorFloat32 {
data := make([]byte, 4+dims*4)
binary.LittleEndian.PutUint32(data, uint32(dims))
return VectorFloat32{data: data}
}
// CheckVectorDimValid checks if the vector's dimension is valid.
func CheckVectorDimValid(dim int) error {
const (
maxVectorDimension = 16383
)
if dim < 0 {
return errors.Errorf("dimensions for type vector must be at least 0")
}
if dim > maxVectorDimension {
return errors.Errorf("vector cannot have more than %d dimensions", maxVectorDimension)
}
return nil
}
// CheckDimsFitColumn checks if the vector has the expected dimension, which is defined by the column type or cast type.
func (v VectorFloat32) CheckDimsFitColumn(expectedFlen int) error {
if expectedFlen != types.UnspecifiedLength && v.Len() != expectedFlen {
return errors.Errorf("vector has %d dimensions, does not fit VECTOR(%d)", v.Len(), expectedFlen)
}
return nil
}
// Len returns the length (dimension) of the vector.
func (v VectorFloat32) Len() int {
return int(binary.LittleEndian.Uint32(v.data))
}
// Elements returns a mutable typed slice of the elements.
func (v VectorFloat32) Elements() []float32 {
l := v.Len()
if l == 0 {
return nil
}
return unsafe.Slice((*float32)(unsafe.Pointer(&v.data[4])), l)
}
// TruncatedString prints the vector in a truncated form, which is useful for
// outputting in logs or EXPLAIN statements.
func (v VectorFloat32) TruncatedString() string {
const (
maxDisplayElements = 5
)
truncatedElements := 0
elements := v.Elements()
if len(elements) > maxDisplayElements {
truncatedElements = len(elements) - maxDisplayElements
elements = elements[:maxDisplayElements]
}
buf := make([]byte, 0, 2+v.Len()*2)
buf = append(buf, '[')
for i, v := range elements {
if i > 0 {
buf = append(buf, ","...)
}
buf = strconv.AppendFloat(buf, float64(v), 'g', 2, 32)
}
if truncatedElements > 0 {
buf = append(buf, fmt.Sprintf(",(%d more)...", truncatedElements)...)
}
buf = append(buf, ']')
// buf is not used elsewhere, so it's safe to just cast to String
return unsafe.String(unsafe.SliceData(buf), len(buf))
}
// String returns a string representation of the vector, which can be parsed later.
func (v VectorFloat32) String() string {
elements := v.Elements()
buf := make([]byte, 0, 2+v.Len()*2)
buf = append(buf, '[')
for i, v := range elements {
if i > 0 {
buf = append(buf, ',')
}
buf = strconv.AppendFloat(buf, float64(v), 'f', -1, 32)
}
buf = append(buf, ']')
// buf is not used elsewhere, so it's safe to just cast to String
return unsafe.String(unsafe.SliceData(buf), len(buf))
}
// ZeroCopySerialize serializes the vector into a new byte slice, without memory copy.
func (v VectorFloat32) ZeroCopySerialize() []byte {
return v.data
}
// SerializeTo serializes the vector into the byte slice.
func (v VectorFloat32) SerializeTo(b []byte) []byte {
return append(b, v.data...)
}
// SerializedSize returns the size of the serialized data.
func (v VectorFloat32) SerializedSize() int {
return len(v.data)
}
// EstimatedMemUsage returns the estimated memory usage.
func (v VectorFloat32) EstimatedMemUsage() int {
return int(unsafe.Sizeof(v)) + len(v.data)
}
// PeekBytesAsVectorFloat32 trys to peek some bytes from b, until
// we can deserialize a VectorFloat32 from those bytes.
func PeekBytesAsVectorFloat32(b []byte) (n int, err error) {
if len(b) < 4 {
err = errors.Errorf("bad VectorFloat32 value header (len=%d)", len(b))
return
}
elements := binary.LittleEndian.Uint32(b)
totalDataSize := elements*4 + 4
if len(b) < int(totalDataSize) {
err = errors.Errorf("bad VectorFloat32 value (len=%d, expected=%d)", len(b), totalDataSize)
return
}
return int(totalDataSize), nil
}
// ZeroCopyDeserializeVectorFloat32 deserializes the byte slice into a vector, without memory copy.
// Note: b must not be mutated, because this function does zero copy.
func ZeroCopyDeserializeVectorFloat32(b []byte) (VectorFloat32, []byte, error) {
length, err := PeekBytesAsVectorFloat32(b)
if err != nil {
return ZeroVectorFloat32, b, err
}
return VectorFloat32{data: b[:length]}, b[length:], nil
}
// ParseVectorFloat32 parses a string into a vector.
func ParseVectorFloat32(s string) (VectorFloat32, error) {
// issue #57143 jsoniter parse null will return as []
// Trim whitespace and check for null string and reject it
if strings.TrimSpace(s) == "null" {
return ZeroVectorFloat32, errors.Errorf("Invalid vector text: %s", s)
}
var values []float32
var valueError error
// We explicitly use a JSON float parser to reject other JSON types.
parser := jsoniter.ParseString(jsoniter.ConfigDefault, s)
parser.ReadArrayCB(func(parser *jsoniter.Iterator) bool {
v := parser.ReadFloat64()
if math.IsNaN(v) {
valueError = errors.Errorf("NaN not allowed in vector")
return false
}
if math.IsInf(v, 0) {
valueError = errors.Errorf("infinite value not allowed in vector")
return false
}
// Check if the value can be safely converted to float32
if v < -math.MaxFloat32 || v > math.MaxFloat32 {
valueError = errors.Errorf("value %v out of range for float32", v)
return false
}
values = append(values, float32(v))
return true
})
if parser.Error != nil {
return ZeroVectorFloat32, errors.Errorf("Invalid vector text: %s", s)
}
if valueError != nil {
return ZeroVectorFloat32, valueError
}
// Check if there are any remaining characters after the JSON array
// This ensures we reject strings like "[1,2,3]extra"
remaining := parser.SkipAndReturnBytes()
if len(remaining) > 0 {
// Check if the remaining bytes are only whitespace
trimmed := strings.TrimSpace(string(remaining))
if len(trimmed) > 0 {
return ZeroVectorFloat32, errors.Errorf("Invalid vector text: %s", s)
}
}
dim := len(values)
if err := CheckVectorDimValid(dim); err != nil {
return ZeroVectorFloat32, err
}
vec := InitVectorFloat32(dim)
copy(vec.Elements(), values)
return vec, nil
}
// Clone returns a deep copy of the vector.
func (v VectorFloat32) Clone() VectorFloat32 {
return VectorFloat32{data: slices.Clone(v.data)}
}
// IsZeroValue returns true if the vector is a zero value (which length is zero).
func (v VectorFloat32) IsZeroValue() bool {
return v.Len() == 0
}
// Copyright 2024 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package types
import (
"math"
"github.com/pingcap/errors"
)
func (a VectorFloat32) checkIdenticalDims(b VectorFloat32) error {
if a.Len() != b.Len() {
return errors.Errorf("vectors have different dimensions: %d and %d", a.Len(), b.Len())
}
return nil
}
// L2SquaredDistance returns the squared L2 distance between two vectors.
// This saves a sqrt calculation.
func (a VectorFloat32) L2SquaredDistance(b VectorFloat32) (float64, error) {
if err := a.checkIdenticalDims(b); err != nil {
return 0, errors.Trace(err)
}
var distance float32 = 0.0
va := a.Elements()
vb := b.Elements()
for i, iMax := 0, a.Len(); i < iMax; i++ {
// Hope this can be vectorized.
diff := va[i] - vb[i]
distance += diff * diff
}
return float64(distance), nil
}
// L2Distance returns the L2 distance between two vectors.
func (a VectorFloat32) L2Distance(b VectorFloat32) (float64, error) {
d, err := a.L2SquaredDistance(b)
if err != nil {
return 0, errors.Trace(err)
}
return math.Sqrt(d), nil
}
// InnerProduct returns the inner product of two vectors.
func (a VectorFloat32) InnerProduct(b VectorFloat32) (float64, error) {
if err := a.checkIdenticalDims(b); err != nil {
return 0, errors.Trace(err)
}
var distance float32 = 0.0
va := a.Elements()
vb := b.Elements()
for i, iMax := 0, a.Len(); i < iMax; i++ {
// Hope this can be vectorized.
distance += va[i] * vb[i]
}
return float64(distance), nil
}
// NegativeInnerProduct returns the negative inner product of two vectors.
func (a VectorFloat32) NegativeInnerProduct(b VectorFloat32) (float64, error) {
d, err := a.InnerProduct(b)
if err != nil {
return 0, errors.Trace(err)
}
return d * -1, nil
}
// CosineDistance returns the cosine distance between two vectors.
func (a VectorFloat32) CosineDistance(b VectorFloat32) (float64, error) {
if err := a.checkIdenticalDims(b); err != nil {
return 0, errors.Trace(err)
}
var distance float32 = 0.0
var norma float32 = 0.0
var normb float32 = 0.0
va := a.Elements()
vb := b.Elements()
for i, iMax := 0, a.Len(); i < iMax; i++ {
// Hope this can be vectorized.
distance += va[i] * vb[i]
norma += va[i] * va[i]
normb += vb[i] * vb[i]
}
similarity := float64(distance) / math.Sqrt(float64(norma)*float64(normb))
if math.IsNaN(similarity) {
// Divide by zero
return math.NaN(), nil
}
if similarity > 1.0 {
similarity = 1.0
} else if similarity < -1.0 {
similarity = -1.0
}
return 1.0 - similarity, nil
}
// L1Distance returns the L1 distance between two vectors.
func (a VectorFloat32) L1Distance(b VectorFloat32) (float64, error) {
if err := a.checkIdenticalDims(b); err != nil {
return 0, errors.Trace(err)
}
var distance float32 = 0.0
va := a.Elements()
vb := b.Elements()
for i, iMax := 0, a.Len(); i < iMax; i++ {
// Hope this can be vectorized.
diff := va[i] - vb[i]
if diff < 0 {
diff = -diff
}
distance += diff
}
return float64(distance), nil
}
// L2Norm returns the L2 norm of the vector.
func (a VectorFloat32) L2Norm() float64 {
// Note: We align the impl with pgvector: Only l2_norm use double
// precision during calculation.
var norm float64 = 0.0
va := a.Elements()
for i, iMax := 0, a.Len(); i < iMax; i++ {
// Hope this can be vectorized.
norm += float64(va[i]) * float64(va[i])
}
return math.Sqrt(norm)
}
// Add adds two vectors. The vectors must have the same dimension.
func (a VectorFloat32) Add(b VectorFloat32) (VectorFloat32, error) {
if err := a.checkIdenticalDims(b); err != nil {
return ZeroVectorFloat32, errors.Trace(err)
}
result := InitVectorFloat32(a.Len())
va := a.Elements()
vb := b.Elements()
vr := result.Elements()
for i, iMax := 0, a.Len(); i < iMax; i++ {
// Hope this can be vectorized.
vr[i] = va[i] + vb[i]
}
for i, iMax := 0, a.Len(); i < iMax; i++ {
if math.IsInf(float64(vr[i]), 0) {
return ZeroVectorFloat32, errors.Errorf("value out of range: overflow")
}
if math.IsNaN(float64(vr[i])) {
return ZeroVectorFloat32, errors.Errorf("value out of range: NaN")
}
}
return result, nil
}
// Sub subtracts two vectors. The vectors must have the same dimension.
func (a VectorFloat32) Sub(b VectorFloat32) (VectorFloat32, error) {
if err := a.checkIdenticalDims(b); err != nil {
return ZeroVectorFloat32, errors.Trace(err)
}
result := InitVectorFloat32(a.Len())
va := a.Elements()
vb := b.Elements()
vr := result.Elements()
for i, iMax := 0, a.Len(); i < iMax; i++ {
// Hope this can be vectorized.
vr[i] = va[i] - vb[i]
}
for i, iMax := 0, a.Len(); i < iMax; i++ {
if math.IsInf(float64(vr[i]), 0) {
return ZeroVectorFloat32, errors.Errorf("value out of range: overflow")
}
if math.IsNaN(float64(vr[i])) {
return ZeroVectorFloat32, errors.Errorf("value out of range: NaN")
}
}
return result, nil
}
// Mul multiplies two vectors. The vectors must have the same dimension.
func (a VectorFloat32) Mul(b VectorFloat32) (VectorFloat32, error) {
if err := a.checkIdenticalDims(b); err != nil {
return ZeroVectorFloat32, errors.Trace(err)
}
result := InitVectorFloat32(a.Len())
va := a.Elements()
vb := b.Elements()
vr := result.Elements()
for i, iMax := 0, a.Len(); i < iMax; i++ {
// Hope this can be vectorized.
vr[i] = va[i] * vb[i]
}
for i, iMax := 0, a.Len(); i < iMax; i++ {
if math.IsInf(float64(vr[i]), 0) {
return ZeroVectorFloat32, errors.Errorf("value out of range: overflow")
}
if math.IsNaN(float64(vr[i])) {
return ZeroVectorFloat32, errors.Errorf("value out of range: NaN")
}
// TODO: Check for underflow.
// See https://github.com/pgvector/pgvector/blob/81d13bd40f03890bb5b6360259628cd473c2e467/src/vector.c#L873
}
return result, nil
}
// Compare returns an integer comparing two vectors. The result will be 0 if a==b, -1 if a < b, and +1 if a > b.
func (a VectorFloat32) Compare(b VectorFloat32) int {
la := a.Len()
lb := b.Len()
commonLen := min(lb, la)
va := a.Elements()
vb := b.Elements()
for i := range commonLen {
if va[i] < vb[i] {
return -1
} else if va[i] > vb[i] {
return 1
}
}
if la < lb {
return -1
} else if la > lb {
return 1
}
return 0
}
// Copyright 2022 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package cgroup
import (
"bufio"
"bytes"
"fmt"
"io"
"math"
"os"
"path/filepath"
"runtime"
"strconv"
"strings"
"github.com/pingcap/errors"
"github.com/pingcap/log"
"go.uber.org/zap"
)
// CPUQuotaStatus presents the status of how CPU quota is used
type CPUQuotaStatus int
const (
// CPUQuotaUndefined is returned when CPU quota is undefined
CPUQuotaUndefined CPUQuotaStatus = iota
// CPUQuotaUsed is returned when a valid CPU quota can be used
CPUQuotaUsed
// CPUQuotaMinUsed is return when CPU quota is smaller than the min value
CPUQuotaMinUsed
)
const (
_maxProcsKey = "GOMAXPROCS"
// They are cgroup filename for different data
cgroupV1MemStat = "memory.stat"
cgroupV2MemStat = "memory.stat"
cgroupV2MemLimit = "memory.max"
cgroupV1MemUsage = "memory.usage_in_bytes"
cgroupV2MemUsage = "memory.current"
cgroupV1CPUQuota = "cpu.cfs_quota_us"
cgroupV1CPUPeriod = "cpu.cfs_period_us"
cgroupV1CPUSysUsage = "cpuacct.usage_sys"
cgroupV1CPUUserUsage = "cpuacct.usage_user"
cgroupV2CPUMax = "cpu.max"
cgroupV2CPUStat = "cpu.stat"
// {memory|cpu}.stat file keys
//
// key for # of bytes of file-backed memory on inactive LRU list in cgroupv1
cgroupV1MemInactiveFileUsageStatKey = "total_inactive_file"
// key for # of bytes of file-backed memory on inactive LRU list in cgroupv2
cgroupV2MemInactiveFileUsageStatKey = "inactive_file"
cgroupV1MemLimitStatKey = "hierarchical_memory_limit"
)
const (
procPathCGroup = "/proc/self/cgroup"
procPathMountInfo = "/proc/self/mountinfo"
)
// CPUUsage returns CPU usage and quotas for an entire cgroup.
type CPUUsage struct {
// System time and user time taken by this cgroup or process. In nanoseconds.
Stime, Utime uint64
// CPU period and quota for this process, in microseconds. This cgroup has
// access to up to (quota/period) proportion of CPU resources on the system.
// For instance, if there are 4 CPUs, quota = 150000, period = 100000,
// this cgroup can use around ~1.5 CPUs, or 37.5% of total scheduler time.
// If quota is -1, it's unlimited.
Period, Quota int64
// NumCPUs is the number of CPUs in the system. Always returned even if
// not called from a cgroup.
NumCPU int
}
// Version represents the cgroup version.
type Version int
// cgroup versions.
const (
Unknown Version = 0
V1 Version = 1
V2 Version = 2
)
// SetGOMAXPROCS is to set GOMAXPROCS to the number of CPUs.
func SetGOMAXPROCS() (func(), error) {
const minGOMAXPROCS int = 1
undoNoop := func() {
log.Info("maxprocs: No GOMAXPROCS change to reset")
}
if maxv, exists := os.LookupEnv(_maxProcsKey); exists {
log.Info(fmt.Sprintf("maxprocs: Honoring GOMAXPROCS=%q as set in environment", maxv))
return undoNoop, nil
}
maxProcs, status, err := CPUQuotaToGOMAXPROCS(minGOMAXPROCS)
if err != nil {
return undoNoop, err
}
if status == CPUQuotaUndefined {
log.Info(fmt.Sprintf("maxprocs: Leaving GOMAXPROCS=%v: CPU quota undefined", runtime.GOMAXPROCS(0)))
return undoNoop, nil
}
prev := runtime.GOMAXPROCS(0)
undo := func() {
log.Info(fmt.Sprintf("maxprocs: Resetting GOMAXPROCS to %v", prev))
runtime.GOMAXPROCS(prev)
}
if prev == maxProcs {
return undoNoop, nil
}
switch status {
case CPUQuotaMinUsed:
log.Info(fmt.Sprintf("maxprocs: Updating GOMAXPROCS=%v: using minimum allowed GOMAXPROCS", maxProcs))
case CPUQuotaUsed:
log.Info(fmt.Sprintf("maxprocs: Updating GOMAXPROCS=%v: determined from CPU quota", maxProcs))
}
runtime.GOMAXPROCS(maxProcs)
return undo, nil
}
func readFile(filepath string) (res []byte, err error) {
var f *os.File
//nolint:gosec
f, err = os.Open(filepath)
if err != nil {
return nil, err
}
defer func() {
err = errors.Join(err, f.Close())
}()
res, err = io.ReadAll(f)
return res, err
}
// The field in /proc/self/cgroup and /proc/self/mountinfo may appear as "cpuacct,cpu" or "rw,cpuacct,cpu"
// while the input controller is "cpu,cpuacct"
func controllerMatch(field string, controller string) bool {
if field == controller {
return true
}
fs := strings.Split(field, ",")
if len(fs) < 2 {
return false
}
cs := strings.Split(controller, ",")
if len(fs) < len(cs) {
return false
}
fmap := make(map[string]struct{}, len(fs))
for _, f := range fs {
fmap[f] = struct{}{}
}
for _, c := range cs {
if _, ok := fmap[c]; !ok {
return false
}
}
return true
}
// The controller is defined via either type `memory` for cgroup v1 or via empty type for cgroup v2,
// where the type is the second field in /proc/[pid]/cgroup file
func detectControlPath(cgroupFilePath string, controller string) (string, error) {
//nolint:gosec
cgroup, err := os.Open(cgroupFilePath)
if err != nil {
return "", errors.Wrapf(err, "failed to read %s cgroup from cgroups file: %s", controller, cgroupFilePath)
}
defer func() {
err := cgroup.Close()
if err != nil {
log.Error("close cgroupFilePath", zap.Error(err))
}
}()
scanner := bufio.NewScanner(cgroup)
var unifiedPathIfFound string
for scanner.Scan() {
fields := bytes.Split(scanner.Bytes(), []byte{':'})
if len(fields) < 3 {
// The lines should always have three fields, there's something fishy here.
continue
}
f0, f1 := string(fields[0]), string(fields[1])
// First case if v2, second - v1. We give v2 the priority here.
// There is also a `hybrid` mode when both versions are enabled,
// but no known container solutions support it.
if f0 == "0" && f1 == "" {
unifiedPathIfFound = string(fields[2])
} else if controllerMatch(f1, controller) {
var result []byte
// In some case, the cgroup path contains `:`. We need to join them back.
if len(fields) > 3 {
result = bytes.Join(fields[2:], []byte(":"))
} else {
result = fields[2]
}
return string(result), nil
}
}
return unifiedPathIfFound, nil
}
// See http://man7.org/linux/man-pages/man5/proc.5.html for `mountinfo` format.
func getCgroupDetails(mountInfoPath string, cRoot string, controller string) (mount []string, version []int, err error) {
//nolint:gosec
info, err := os.Open(mountInfoPath)
if err != nil {
return nil, nil, errors.Wrapf(err, "failed to read mounts info from file: %s", mountInfoPath)
}
defer func() {
err := info.Close()
if err != nil {
log.Error("close mountInfoPath", zap.Error(err))
}
}()
var foundVer1, foundVer2 = false, false
var mountPointVer1, mountPointVer2 string
scanner := bufio.NewScanner(info)
for scanner.Scan() {
fields := bytes.Fields(scanner.Bytes())
if len(fields) < 10 {
continue
}
ver, ok := detectCgroupVersion(fields, controller)
if ok {
mountPoint := string(fields[4])
if ver == 2 {
foundVer2 = true
mountPointVer2 = mountPoint
continue
}
// It is possible that the controller mount and the cgroup path are not the same (both are relative to the NS root).
// So start with the mount and construct the relative path of the cgroup.
// To test:
// 1、start a docker to run unit test or tidb-server
// > docker run -it --cpus=8 --memory=8g --name test --rm ubuntu:18.04 bash
//
// 2、change the limit when the container is running
// docker update --cpus=8 <containers>
nsRelativePath := string(fields[3])
if !strings.Contains(nsRelativePath, "..") {
// We don't expect to see err here ever but in case that it happens
// the best action is to ignore the line and hope that the rest of the lines
// will allow us to extract a valid path.
if relPath, err := filepath.Rel(nsRelativePath, cRoot); err == nil {
mountPointVer1 = filepath.Join(mountPoint, relPath)
foundVer1 = true
}
}
}
}
if foundVer1 && foundVer2 {
return []string{mountPointVer1, mountPointVer2}, []int{1, 2}, nil
}
if foundVer1 {
return []string{mountPointVer1}, []int{1}, nil
}
if foundVer2 {
return []string{mountPointVer2}, []int{2}, nil
}
return nil, nil, fmt.Errorf("failed to detect cgroup root mount and version")
}
func cgroupFileToUint64(filepath, desc string) (res uint64, err error) {
contents, err := readFile(filepath)
if err != nil {
return 0, errors.Wrapf(err, "error when reading %s from cgroup v1 at %s", desc, filepath)
}
res, err = strconv.ParseUint(string(bytes.TrimSpace(contents)), 10, 64)
if err != nil {
return 0, errors.Wrapf(err, "error when parsing %s from cgroup v1 at %s", desc, filepath)
}
return res, err
}
func cgroupFileToInt64(filepath, desc string) (res int64, err error) {
contents, err := readFile(filepath)
if err != nil {
return 0, errors.Wrapf(err, "error when reading %s from cgroup v1 at %s", desc, filepath)
}
res, err = strconv.ParseInt(string(bytes.TrimSpace(contents)), 10, 64)
if err != nil {
return 0, errors.Wrapf(err, "error when parsing %s from cgroup v1 at %s", desc, filepath)
}
return res, nil
}
// Return version of cgroup mount for memory controller if found
func detectCgroupVersion(fields [][]byte, controller string) (_ int, found bool) {
if len(fields) < 10 {
return 0, false
}
// Due to strange format there can be optional fields in the middle of the set, starting
// from the field #7. The end of the fields is marked with "-" field
var pos = 6
for pos < len(fields) {
if bytes.Equal(fields[pos], []byte{'-'}) {
break
}
pos++
}
// No optional fields separator found or there is less than 3 fields after it which is wrong
if (len(fields) - pos - 1) < 3 {
return 0, false
}
pos++
// Check for controller specifically in cgroup v1 (it is listed in super
// options field), as the value can't be found if it is not enforced.
if bytes.Equal(fields[pos], []byte("cgroup")) && controllerMatch(string(fields[pos+2]), controller) {
return 1, true
} else if bytes.Equal(fields[pos], []byte("cgroup2")) {
return 2, true
}
return 0, false
}
func detectCPUQuotaInV1(cRoot string) (period, quota int64, err error) {
quotaFilePath := filepath.Join(cRoot, cgroupV1CPUQuota)
periodFilePath := filepath.Join(cRoot, cgroupV1CPUPeriod)
quota, err = cgroupFileToInt64(quotaFilePath, "cpu quota")
if err != nil {
return 0, 0, err
}
period, err = cgroupFileToInt64(periodFilePath, "cpu period")
if err != nil {
return 0, 0, err
}
return period, quota, err
}
func detectCPUUsageInV1(cRoot string) (stime, utime uint64, err error) {
sysFilePath := filepath.Join(cRoot, cgroupV1CPUSysUsage)
userFilePath := filepath.Join(cRoot, cgroupV1CPUUserUsage)
stime, err = cgroupFileToUint64(sysFilePath, "cpu system time")
if err != nil {
return 0, 0, err
}
utime, err = cgroupFileToUint64(userFilePath, "cpu user time")
if err != nil {
return 0, 0, err
}
return stime, utime, err
}
func detectCPUQuotaInV2(cRoot string) (period, quota int64, err error) {
maxFilePath := filepath.Join(cRoot, cgroupV2CPUMax)
contents, err := readFile(maxFilePath)
if err != nil {
return 0, 0, errors.Wrapf(err, "error when read cpu quota from cgroup v2 at %s", maxFilePath)
}
fields := strings.Fields(string(contents))
if len(fields) > 2 || len(fields) == 0 {
return 0, 0, errors.Errorf("unexpected format when reading cpu quota from cgroup v2 at %s: %s", maxFilePath, contents)
}
if fields[0] == "max" {
// Negative quota denotes no limit.
quota = -1
} else {
quota, err = strconv.ParseInt(fields[0], 10, 64)
if err != nil {
return 0, 0, errors.Wrapf(err, "error when reading cpu quota from cgroup v2 at %s", maxFilePath)
}
}
if len(fields) == 2 {
period, err = strconv.ParseInt(fields[1], 10, 64)
if err != nil {
return 0, 0, errors.Wrapf(err, "error when reading cpu period from cgroup v2 at %s", maxFilePath)
}
}
return period, quota, nil
}
func detectCPUUsageInV2(cRoot string) (stime, utime uint64, err error) {
statFilePath := filepath.Join(cRoot, cgroupV2CPUStat)
var stat *os.File
//nolint:gosec
stat, err = os.Open(statFilePath)
if err != nil {
return 0, 0, errors.Wrapf(err, "can't read cpu usage from cgroup v2 at %s", statFilePath)
}
defer func() {
err = errors.Join(err, stat.Close())
}()
scanner := bufio.NewScanner(stat)
for scanner.Scan() {
fields := bytes.Fields(scanner.Bytes())
if len(fields) != 2 || (string(fields[0]) != "user_usec" && string(fields[0]) != "system_usec") {
continue
}
keyField := string(fields[0])
trimmed := string(bytes.TrimSpace(fields[1]))
usageVar := &stime
if keyField == "user_usec" {
usageVar = &utime
}
*usageVar, err = strconv.ParseUint(trimmed, 10, 64)
if err != nil {
return 0, 0, errors.Wrapf(err, "can't read cpu usage %s from cgroup v1 at %s", keyField, statFilePath)
}
}
return stime, utime, err
}
func readInt64Value(root, filename string, cgVersion int) (value uint64, err error) {
filePath := filepath.Join(root, filename)
//nolint:gosec
file, err := os.Open(filePath)
if err != nil {
return 0, errors.Wrapf(err, "can't read %s from cgroup v%d", filename, cgVersion)
}
defer file.Close()
scanner := bufio.NewScanner(file)
present := scanner.Scan()
if !present {
return 0, errors.Wrapf(err, "no value found in %s from cgroup v%d", filename, cgVersion)
}
data := scanner.Bytes()
trimmed := string(bytes.TrimSpace(data))
// cgroupv2 has certain control files that default to "max", so handle here.
if trimmed == "max" {
return math.MaxInt64, nil
}
value, err = strconv.ParseUint(trimmed, 10, 64)
if err != nil {
return 0, errors.Wrapf(err, "failed to parse value in %s from cgroup v%d", filename, cgVersion)
}
return value, nil
}
// Copyright 2022 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package cgroup
import (
"fmt"
"path/filepath"
"github.com/pingcap/errors"
)
var errNoCPUControllerDetected = errors.New("no cpu controller detected")
// Helper function for getCgroupCPU. Root is always "/", except in tests.
func getCgroupCPU(root string) (CPUUsage, error) {
path, err := detectControlPath(filepath.Join(root, procPathCGroup), "cpu,cpuacct")
if err != nil {
return CPUUsage{}, err
}
// No CPU controller detected
if path == "" {
return CPUUsage{}, errNoCPUControllerDetected
}
mount, ver, err := getCgroupDetails(filepath.Join(root, procPathMountInfo), path, "cpu,cpuacct")
if err != nil {
return CPUUsage{}, err
}
var res CPUUsage
if len(mount) == 2 {
cgroupRootV1 := filepath.Join(root, mount[0])
cgroupRootV2 := filepath.Join(root, mount[1], path)
res.Period, res.Quota, err = detectCPUQuotaInV2(cgroupRootV2)
if err != nil {
res.Period, res.Quota, err = detectCPUQuotaInV1(cgroupRootV1)
}
if err != nil {
return res, err
}
res.Stime, res.Utime, err = detectCPUUsageInV2(cgroupRootV2)
if err != nil {
res.Stime, res.Utime, err = detectCPUUsageInV1(cgroupRootV1)
}
if err != nil {
return res, err
}
} else {
switch ver[0] {
case 1:
cgroupRoot := filepath.Join(root, mount[0])
res.Period, res.Quota, err = detectCPUQuotaInV1(cgroupRoot)
if err != nil {
return res, err
}
res.Stime, res.Utime, err = detectCPUUsageInV1(cgroupRoot)
if err != nil {
return res, err
}
case 2:
cgroupRoot := filepath.Join(root, mount[0], path)
res.Period, res.Quota, err = detectCPUQuotaInV2(cgroupRoot)
if err != nil {
return res, err
}
res.Stime, res.Utime, err = detectCPUUsageInV2(cgroupRoot)
if err != nil {
return res, err
}
default:
return CPUUsage{}, fmt.Errorf("detected unknown cgroup version index: %d", ver[0])
}
}
return res, nil
}
// Helper function for getCgroupCPUPeriodAndQuota. Root is always "/", except in tests.
func getCgroupCPUPeriodAndQuota(root string) (period int64, quota int64, err error) {
path, err := detectControlPath(filepath.Join(root, procPathCGroup), "cpu")
if err != nil {
return
}
// No CPU controller detected
if path == "" {
err = errNoCPUControllerDetected
return
}
mount, ver, err := getCgroupDetails(filepath.Join(root, procPathMountInfo), path, "cpu")
if err != nil {
return
}
if len(mount) == 2 {
cgroupRootV1 := filepath.Join(root, mount[0])
cgroupRootV2 := filepath.Join(root, mount[1], path)
period, quota, err = detectCPUQuotaInV2(cgroupRootV2)
if err != nil {
period, quota, err = detectCPUQuotaInV1(cgroupRootV1)
}
if err != nil {
return
}
} else {
switch ver[0] {
case 1:
cgroupRoot := filepath.Join(root, mount[0])
period, quota, err = detectCPUQuotaInV1(cgroupRoot)
case 2:
cgroupRoot := filepath.Join(root, mount[0], path)
period, quota, err = detectCPUQuotaInV2(cgroupRoot)
default:
err = fmt.Errorf("detected unknown cgroup version index: %d", ver[0])
}
}
return
}
// CPUShares returns the number of CPUs this cgroup can be expected to
// max out. If there's no limit, NumCPU is returned.
func (c CPUUsage) CPUShares() float64 {
if c.Period <= 0 || c.Quota <= 0 {
return float64(c.NumCPU)
}
return float64(c.Quota) / float64(c.Period)
}
// Copyright 2022 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//go:build linux
package cgroup
import (
"math"
"os"
"runtime"
"strings"
"github.com/pingcap/errors"
"github.com/pingcap/failpoint"
)
// GetCgroupCPU returns the CPU usage and quota for the current cgroup.
func GetCgroupCPU() (CPUUsage, error) {
failpoint.Inject("GetCgroupCPUErr", func(val failpoint.Value) {
//nolint:forcetypeassert
if val.(bool) {
var cpuUsage CPUUsage
failpoint.Return(cpuUsage, errors.Errorf("mockAddBatchDDLJobsErr"))
}
})
cpuusage, err := getCgroupCPU("/")
cpuusage.NumCPU = runtime.NumCPU()
return cpuusage, err
}
// CPUQuotaToGOMAXPROCS converts the CPU quota applied to the calling process
// to a valid GOMAXPROCS value.
func CPUQuotaToGOMAXPROCS(minValue int) (int, CPUQuotaStatus, error) {
quota, err := GetCgroupCPU()
if err != nil {
return -1, CPUQuotaUndefined, err
}
maxProcs := int(math.Ceil(quota.CPUShares()))
if minValue > 0 && maxProcs < minValue {
return minValue, CPUQuotaMinUsed, nil
}
return maxProcs, CPUQuotaUsed, nil
}
// GetCPUPeriodAndQuota returns CPU period and quota time of cgroup.
func GetCPUPeriodAndQuota() (period int64, quota int64, err error) {
return getCgroupCPUPeriodAndQuota("/")
}
// InContainer returns true if the process is running in a container.
func InContainer() bool {
// for cgroup V1, check /proc/self/cgroup, for V2, check /proc/self/mountinfo
return inContainer(procPathCGroup) || inContainer(procPathMountInfo)
}
func inContainer(path string) bool {
v, err := os.ReadFile(path)
if err != nil {
return false
}
// For cgroup V1, check /proc/self/cgroup
if path == procPathCGroup {
if strings.Contains(string(v), "docker") ||
strings.Contains(string(v), "kubepods") ||
strings.Contains(string(v), "containerd") {
return true
}
}
// For cgroup V2, check /proc/self/mountinfo
if path == procPathMountInfo {
lines := strings.Split(string(v), "\n")
for _, line := range lines {
v := strings.Split(line, " ")
// check mount point of root dir is on overlay or not.
// v[4] means `mount point`, v[8] means `filesystem type`.
// see details from https://man7.org/linux/man-pages/man5/proc.5.html
// TODO: enhance this check, as overlay is not the only storage driver for container.
if len(v) > 8 && v[4] == "/" && v[8] == "overlay" {
return true
}
}
}
return false
}
// Copyright 2022 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//go:build linux
package cgroup
import (
"bufio"
"bytes"
"fmt"
"os"
"path/filepath"
"strconv"
"github.com/pingcap/errors"
"github.com/pingcap/log"
)
// GetMemoryLimit attempts to retrieve the cgroup memory limit for the current
// process.
func GetMemoryLimit() (limit uint64, err error) {
limit, _, err = getCgroupMemLimit("/")
return
}
// GetCgroupMemLimit attempts to retrieve the cgroup memory limit for the current
// process, and return cgroup version too.
func GetCgroupMemLimit() (uint64, Version, error) {
return getCgroupMemLimit("/")
}
// GetMemoryUsage attempts to retrieve the cgroup memory usage value (in bytes)
// for the current process.
func GetMemoryUsage() (usage uint64, err error) {
return getCgroupMemUsage("/")
}
// GetMemoryInactiveFileUsage attempts to retrieve the cgroup memory usage value (in bytes)
// for the current process.
func GetMemoryInactiveFileUsage() (usage uint64, err error) {
return getCgroupMemInactiveFileUsage("/")
}
// root is always "/" in the production. It will be changed for testing.
func getCgroupMemInactiveFileUsage(root string) (usage uint64, err error) {
path, err := detectControlPath(filepath.Join(root, procPathCGroup), "memory")
if err != nil {
return 0, err
}
if path == "" {
log.Warn("no cgroup memory controller detected")
return 0, nil
}
mount, ver, err := getCgroupDetails(filepath.Join(root, procPathMountInfo), path, "memory")
if err != nil {
return 0, err
}
if len(mount) == 2 {
usage, err = detectMemInactiveFileUsageInV1(filepath.Join(root, mount[0]))
if err != nil {
usage, err = detectMemInactiveFileUsageInV2(filepath.Join(root, mount[1], path))
}
} else {
switch ver[0] {
case 1:
usage, err = detectMemInactiveFileUsageInV1(filepath.Join(root, mount[0]))
case 2:
usage, err = detectMemInactiveFileUsageInV2(filepath.Join(root, mount[0], path))
default:
usage, err = 0, fmt.Errorf("detected unknown cgroup version index: %d", ver)
}
}
return usage, err
}
// getCgroupMemUsage reads the memory cgroup's current memory usage (in bytes).
func getCgroupMemUsage(root string) (usage uint64, err error) {
path, err := detectControlPath(filepath.Join(root, procPathCGroup), "memory")
if err != nil {
return 0, err
}
if path == "" {
log.Warn("no cgroup memory controller detected")
return 0, nil
}
mount, ver, err := getCgroupDetails(filepath.Join(root, procPathMountInfo), path, "memory")
if err != nil {
return 0, err
}
if len(ver) == 2 {
usage, err = detectMemUsageInV1(filepath.Join(root, mount[0]))
if err != nil {
usage, err = detectMemUsageInV2(filepath.Join(root, mount[0], path))
}
} else {
switch ver[0] {
case 1:
// cgroupv1
usage, err = detectMemUsageInV1(filepath.Join(root, mount[0]))
case 2:
// cgroupv2
usage, err = detectMemUsageInV2(filepath.Join(root, mount[0], path))
default:
usage, err = 0, fmt.Errorf("detected unknown cgroup version index: %d", ver)
}
}
return usage, err
}
// root is always "/" in the production. It will be changed for testing.
func getCgroupMemLimit(root string) (limit uint64, version Version, err error) {
version = Unknown
path, err := detectControlPath(filepath.Join(root, procPathCGroup), "memory")
if err != nil {
return 0, version, err
}
if path == "" {
log.Warn("no cgroup memory controller detected")
return 0, version, nil
}
mount, ver, err := getCgroupDetails(filepath.Join(root, procPathMountInfo), path, "memory")
if err != nil {
return 0, version, err
}
if len(ver) == 2 {
version = V1
limit, err = detectMemLimitInV1(filepath.Join(root, mount[0]))
if err != nil {
version = V2
limit, err = detectMemLimitInV2(filepath.Join(root, mount[1], path))
}
} else {
switch ver[0] {
case 1:
// cgroupv1
version = V1
limit, err = detectMemLimitInV1(filepath.Join(root, mount[0]))
case 2:
// cgroupv2
version = V2
limit, err = detectMemLimitInV2(filepath.Join(root, mount[0], path))
default:
limit, err = 0, fmt.Errorf("detected unknown cgroup version index: %d", ver)
}
}
return limit, version, err
}
func detectMemLimitInV1(cRoot string) (limit uint64, err error) {
return detectMemStatValue(cRoot, cgroupV1MemStat, cgroupV1MemLimitStatKey, 1)
}
// TODO(hawkingrei): this implementation was based on podman+criu environment.
// It may cover not all the cases when v2 becomes more widely used in container
// world.
// In K8S env, the value hold in memory.max is the memory limit defined in pod definition,
// the real memory limit should be the minimum value in the whole cgroup hierarchy
// as in cgroup V1, but cgroup V2 lacks the feature, see this patch for more details:
// https://lore.kernel.org/linux-kernel/ZctiM5RintD_D0Lt@host1.jankratochvil.net/T/
// So, in cgroup V2, the value better be adjusted by some factor, like 0.9, to
// avoid OOM. see taskexecutor/manager.go too.
func detectMemLimitInV2(cRoot string) (limit uint64, err error) {
return readInt64Value(cRoot, cgroupV2MemLimit, 2)
}
func detectMemInactiveFileUsageInV1(root string) (uint64, error) {
return detectMemStatValue(root, cgroupV1MemStat, cgroupV1MemInactiveFileUsageStatKey, 1)
}
func detectMemInactiveFileUsageInV2(root string) (uint64, error) {
return detectMemStatValue(root, cgroupV2MemStat, cgroupV2MemInactiveFileUsageStatKey, 2)
}
func detectMemStatValue(cRoot, filename, key string, cgVersion int) (value uint64, err error) {
statFilePath := filepath.Join(cRoot, filename)
//nolint:gosec
stat, err := os.Open(statFilePath)
if err != nil {
return 0, errors.Wrapf(err, "can't read file %s from cgroup v%d", filename, cgVersion)
}
defer func() {
_ = stat.Close()
}()
scanner := bufio.NewScanner(stat)
for scanner.Scan() {
fields := bytes.Fields(scanner.Bytes())
if len(fields) != 2 || string(fields[0]) != key {
continue
}
trimmed := string(bytes.TrimSpace(fields[1]))
value, err = strconv.ParseUint(trimmed, 10, 64)
if err != nil {
return 0, errors.Wrapf(err, "can't read %q memory stat from cgroup v%d in %s", key, cgVersion, filename)
}
return value, nil
}
return 0, fmt.Errorf("failed to find expected memory stat %q for cgroup v%d in %s", key, cgVersion, filename)
}
func detectMemUsageInV1(cRoot string) (memUsage uint64, err error) {
return readInt64Value(cRoot, cgroupV1MemUsage, 1)
}
// TODO(hawkingrei): this implementation was based on podman+criu environment. It
// may cover not all the cases when v2 becomes more widely used in container
// world.
func detectMemUsageInV2(cRoot string) (memUsage uint64, err error) {
return readInt64Value(cRoot, cgroupV2MemUsage, 2)
}
// Copyright 2020 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package collate
import (
"strings"
"github.com/pingcap/tidb/pkg/util/hack"
"github.com/pingcap/tidb/pkg/util/stringutil"
)
// binCollator match pattern in bytes
type binCollator struct {
}
// Compare implement Collator interface.
func (*binCollator) Compare(a, b string) int {
return strings.Compare(a, b)
}
// Key implement Collator interface.
func (*binCollator) Key(str string) []byte {
return []byte(str)
}
// ImmutableKey implement Collator interface.
func (*binCollator) ImmutableKey(str string) []byte {
return hack.Slice(str)
}
// KeyWithoutTrimRightSpace implement Collator interface.
func (*binCollator) KeyWithoutTrimRightSpace(str string) []byte {
return []byte(str)
}
// MaxKeyLen implements Collator interface.
func (*binCollator) MaxKeyLen(s string) int {
return len(s)
}
// Pattern implements Collator interface.
func (*binCollator) Pattern() WildcardPattern {
return &binPattern{}
}
// Clone implements Collator interface.
func (*binCollator) Clone() Collator {
return new(binCollator)
}
type derivedBinCollator struct {
binCollator
}
// Pattern implements Collator interface.
func (*derivedBinCollator) Pattern() WildcardPattern {
return &derivedBinPattern{}
}
type binPaddingCollator struct {
}
func (*binPaddingCollator) Compare(a, b string) int {
return strings.Compare(truncateTailingSpace(a), truncateTailingSpace(b))
}
func (*binPaddingCollator) Key(str string) []byte {
return []byte(truncateTailingSpace(str))
}
// ImmutableKey implement Collator interface.
func (*binPaddingCollator) ImmutableKey(str string) []byte {
return hack.Slice(truncateTailingSpace(str))
}
// KeyWithoutTrimRightSpace implement Collator interface.
func (*binPaddingCollator) KeyWithoutTrimRightSpace(str string) []byte {
return []byte(str)
}
// MaxKeyLen implements Collator interface.
func (*binPaddingCollator) MaxKeyLen(s string) int {
return len(s)
}
// Pattern implements Collator interface.
// Notice that trailing spaces are significant.
func (*binPaddingCollator) Pattern() WildcardPattern {
return &derivedBinPattern{}
}
// Clone implements Collator interface.
func (*binPaddingCollator) Clone() Collator {
return new(binPaddingCollator)
}
type derivedBinPattern struct {
patChars []rune
patTypes []byte
}
// Compile implements WildcardPattern interface.
func (p *derivedBinPattern) Compile(patternStr string, escape byte) {
p.patChars, p.patTypes = stringutil.CompilePattern(patternStr, escape)
}
// DoMatch implements WildcardPattern interface.
func (p *derivedBinPattern) DoMatch(str string) bool {
return stringutil.DoMatch(str, p.patChars, p.patTypes)
}
type binPattern struct {
patChars []byte
patTypes []byte
}
// Compile implements WildcardPattern interface.
func (p *binPattern) Compile(patternStr string, escape byte) {
p.patChars, p.patTypes = stringutil.CompilePatternBinary(patternStr, escape)
}
// DoMatch implements WildcardPattern interface.
func (p *binPattern) DoMatch(str string) bool {
return stringutil.DoMatchBinary(str, p.patChars, p.patTypes)
}
// Copyright 2021 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package collate
import "github.com/pingcap/tidb/pkg/parser/charset"
// switchDefaultCollation switch the default collation for charset according to the new collation config.
func switchDefaultCollation(flag bool) {
if flag {
charset.CharacterSetInfos[charset.CharsetGBK].DefaultCollation = charset.CollationGBKChineseCI
charset.CharacterSetInfos[charset.CharsetGB18030].DefaultCollation = charset.CollationGB18030ChineseCI
} else {
charset.CharacterSetInfos[charset.CharsetGBK].DefaultCollation = charset.CollationGBKBin
charset.CharacterSetInfos[charset.CharsetGB18030].DefaultCollation = charset.CollationGB18030Bin
}
charset.CharacterSetInfos[charset.CharsetGBK].Collations[charset.CollationGBKBin].IsDefault = !flag
charset.CharacterSetInfos[charset.CharsetGBK].Collations[charset.CollationGBKChineseCI].IsDefault = flag
charset.CharacterSetInfos[charset.CharsetGB18030].Collations[charset.CollationGB18030Bin].IsDefault = !flag
charset.CharacterSetInfos[charset.CharsetGB18030].Collations[charset.CollationGB18030ChineseCI].IsDefault = flag
}
// Copyright 2020 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package collate
import (
"cmp"
"fmt"
"slices"
"sync/atomic"
"unicode/utf8"
"github.com/pingcap/errors"
"github.com/pingcap/tidb/pkg/parser/charset"
"github.com/pingcap/tidb/pkg/parser/mysql"
"github.com/pingcap/tidb/pkg/parser/terror"
"github.com/pingcap/tidb/pkg/util/dbterror"
"github.com/pingcap/tidb/pkg/util/logutil"
"go.uber.org/zap"
)
var (
newCollatorMap map[string]Collator
newCollatorIDMap map[int]Collator
newCollationEnabled int32
// binCollatorInstance is a singleton used for all collations when newCollationEnabled is false.
binCollatorInstance = &derivedBinCollator{}
binCollatorInstanceSliceWithLen1 = []Collator{binCollatorInstance}
// ErrUnsupportedCollation is returned when an unsupported collation is specified.
ErrUnsupportedCollation = dbterror.ClassDDL.NewStdErr(mysql.ErrUnknownCollation, mysql.Message("Unsupported collation when new collation is enabled: '%-.64s'", nil))
// ErrIllegalMixCollation is returned when illegal mix of collations.
ErrIllegalMixCollation = dbterror.ClassExpression.NewStd(mysql.ErrCantAggregateNcollations)
// ErrIllegalMix2Collation is returned when illegal mix of 2 collations.
ErrIllegalMix2Collation = dbterror.ClassExpression.NewStd(mysql.ErrCantAggregate2collations)
// ErrIllegalMix3Collation is returned when illegal mix of 3 collations.
ErrIllegalMix3Collation = dbterror.ClassExpression.NewStd(mysql.ErrCantAggregate3collations)
)
const (
// DefaultLen is set for datum if the string datum don't know its length.
DefaultLen = 0
)
// Collator provides functionality for comparing strings for a given
// collation order.
type Collator interface {
// Compare returns an integer comparing the two strings. The result will be 0 if a == b, -1 if a < b, and +1 if a > b.
Compare(a, b string) int
// Key returns the collate key for str. If the collation is padding, make sure the PadLen >= len(rune[]str) in opt.
Key(str string) []byte
// ImmutableKey is the same as Key except that the returned key should not be changed by future calls.
// It can avoid memory allocation and copy in some collations. The caller should not modify the returned value.
ImmutableKey(str string) []byte
// KeyWithoutTrimRightSpace returns the collate key for str. The difference with Key is str will not be trimed.
KeyWithoutTrimRightSpace(str string) []byte
// Pattern get a collation-aware WildcardPattern.
Pattern() WildcardPattern
// Clone returns a copy of the collator.
Clone() Collator
// MaxKeyLen returns the max length of the collate key for str
MaxKeyLen(string) int
}
// WildcardPattern is the interface used for wildcard pattern match.
type WildcardPattern interface {
// Compile compiles the patternStr with specified escape character.
Compile(patternStr string, escape byte)
// DoMatch tries to match the str with compiled pattern, `Compile()` must be called before calling it.
DoMatch(str string) bool
}
// SetNewCollationEnabledForTest sets if the new collation are enabled in test.
// Note: Be careful to use this function, if this functions is used in tests, make sure the tests are serial.
func SetNewCollationEnabledForTest(flag bool) {
switchDefaultCollation(flag)
if flag {
atomic.StoreInt32(&newCollationEnabled, 1)
return
}
atomic.StoreInt32(&newCollationEnabled, 0)
}
// NewCollationEnabled returns if the new collations are enabled.
func NewCollationEnabled() bool {
return atomic.LoadInt32(&newCollationEnabled) == 1
}
// CompatibleCollate checks whether the two collate are the same.
func CompatibleCollate(collate1, collate2 string) bool {
if (collate1 == "utf8mb4_general_ci" || collate1 == "utf8_general_ci") && (collate2 == "utf8mb4_general_ci" || collate2 == "utf8_general_ci") {
return true
} else if (collate1 == "utf8mb4_bin" || collate1 == "utf8_bin" || collate1 == "latin1_bin") && (collate2 == "utf8mb4_bin" || collate2 == "utf8_bin" || collate2 == "latin1_bin") {
return true
} else if (collate1 == "utf8mb4_unicode_ci" || collate1 == "utf8_unicode_ci") && (collate2 == "utf8mb4_unicode_ci" || collate2 == "utf8_unicode_ci") {
return true
}
return collate1 == collate2
}
// RewriteNewCollationIDIfNeeded rewrites a collation id if the new collations are enabled.
// When new collations are enabled, we turn the collation id to negative so that other the
// components of the cluster(for example, TiKV) is able to aware of it without any change to
// the protocol definition.
// When new collations are not enabled, collation id remains the same.
func RewriteNewCollationIDIfNeeded(id int32) int32 {
if atomic.LoadInt32(&newCollationEnabled) == 1 {
if id >= 0 {
return -id
}
logutil.BgLogger().Warn("Unexpected negative collation ID for rewrite.", zap.Int32("ID", id))
}
return id
}
// RestoreCollationIDIfNeeded restores a collation id if the new collations are enabled.
func RestoreCollationIDIfNeeded(id int32) int32 {
if atomic.LoadInt32(&newCollationEnabled) == 1 {
if id <= 0 {
return -id
}
logutil.BgLogger().Warn("Unexpected positive collation ID for restore.", zap.Int32("ID", id))
}
return id
}
// GetCollator get the collator according to collate, it will return the binary collator if the corresponding collator doesn't exist.
func GetCollator(collate string) Collator {
if atomic.LoadInt32(&newCollationEnabled) == 1 {
ctor, ok := newCollatorMap[collate]
if !ok {
if collate != "" {
logutil.BgLogger().Warn(
"Unable to get collator by name, use binCollator instead.",
zap.String("name", collate),
zap.Stack("stack"))
}
return newCollatorMap[charset.CollationUTF8MB4]
}
return ctor
}
return binCollatorInstance
}
// GetBinaryCollator gets the binary collator, it is often used when we want to apply binary compare.
func GetBinaryCollator() Collator {
return binCollatorInstance
}
// GetBinaryCollatorSlice gets the binary collator slice with len n.
func GetBinaryCollatorSlice(n int) []Collator {
if n == 1 {
return binCollatorInstanceSliceWithLen1
}
collators := make([]Collator, n)
for i := range n {
collators[i] = binCollatorInstance
}
return collators
}
// GetCollatorByID get the collator according to id, it will return the binary collator if the corresponding collator doesn't exist.
func GetCollatorByID(id int) Collator {
if atomic.LoadInt32(&newCollationEnabled) == 1 {
ctor, ok := newCollatorIDMap[id]
if !ok {
logutil.BgLogger().Warn(
"Unable to get collator by ID, use binCollator instead.",
zap.Int("ID", id),
zap.Stack("stack"))
return newCollatorMap["utf8mb4_bin"]
}
return ctor
}
return binCollatorInstance
}
// CollationID2Name return the collation name by the given id.
// If the id is not found in the map, the default collation is returned.
func CollationID2Name(id int32) string {
collation, err := charset.GetCollationByID(int(id))
if err != nil {
// TODO(bb7133): fix repeating logs when the following code is uncommented.
// logutil.BgLogger().Warn(
// "Unable to get collation name from ID, use default collation instead.",
// zap.Int32("ID", id),
// zap.Stack("stack"))
return mysql.DefaultCollationName
}
return collation.Name
}
// CollationName2ID return the collation id by the given name.
// If the name is not found in the map, the default collation id is returned
func CollationName2ID(name string) int {
if coll, err := charset.GetCollationByName(name); err == nil {
return coll.ID
}
return mysql.DefaultCollationID
}
// SubstituteMissingCollationToDefault will switch to the default collation if
// new collations are enabled and the specified collation is not supported.
func SubstituteMissingCollationToDefault(co string) string {
var err error
if _, err = GetCollationByName(co); err == nil {
return co
}
logutil.BgLogger().Warn(fmt.Sprintf("The collation %s specified on connection is not supported when new collation is enabled, switch to the default collation: %s", co, mysql.DefaultCollationName))
var coll *charset.Collation
if coll, err = GetCollationByName(charset.CollationUTF8MB4); err != nil {
logutil.BgLogger().Warn(err.Error())
}
return coll.Name
}
// GetCollationByName wraps charset.GetCollationByName, it checks the collation.
func GetCollationByName(name string) (coll *charset.Collation, err error) {
if coll, err = charset.GetCollationByName(name); err != nil {
return nil, errors.Trace(err)
}
if atomic.LoadInt32(&newCollationEnabled) == 1 {
if _, ok := newCollatorIDMap[coll.ID]; !ok {
return nil, ErrUnsupportedCollation.GenWithStackByArgs(name)
}
}
return
}
// GetSupportedCollations gets information for all collations supported so far.
func GetSupportedCollations() []*charset.Collation {
if atomic.LoadInt32(&newCollationEnabled) == 1 {
newSupportedCollations := make([]*charset.Collation, 0, len(newCollatorMap))
for name := range newCollatorMap {
// utf8mb4_zh_pinyin_tidb_as_cs is under developing, should not be shown to user.
if name == "utf8mb4_zh_pinyin_tidb_as_cs" {
continue
}
if coll, err := charset.GetCollationByName(name); err != nil {
// Should never happens.
terror.Log(err)
} else {
newSupportedCollations = append(newSupportedCollations, coll)
}
}
slices.SortFunc(newSupportedCollations, func(i, j *charset.Collation) int {
return cmp.Compare(i.Name, j.Name)
})
return newSupportedCollations
}
return charset.GetSupportedCollations()
}
func truncateTailingSpace(str string) string {
byteLen := len(str)
i := byteLen - 1
for ; i >= 0; i-- {
if str[i] != ' ' {
break
}
}
str = str[:i+1]
return str
}
func sign(i int) int {
if i < 0 {
return -1
} else if i > 0 {
return 1
}
return 0
}
func runeLen(b byte) int {
if b < 0x80 {
return 1
} else if b < 0xE0 {
return 2
} else if b < 0xF0 {
return 3
}
return 4
}
// IsDefaultCollationForUTF8MB4 returns if the collation is DefaultCollationForUTF8MB4.
func IsDefaultCollationForUTF8MB4(collate string) bool {
// utf8mb4_bin is used for the migrations/replication from TiDB with version prior to v7.4.0.
return collate == "utf8mb4_bin" || collate == "utf8mb4_general_ci" || collate == "utf8mb4_0900_ai_ci"
}
// IsCICollation returns if the collation is case-insensitive
func IsCICollation(collate string) bool {
return collate == "utf8_general_ci" || collate == "utf8mb4_general_ci" ||
collate == "utf8_unicode_ci" || collate == "utf8mb4_unicode_ci" || collate == "gbk_chinese_ci" ||
collate == "utf8mb4_0900_ai_ci" || collate == "gb18030_chinese_ci"
}
// ConvertAndGetBinCollation converts collation to binary collation
func ConvertAndGetBinCollation(collate string) string {
switch collate {
case "utf8_general_ci":
return "utf8_bin"
case "utf8_unicode_ci":
return "utf8_bin"
case "utf8mb4_general_ci":
return "utf8mb4_bin"
case "utf8mb4_unicode_ci":
return "utf8mb4_bin"
case "utf8mb4_0900_ai_ci":
return "utf8mb4_bin"
case "gbk_chinese_ci":
return "gbk_bin"
case "gb18030_chinese_ci":
return "gb18030_bin"
}
return collate
}
// ConvertAndGetBinCollator converts collation to binary collator
func ConvertAndGetBinCollator(collate string) Collator {
return GetCollator(ConvertAndGetBinCollation(collate))
}
// IsBinCollation returns if the collation is 'xx_bin' or 'bin'.
// The function is to determine whether the sortkey of a char type of data under the collation is equal to the data itself,
// and both xx_bin and collationBin are satisfied.
func IsBinCollation(collate string) bool {
return collate == charset.CollationASCII || collate == charset.CollationLatin1 ||
collate == charset.CollationUTF8 || collate == charset.CollationUTF8MB4 ||
collate == charset.CollationBin || collate == "utf8mb4_0900_bin"
// TODO: define a constant to reference collations
}
// IsPadSpaceCollation returns whether the collation is a PAD SPACE collation.
func IsPadSpaceCollation(collation string) bool {
return collation != charset.CollationBin && collation != "utf8mb4_0900_ai_ci" && collation != "utf8mb4_0900_bin"
}
// CollationToProto converts collation from string to int32(used by protocol).
func CollationToProto(c string) int32 {
if coll, err := charset.GetCollationByName(c); err == nil {
return RewriteNewCollationIDIfNeeded(int32(coll.ID))
}
v := RewriteNewCollationIDIfNeeded(int32(mysql.DefaultCollationID))
logutil.BgLogger().Warn(
"Unable to get collation ID by name, use ID of the default collation instead",
zap.String("name", c),
zap.Int32("default collation ID", v),
zap.String("default collation", mysql.DefaultCollationName),
)
return v
}
func compareCommon(a, b string, keyFunc func(rune) uint32) int {
a = truncateTailingSpace(a)
b = truncateTailingSpace(b)
r1, r2 := rune(0), rune(0)
ai, bi := 0, 0
r1Len, r2Len := 0, 0
for ai < len(a) && bi < len(b) {
r1, r1Len = utf8.DecodeRuneInString(a[ai:])
r2, r2Len = utf8.DecodeRuneInString(b[bi:])
// When the byte sequence is not a valid UTF-8 encoding of a rune, Golang returns RuneError('�') and size 1.
// See https://pkg.go.dev/unicode/utf8#DecodeRune for more details.
// Here we check both the size and rune to distinguish between invalid byte sequence and valid '�'.
invalid1 := r1 == utf8.RuneError && r1Len == 1
invalid2 := r2 == utf8.RuneError && r2Len == 1
if invalid1 || invalid2 {
return 0
}
ai += r1Len
bi += r2Len
cmp := cmp.Compare(keyFunc(r1), keyFunc(r2))
if cmp != 0 {
return cmp
}
}
return cmp.Compare(len(a)-ai, len(b)-bi)
}
// CanUseRawMemAsKey returns true if current collator can use the original raw memory as the key
// only return true for binCollator and derivedBinCollator
func CanUseRawMemAsKey(c Collator) bool {
if _, ok := c.(*binCollator); ok {
return true
}
if _, ok := c.(*derivedBinCollator); ok {
return true
}
return false
}
// ProtoToCollation converts collation from int32(used by protocol) to string.
func ProtoToCollation(c int32) string {
coll, err := charset.GetCollationByID(int(RestoreCollationIDIfNeeded(c)))
if err == nil {
return coll.Name
}
logutil.BgLogger().Warn(
"Unable to get collation name from ID, use name of the default collation instead",
zap.Int32("id", c),
zap.Int("default collation ID", mysql.DefaultCollationID),
zap.String("default collation", mysql.DefaultCollationName),
)
return mysql.DefaultCollationName
}
func init() {
// Set it to 1 in init() to make sure the tests enable the new collation, it would be covered in bootstrap().
newCollationEnabled = 1
newCollatorMap = make(map[string]Collator)
newCollatorIDMap = make(map[int]Collator)
newCollatorMap["binary"] = &binCollator{}
newCollatorIDMap[CollationName2ID("binary")] = &binCollator{}
newCollatorMap["ascii_bin"] = &binPaddingCollator{}
newCollatorIDMap[CollationName2ID("ascii_bin")] = &binPaddingCollator{}
newCollatorMap["latin1_bin"] = &binPaddingCollator{}
newCollatorIDMap[CollationName2ID("latin1_bin")] = &binPaddingCollator{}
newCollatorMap["utf8mb4_bin"] = &binPaddingCollator{}
newCollatorIDMap[CollationName2ID("utf8mb4_bin")] = &binPaddingCollator{}
newCollatorMap["utf8_bin"] = &binPaddingCollator{}
newCollatorIDMap[CollationName2ID("utf8_bin")] = &binPaddingCollator{}
newCollatorMap["utf8mb4_0900_bin"] = &derivedBinCollator{}
newCollatorIDMap[CollationName2ID("utf8mb4_0900_bin")] = &derivedBinCollator{}
newCollatorMap["utf8mb4_general_ci"] = &generalCICollator{}
newCollatorIDMap[CollationName2ID("utf8mb4_general_ci")] = &generalCICollator{}
newCollatorMap["utf8_general_ci"] = &generalCICollator{}
newCollatorIDMap[CollationName2ID("utf8_general_ci")] = &generalCICollator{}
newCollatorMap["utf8mb4_unicode_ci"] = &unicodeCICollator{}
newCollatorIDMap[CollationName2ID("utf8mb4_unicode_ci")] = &unicodeCICollator{}
newCollatorMap["utf8mb4_0900_ai_ci"] = &unicode0900AICICollator{}
newCollatorIDMap[CollationName2ID("utf8mb4_0900_ai_ci")] = &unicode0900AICICollator{}
newCollatorMap["utf8_unicode_ci"] = &unicodeCICollator{}
newCollatorIDMap[CollationName2ID("utf8_unicode_ci")] = &unicodeCICollator{}
newCollatorMap["utf8mb4_zh_pinyin_tidb_as_cs"] = &zhPinyinTiDBASCSCollator{}
newCollatorIDMap[CollationName2ID("utf8mb4_zh_pinyin_tidb_as_cs")] = &zhPinyinTiDBASCSCollator{}
newCollatorMap[charset.CollationGBKBin] = &gbkBinCollator{charset.NewCustomGBKEncoder()}
newCollatorIDMap[CollationName2ID(charset.CollationGBKBin)] = &gbkBinCollator{charset.NewCustomGBKEncoder()}
newCollatorMap[charset.CollationGBKChineseCI] = &gbkChineseCICollator{}
newCollatorIDMap[CollationName2ID(charset.CollationGBKChineseCI)] = &gbkChineseCICollator{}
newCollatorMap[charset.CollationGB18030Bin] = &gb18030BinCollator{charset.NewCustomGB18030Encoder()}
newCollatorIDMap[CollationName2ID(charset.CollationGB18030Bin)] = &gb18030BinCollator{charset.NewCustomGB18030Encoder()}
newCollatorMap[charset.CollationGB18030ChineseCI] = &gb18030ChineseCICollator{}
newCollatorIDMap[CollationName2ID(charset.CollationGB18030ChineseCI)] = &gb18030ChineseCICollator{}
}
// Copyright 2024 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package collate
import (
"bytes"
"unicode/utf8"
"github.com/pingcap/tidb/pkg/parser/charset"
"github.com/pingcap/tidb/pkg/util/hack"
"golang.org/x/text/encoding"
)
// Each of these runes is 3 bytes in utf8. But since some characters is translated in customGB18030Encoder,
// when we meet these runes, we should use 4 bytes to represent them.
var fourBytesRune = map[rune]struct{}{
'\ue78d': {}, '\ue78e': {}, '\ue78f': {}, '\ue790': {}, '\ue791': {}, '\ue792': {},
'\ue793': {}, '\ue794': {}, '\ue795': {}, '\ue796': {}, '\ue7c7': {}, '\ue81e': {},
'\ue826': {}, '\ue82b': {}, '\ue82c': {}, '\ue832': {}, '\ue843': {}, '\ue854': {},
'\ue864': {},
}
// gb18030BinCollator is collator for gb18030_bin.
type gb18030BinCollator struct {
e *encoding.Encoder
}
// Clone implements Collator interface.
func (*gb18030BinCollator) Clone() Collator {
return &gb18030BinCollator{charset.NewCustomGB18030Encoder()}
}
// Compare implement Collator interface.
func (g *gb18030BinCollator) Compare(a, b string) int {
a = truncateTailingSpace(a)
b = truncateTailingSpace(b)
// compare the character one by one.
for len(a) > 0 && len(b) > 0 {
aLen, bLen := min(len(a), runeLen(a[0])), min(len(b), runeLen(b[0]))
aGb18030, err := g.e.Bytes(hack.Slice(a[:aLen]))
// if convert error happened, we use '?'(0x3F) replace it.
// It should not happen.
if err != nil {
aGb18030 = []byte{0x3F}
}
bGb18030, err := g.e.Bytes(hack.Slice(b[:bLen]))
if err != nil {
bGb18030 = []byte{0x3F}
}
compare := bytes.Compare(aGb18030, bGb18030)
if compare != 0 {
return compare
}
a = a[aLen:]
b = b[bLen:]
}
return sign(len(a) - len(b))
}
// Key implement Collator interface.
func (g *gb18030BinCollator) Key(str string) []byte {
return g.KeyWithoutTrimRightSpace(truncateTailingSpace(str))
}
// ImmutableKey implement Collator interface.
func (g *gb18030BinCollator) ImmutableKey(str string) []byte {
return g.KeyWithoutTrimRightSpace(truncateTailingSpace(str))
}
// KeyWithoutTrimRightSpace implement Collator interface.
func (g *gb18030BinCollator) KeyWithoutTrimRightSpace(str string) []byte {
buf := make([]byte, 0, len(str))
for len(str) > 0 {
l := min(len(str), runeLen(str[0]))
r, _ := utf8.DecodeRuneInString(str[:l])
var buf1 []byte
if _, ok := fourBytesRune[r]; ok {
buf1 = make([]byte, 4)
} else {
buf1 = make([]byte, l)
}
copy(buf1, str[:l])
gb18030, err := g.e.Bytes(buf1)
if err != nil {
buf = append(buf, byte('?'))
} else {
buf = append(buf, gb18030...)
}
str = str[l:]
}
return buf
}
// MaxKeyLen implements Collator interface.
func (*gb18030BinCollator) MaxKeyLen(s string) int {
return utf8.RuneCountInString(s) * 4
}
// Pattern implements Collator interface.
func (*gb18030BinCollator) Pattern() WildcardPattern {
return &gb18030BinPattern{}
}
// use binPattern directly, they are totally same.
type gb18030BinPattern struct {
binPattern
}
// Copyright 2024 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package collate
import (
_ "embed"
"encoding/binary"
"unicode/utf8"
"github.com/pingcap/tidb/pkg/util/stringutil"
)
//go:embed gb18030_weight.data
var gb18030WeightData []byte
const (
// Unicode code points up to U+10FFFF can be encoded as GB18030.
gb18030MaxCodePoint = 0x10FFFF
)
type gb18030ChineseCICollator struct {
}
// Clone implements Collator interface.
func (*gb18030ChineseCICollator) Clone() Collator {
return new(gb18030ChineseCICollator)
}
// Compare implements Collator interface.
func (*gb18030ChineseCICollator) Compare(a, b string) int {
return compareCommon(a, b, gb18030ChineseCISortKey)
}
// Key implements Collator interface.
func (g *gb18030ChineseCICollator) Key(str string) []byte {
return g.KeyWithoutTrimRightSpace(truncateTailingSpace(str))
}
// ImmutableKey implement Collator interface.
func (g *gb18030ChineseCICollator) ImmutableKey(str string) []byte {
return g.KeyWithoutTrimRightSpace(truncateTailingSpace(str))
}
// KeyWithoutTrimRightSpace implement Collator interface.
func (*gb18030ChineseCICollator) KeyWithoutTrimRightSpace(str string) []byte {
buf := make([]byte, 0, len(str)*2)
i, rLen := 0, 0
r := rune(0)
for i < len(str) {
// When the byte sequence is not a valid UTF-8 encoding of a rune, Golang returns RuneError('�') and size 1.
// See https://pkg.go.dev/unicode/utf8#DecodeRune for more details.
// Here we check both the size and rune to distinguish between invalid byte sequence and valid '�'.
r, rLen = utf8.DecodeRuneInString(str[i:])
invalid := r == utf8.RuneError && rLen == 1
if invalid {
return buf
}
i = i + rLen
u32 := gb18030ChineseCISortKey(r)
if u32 > 0xFFFFFF {
buf = append(buf, byte(u32>>24))
}
if u32 > 0xFFFF {
buf = append(buf, byte(u32>>16))
}
if u32 > 0xFF {
buf = append(buf, byte(u32>>8))
}
buf = append(buf, byte(u32))
}
return buf
}
// MaxKeyLen implements Collator interface.
func (*gb18030ChineseCICollator) MaxKeyLen(s string) int {
return utf8.RuneCountInString(s) * 4
}
// Pattern implements Collator interface.
func (*gb18030ChineseCICollator) Pattern() WildcardPattern {
return &gb18030ChineseCIPattern{}
}
type gb18030ChineseCIPattern struct {
patChars []rune
patTypes []byte
}
// Compile implements WildcardPattern interface.
func (p *gb18030ChineseCIPattern) Compile(patternStr string, escape byte) {
p.patChars, p.patTypes = stringutil.CompilePatternInner(patternStr, escape)
}
// DoMatch implements WildcardPattern interface.
func (p *gb18030ChineseCIPattern) DoMatch(str string) bool {
return stringutil.DoMatchCustomized(str, p.patChars, p.patTypes, func(a, b rune) bool {
return gb18030ChineseCISortKey(a) == gb18030ChineseCISortKey(b)
})
}
func gb18030ChineseCISortKey(r rune) uint32 {
if r > gb18030MaxCodePoint {
return 0x3F
}
return binary.LittleEndian.Uint32(gb18030WeightData[4*r : 4*r+4])
}
// Copyright 2021 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package collate
import (
"bytes"
"unicode/utf8"
"github.com/pingcap/tidb/pkg/parser/charset"
"github.com/pingcap/tidb/pkg/util/hack"
"golang.org/x/text/encoding"
)
// gbkBinCollator is collator for gbk_bin.
type gbkBinCollator struct {
e *encoding.Encoder
}
// Clone implements Collator interface.
func (*gbkBinCollator) Clone() Collator {
return &gbkBinCollator{charset.NewCustomGBKEncoder()}
}
// Compare implement Collator interface.
func (g *gbkBinCollator) Compare(a, b string) int {
a = truncateTailingSpace(a)
b = truncateTailingSpace(b)
// compare the character one by one.
for len(a) > 0 && len(b) > 0 {
aLen, bLen := min(len(a), runeLen(a[0])), min(len(b), runeLen(b[0]))
aGbk, err := g.e.Bytes(hack.Slice(a[:aLen]))
// if convert error happened, we use '?'(0x3F) replace it.
// It should not happen.
if err != nil {
aGbk = []byte{0x3F}
}
bGbk, err := g.e.Bytes(hack.Slice(b[:bLen]))
if err != nil {
bGbk = []byte{0x3F}
}
compare := bytes.Compare(aGbk, bGbk)
if compare != 0 {
return compare
}
a = a[aLen:]
b = b[bLen:]
}
return sign(len(a) - len(b))
}
// Key implement Collator interface.
func (g *gbkBinCollator) Key(str string) []byte {
return g.KeyWithoutTrimRightSpace(truncateTailingSpace(str))
}
// ImmutableKey implement Collator interface.
func (g *gbkBinCollator) ImmutableKey(str string) []byte {
return g.KeyWithoutTrimRightSpace(truncateTailingSpace(str))
}
// KeyWithoutTrimRightSpace implement Collator interface.
func (g *gbkBinCollator) KeyWithoutTrimRightSpace(str string) []byte {
buf := make([]byte, 0, len(str))
for len(str) > 0 {
l := min(len(str), runeLen(str[0]))
gbk, err := g.e.Bytes(hack.Slice(str[:l]))
if err != nil {
buf = append(buf, byte('?'))
} else {
buf = append(buf, gbk...)
}
str = str[l:]
}
return buf
}
// MaxKeyLen implements Collator interface.
func (*gbkBinCollator) MaxKeyLen(s string) int {
return utf8.RuneCountInString(s) * 2
}
// Pattern implements Collator interface.
func (*gbkBinCollator) Pattern() WildcardPattern {
return &gbkBinPattern{}
}
// use binPattern directly, they are totally same.
type gbkBinPattern struct {
derivedBinPattern
}
// Copyright 2021 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package collate
import (
"unicode/utf8"
"github.com/pingcap/tidb/pkg/util/stringutil"
)
type gbkChineseCICollator struct {
}
// Compare implements Collator interface.
func (*gbkChineseCICollator) Compare(a, b string) int {
return compareCommon(a, b, gbkChineseCISortKey)
}
// Key implements Collator interface.
func (g *gbkChineseCICollator) Key(str string) []byte {
return g.KeyWithoutTrimRightSpace(truncateTailingSpace(str))
}
// ImmutableKey implement Collator interface.
func (g *gbkChineseCICollator) ImmutableKey(str string) []byte {
return g.KeyWithoutTrimRightSpace(truncateTailingSpace(str))
}
// KeyWithoutTrimRightSpace implement Collator interface.
func (*gbkChineseCICollator) KeyWithoutTrimRightSpace(str string) []byte {
buf := make([]byte, 0, len(str)*2)
i, rLen := 0, 0
r := rune(0)
for i < len(str) {
// When the byte sequence is not a valid UTF-8 encoding of a rune, Golang returns RuneError('�') and size 1.
// See https://pkg.go.dev/unicode/utf8#DecodeRune for more details.
// Here we check both the size and rune to distinguish between invalid byte sequence and valid '�'.
r, rLen = utf8.DecodeRuneInString(str[i:])
invalid := r == utf8.RuneError && rLen == 1
if invalid {
return buf
}
i = i + rLen
u16 := gbkChineseCISortKey(r)
if u16 > 0xFF {
buf = append(buf, byte(u16>>8))
}
buf = append(buf, byte(u16))
}
return buf
}
// MaxKeyLen implements Collator interface.
func (*gbkChineseCICollator) MaxKeyLen(s string) int {
return utf8.RuneCountInString(s) * 2
}
// Pattern implements Collator interface.
func (*gbkChineseCICollator) Pattern() WildcardPattern {
return &gbkChineseCIPattern{}
}
// Clone implements Collator interface.
func (*gbkChineseCICollator) Clone() Collator {
return new(gbkChineseCICollator)
}
type gbkChineseCIPattern struct {
patChars []rune
patTypes []byte
}
// Compile implements WildcardPattern interface.
func (p *gbkChineseCIPattern) Compile(patternStr string, escape byte) {
p.patChars, p.patTypes = stringutil.CompilePatternInner(patternStr, escape)
}
// DoMatch implements WildcardPattern interface.
func (p *gbkChineseCIPattern) DoMatch(str string) bool {
return stringutil.DoMatchCustomized(str, p.patChars, p.patTypes, func(a, b rune) bool {
return gbkChineseCISortKey(a) == gbkChineseCISortKey(b)
})
}
func gbkChineseCISortKey(r rune) uint32 {
if r > 0xFFFF {
return 0x3F
}
return uint32(gbkChineseCISortKeyTable[r])
}
// Copyright 2020 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package collate
import (
"unicode/utf8"
"github.com/pingcap/tidb/pkg/util/stringutil"
)
type generalCICollator struct {
}
// Compare implements Collator interface.
func (*generalCICollator) Compare(a, b string) int {
return compareCommon(a, b, convertRuneGeneralCI)
}
// Key implements Collator interface.
func (gc *generalCICollator) Key(str string) []byte {
return gc.KeyWithoutTrimRightSpace(truncateTailingSpace(str))
}
// ImmutableKey implement Collator interface.
func (gc *generalCICollator) ImmutableKey(str string) []byte {
return gc.KeyWithoutTrimRightSpace(truncateTailingSpace(str))
}
// KeyWithoutTrimRightSpace implements Collator interface.
func (*generalCICollator) KeyWithoutTrimRightSpace(str string) []byte {
buf := make([]byte, 0, len(str))
i, rLen := 0, 0
r := rune(0)
for i < len(str) {
// When the byte sequence is not a valid UTF-8 encoding of a rune, Golang returns RuneError('�') and size 1.
// See https://pkg.go.dev/unicode/utf8#DecodeRune for more details.
// Here we check both the size and rune to distinguish between invalid byte sequence and valid '�'.
r, rLen = utf8.DecodeRuneInString(str[i:])
invalid := r == utf8.RuneError && rLen == 1
if invalid {
return buf
}
i = i + rLen
u16 := convertRuneGeneralCI(r)
buf = append(buf, byte(u16>>8), byte(u16))
}
return buf
}
// MaxKeyLen implements Collator interface.
func (*generalCICollator) MaxKeyLen(s string) int {
return utf8.RuneCountInString(s) * 2
}
// Pattern implements Collator interface.
func (*generalCICollator) Pattern() WildcardPattern {
return &ciPattern{}
}
// Clone implements Collator interface.
func (*generalCICollator) Clone() Collator {
return new(generalCICollator)
}
type ciPattern struct {
patChars []rune
patTypes []byte
}
// Compile implements WildcardPattern interface.
func (p *ciPattern) Compile(patternStr string, escape byte) {
p.patChars, p.patTypes = stringutil.CompilePatternInner(patternStr, escape)
}
// Compile implements WildcardPattern interface.
func (p *ciPattern) DoMatch(str string) bool {
return stringutil.DoMatchCustomized(str, p.patChars, p.patTypes, func(a, b rune) bool {
return convertRuneGeneralCI(a) == convertRuneGeneralCI(b)
})
}
func convertRuneGeneralCI(r rune) uint32 {
if r > 0xFFFF {
return 0xFFFD
}
plane := planeTable[r>>8]
if plane == nil {
return uint32(r)
}
return uint32(plane[r&0xFF])
}
var (
plane00 = []uint16{
0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F,
0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
0x0060, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F,
0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F,
0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F,
0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF,
0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x039C, 0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF,
0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x00C6, 0x0043, 0x0045, 0x0045, 0x0045, 0x0045, 0x0049, 0x0049, 0x0049, 0x0049,
0x00D0, 0x004E, 0x004F, 0x004F, 0x004F, 0x004F, 0x004F, 0x00D7, 0x00D8, 0x0055, 0x0055, 0x0055, 0x0055, 0x0059, 0x00DE, 0x0053,
0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x00C6, 0x0043, 0x0045, 0x0045, 0x0045, 0x0045, 0x0049, 0x0049, 0x0049, 0x0049,
0x00D0, 0x004E, 0x004F, 0x004F, 0x004F, 0x004F, 0x004F, 0x00F7, 0x00D8, 0x0055, 0x0055, 0x0055, 0x0055, 0x0059, 0x00DE, 0x0059}
plane01 = []uint16{
0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0043, 0x0044, 0x0044,
0x0110, 0x0110, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0047, 0x0047, 0x0047, 0x0047,
0x0047, 0x0047, 0x0047, 0x0047, 0x0048, 0x0048, 0x0126, 0x0126, 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, 0x0049, 0x0049,
0x0049, 0x0049, 0x0132, 0x0132, 0x004A, 0x004A, 0x004B, 0x004B, 0x0138, 0x004C, 0x004C, 0x004C, 0x004C, 0x004C, 0x004C, 0x013F,
0x013F, 0x0141, 0x0141, 0x004E, 0x004E, 0x004E, 0x004E, 0x004E, 0x004E, 0x0149, 0x014A, 0x014A, 0x004F, 0x004F, 0x004F, 0x004F,
0x004F, 0x004F, 0x0152, 0x0152, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053,
0x0053, 0x0053, 0x0054, 0x0054, 0x0054, 0x0054, 0x0166, 0x0166, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055,
0x0055, 0x0055, 0x0055, 0x0055, 0x0057, 0x0057, 0x0059, 0x0059, 0x0059, 0x005A, 0x005A, 0x005A, 0x005A, 0x005A, 0x005A, 0x0053,
0x0180, 0x0181, 0x0182, 0x0182, 0x0184, 0x0184, 0x0186, 0x0187, 0x0187, 0x0189, 0x018A, 0x018B, 0x018B, 0x018D, 0x018E, 0x018F,
0x0190, 0x0191, 0x0191, 0x0193, 0x0194, 0x01F6, 0x0196, 0x0197, 0x0198, 0x0198, 0x019A, 0x019B, 0x019C, 0x019D, 0x019E, 0x019F,
0x004F, 0x004F, 0x01A2, 0x01A2, 0x01A4, 0x01A4, 0x01A6, 0x01A7, 0x01A7, 0x01A9, 0x01AA, 0x01AB, 0x01AC, 0x01AC, 0x01AE, 0x0055,
0x0055, 0x01B1, 0x01B2, 0x01B3, 0x01B3, 0x01B5, 0x01B5, 0x01B7, 0x01B8, 0x01B8, 0x01BA, 0x01BB, 0x01BC, 0x01BC, 0x01BE, 0x01F7,
0x01C0, 0x01C1, 0x01C2, 0x01C3, 0x01C4, 0x01C4, 0x01C4, 0x01C7, 0x01C7, 0x01C7, 0x01CA, 0x01CA, 0x01CA, 0x0041, 0x0041, 0x0049,
0x0049, 0x004F, 0x004F, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x018E, 0x0041, 0x0041,
0x0041, 0x0041, 0x00C6, 0x00C6, 0x01E4, 0x01E4, 0x0047, 0x0047, 0x004B, 0x004B, 0x004F, 0x004F, 0x004F, 0x004F, 0x01B7, 0x01B7,
0x004A, 0x01F1, 0x01F1, 0x01F1, 0x0047, 0x0047, 0x01F6, 0x01F7, 0x004E, 0x004E, 0x0041, 0x0041, 0x00C6, 0x00C6, 0x00D8, 0x00D8}
plane02 = []uint16{
0x0041, 0x0041, 0x0041, 0x0041, 0x0045, 0x0045, 0x0045, 0x0045, 0x0049, 0x0049, 0x0049, 0x0049, 0x004F, 0x004F, 0x004F, 0x004F,
0x0052, 0x0052, 0x0052, 0x0052, 0x0055, 0x0055, 0x0055, 0x0055, 0x0053, 0x0053, 0x0054, 0x0054, 0x021C, 0x021C, 0x0048, 0x0048,
0x0220, 0x0221, 0x0222, 0x0222, 0x0224, 0x0224, 0x0041, 0x0041, 0x0045, 0x0045, 0x004F, 0x004F, 0x004F, 0x004F, 0x004F, 0x004F,
0x004F, 0x004F, 0x0059, 0x0059, 0x0234, 0x0235, 0x0236, 0x0237, 0x0238, 0x0239, 0x023A, 0x023B, 0x023C, 0x023D, 0x023E, 0x023F,
0x0240, 0x0241, 0x0242, 0x0243, 0x0244, 0x0245, 0x0246, 0x0247, 0x0248, 0x0249, 0x024A, 0x024B, 0x024C, 0x024D, 0x024E, 0x024F,
0x0250, 0x0251, 0x0252, 0x0181, 0x0186, 0x0255, 0x0189, 0x018A, 0x0258, 0x018F, 0x025A, 0x0190, 0x025C, 0x025D, 0x025E, 0x025F,
0x0193, 0x0261, 0x0262, 0x0194, 0x0264, 0x0265, 0x0266, 0x0267, 0x0197, 0x0196, 0x026A, 0x026B, 0x026C, 0x026D, 0x026E, 0x019C,
0x0270, 0x0271, 0x019D, 0x0273, 0x0274, 0x019F, 0x0276, 0x0277, 0x0278, 0x0279, 0x027A, 0x027B, 0x027C, 0x027D, 0x027E, 0x027F,
0x01A6, 0x0281, 0x0282, 0x01A9, 0x0284, 0x0285, 0x0286, 0x0287, 0x01AE, 0x0289, 0x01B1, 0x01B2, 0x028C, 0x028D, 0x028E, 0x028F,
0x0290, 0x0291, 0x01B7, 0x0293, 0x0294, 0x0295, 0x0296, 0x0297, 0x0298, 0x0299, 0x029A, 0x029B, 0x029C, 0x029D, 0x029E, 0x029F,
0x02A0, 0x02A1, 0x02A2, 0x02A3, 0x02A4, 0x02A5, 0x02A6, 0x02A7, 0x02A8, 0x02A9, 0x02AA, 0x02AB, 0x02AC, 0x02AD, 0x02AE, 0x02AF,
0x02B0, 0x02B1, 0x02B2, 0x02B3, 0x02B4, 0x02B5, 0x02B6, 0x02B7, 0x02B8, 0x02B9, 0x02BA, 0x02BB, 0x02BC, 0x02BD, 0x02BE, 0x02BF,
0x02C0, 0x02C1, 0x02C2, 0x02C3, 0x02C4, 0x02C5, 0x02C6, 0x02C7, 0x02C8, 0x02C9, 0x02CA, 0x02CB, 0x02CC, 0x02CD, 0x02CE, 0x02CF,
0x02D0, 0x02D1, 0x02D2, 0x02D3, 0x02D4, 0x02D5, 0x02D6, 0x02D7, 0x02D8, 0x02D9, 0x02DA, 0x02DB, 0x02DC, 0x02DD, 0x02DE, 0x02DF,
0x02E0, 0x02E1, 0x02E2, 0x02E3, 0x02E4, 0x02E5, 0x02E6, 0x02E7, 0x02E8, 0x02E9, 0x02EA, 0x02EB, 0x02EC, 0x02ED, 0x02EE, 0x02EF,
0x02F0, 0x02F1, 0x02F2, 0x02F3, 0x02F4, 0x02F5, 0x02F6, 0x02F7, 0x02F8, 0x02F9, 0x02FA, 0x02FB, 0x02FC, 0x02FD, 0x02FE, 0x02FF}
plane03 = []uint16{
0x0300, 0x0301, 0x0302, 0x0303, 0x0304, 0x0305, 0x0306, 0x0307, 0x0308, 0x0309, 0x030A, 0x030B, 0x030C, 0x030D, 0x030E, 0x030F,
0x0310, 0x0311, 0x0312, 0x0313, 0x0314, 0x0315, 0x0316, 0x0317, 0x0318, 0x0319, 0x031A, 0x031B, 0x031C, 0x031D, 0x031E, 0x031F,
0x0320, 0x0321, 0x0322, 0x0323, 0x0324, 0x0325, 0x0326, 0x0327, 0x0328, 0x0329, 0x032A, 0x032B, 0x032C, 0x032D, 0x032E, 0x032F,
0x0330, 0x0331, 0x0332, 0x0333, 0x0334, 0x0335, 0x0336, 0x0337, 0x0338, 0x0339, 0x033A, 0x033B, 0x033C, 0x033D, 0x033E, 0x033F,
0x0340, 0x0341, 0x0342, 0x0343, 0x0344, 0x0399, 0x0346, 0x0347, 0x0348, 0x0349, 0x034A, 0x034B, 0x034C, 0x034D, 0x034E, 0x034F,
0x0350, 0x0351, 0x0352, 0x0353, 0x0354, 0x0355, 0x0356, 0x0357, 0x0358, 0x0359, 0x035A, 0x035B, 0x035C, 0x035D, 0x035E, 0x035F,
0x0360, 0x0361, 0x0362, 0x0363, 0x0364, 0x0365, 0x0366, 0x0367, 0x0368, 0x0369, 0x036A, 0x036B, 0x036C, 0x036D, 0x036E, 0x036F,
0x0370, 0x0371, 0x0372, 0x0373, 0x0374, 0x0375, 0x0376, 0x0377, 0x0378, 0x0379, 0x037A, 0x037B, 0x037C, 0x037D, 0x037E, 0x037F,
0x0380, 0x0381, 0x0382, 0x0383, 0x0384, 0x0385, 0x0391, 0x0387, 0x0395, 0x0397, 0x0399, 0x038B, 0x039F, 0x038D, 0x03A5, 0x03A9,
0x0399, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F,
0x03A0, 0x03A1, 0x03A2, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0x0399, 0x03A5, 0x0391, 0x0395, 0x0397, 0x0399,
0x03A5, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F,
0x03A0, 0x03A1, 0x03A3, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0x0399, 0x03A5, 0x039F, 0x03A5, 0x03A9, 0x03CF,
0x0392, 0x0398, 0x03D2, 0x03D2, 0x03D2, 0x03A6, 0x03A0, 0x03D7, 0x03D8, 0x03D9, 0x03DA, 0x03DA, 0x03DC, 0x03DC, 0x03DE, 0x03DE,
0x03E0, 0x03E0, 0x03E2, 0x03E2, 0x03E4, 0x03E4, 0x03E6, 0x03E6, 0x03E8, 0x03E8, 0x03EA, 0x03EA, 0x03EC, 0x03EC, 0x03EE, 0x03EE,
0x039A, 0x03A1, 0x03A3, 0x03F3, 0x03F4, 0x03F5, 0x03F6, 0x03F7, 0x03F8, 0x03F9, 0x03FA, 0x03FB, 0x03FC, 0x03FD, 0x03FE, 0x03FF}
plane04 = []uint16{
0x0415, 0x0415, 0x0402, 0x0413, 0x0404, 0x0405, 0x0406, 0x0406, 0x0408, 0x0409, 0x040A, 0x040B, 0x041A, 0x0418, 0x0423, 0x040F,
0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
0x0415, 0x0415, 0x0402, 0x0413, 0x0404, 0x0405, 0x0406, 0x0406, 0x0408, 0x0409, 0x040A, 0x040B, 0x041A, 0x0418, 0x0423, 0x040F,
0x0460, 0x0460, 0x0462, 0x0462, 0x0464, 0x0464, 0x0466, 0x0466, 0x0468, 0x0468, 0x046A, 0x046A, 0x046C, 0x046C, 0x046E, 0x046E,
0x0470, 0x0470, 0x0472, 0x0472, 0x0474, 0x0474, 0x0474, 0x0474, 0x0478, 0x0478, 0x047A, 0x047A, 0x047C, 0x047C, 0x047E, 0x047E,
0x0480, 0x0480, 0x0482, 0x0483, 0x0484, 0x0485, 0x0486, 0x0487, 0x0488, 0x0489, 0x048A, 0x048B, 0x048C, 0x048C, 0x048E, 0x048E,
0x0490, 0x0490, 0x0492, 0x0492, 0x0494, 0x0494, 0x0496, 0x0496, 0x0498, 0x0498, 0x049A, 0x049A, 0x049C, 0x049C, 0x049E, 0x049E,
0x04A0, 0x04A0, 0x04A2, 0x04A2, 0x04A4, 0x04A4, 0x04A6, 0x04A6, 0x04A8, 0x04A8, 0x04AA, 0x04AA, 0x04AC, 0x04AC, 0x04AE, 0x04AE,
0x04B0, 0x04B0, 0x04B2, 0x04B2, 0x04B4, 0x04B4, 0x04B6, 0x04B6, 0x04B8, 0x04B8, 0x04BA, 0x04BA, 0x04BC, 0x04BC, 0x04BE, 0x04BE,
0x04C0, 0x0416, 0x0416, 0x04C3, 0x04C3, 0x04C5, 0x04C6, 0x04C7, 0x04C7, 0x04C9, 0x04CA, 0x04CB, 0x04CB, 0x04CD, 0x04CE, 0x04CF,
0x0410, 0x0410, 0x0410, 0x0410, 0x04D4, 0x04D4, 0x0415, 0x0415, 0x04D8, 0x04D8, 0x04D8, 0x04D8, 0x0416, 0x0416, 0x0417, 0x0417,
0x04E0, 0x04E0, 0x0418, 0x0418, 0x0418, 0x0418, 0x041E, 0x041E, 0x04E8, 0x04E8, 0x04E8, 0x04E8, 0x042D, 0x042D, 0x0423, 0x0423,
0x0423, 0x0423, 0x0423, 0x0423, 0x0427, 0x0427, 0x04F6, 0x04F7, 0x042B, 0x042B, 0x04FA, 0x04FB, 0x04FC, 0x04FD, 0x04FE, 0x04FF}
plane05 = []uint16{
0x0500, 0x0501, 0x0502, 0x0503, 0x0504, 0x0505, 0x0506, 0x0507, 0x0508, 0x0509, 0x050A, 0x050B, 0x050C, 0x050D, 0x050E, 0x050F,
0x0510, 0x0511, 0x0512, 0x0513, 0x0514, 0x0515, 0x0516, 0x0517, 0x0518, 0x0519, 0x051A, 0x051B, 0x051C, 0x051D, 0x051E, 0x051F,
0x0520, 0x0521, 0x0522, 0x0523, 0x0524, 0x0525, 0x0526, 0x0527, 0x0528, 0x0529, 0x052A, 0x052B, 0x052C, 0x052D, 0x052E, 0x052F,
0x0530, 0x0531, 0x0532, 0x0533, 0x0534, 0x0535, 0x0536, 0x0537, 0x0538, 0x0539, 0x053A, 0x053B, 0x053C, 0x053D, 0x053E, 0x053F,
0x0540, 0x0541, 0x0542, 0x0543, 0x0544, 0x0545, 0x0546, 0x0547, 0x0548, 0x0549, 0x054A, 0x054B, 0x054C, 0x054D, 0x054E, 0x054F,
0x0550, 0x0551, 0x0552, 0x0553, 0x0554, 0x0555, 0x0556, 0x0557, 0x0558, 0x0559, 0x055A, 0x055B, 0x055C, 0x055D, 0x055E, 0x055F,
0x0560, 0x0531, 0x0532, 0x0533, 0x0534, 0x0535, 0x0536, 0x0537, 0x0538, 0x0539, 0x053A, 0x053B, 0x053C, 0x053D, 0x053E, 0x053F,
0x0540, 0x0541, 0x0542, 0x0543, 0x0544, 0x0545, 0x0546, 0x0547, 0x0548, 0x0549, 0x054A, 0x054B, 0x054C, 0x054D, 0x054E, 0x054F,
0x0550, 0x0551, 0x0552, 0x0553, 0x0554, 0x0555, 0x0556, 0x0587, 0x0588, 0x0589, 0x058A, 0x058B, 0x058C, 0x058D, 0x058E, 0x058F,
0x0590, 0x0591, 0x0592, 0x0593, 0x0594, 0x0595, 0x0596, 0x0597, 0x0598, 0x0599, 0x059A, 0x059B, 0x059C, 0x059D, 0x059E, 0x059F,
0x05A0, 0x05A1, 0x05A2, 0x05A3, 0x05A4, 0x05A5, 0x05A6, 0x05A7, 0x05A8, 0x05A9, 0x05AA, 0x05AB, 0x05AC, 0x05AD, 0x05AE, 0x05AF,
0x05B0, 0x05B1, 0x05B2, 0x05B3, 0x05B4, 0x05B5, 0x05B6, 0x05B7, 0x05B8, 0x05B9, 0x05BA, 0x05BB, 0x05BC, 0x05BD, 0x05BE, 0x05BF,
0x05C0, 0x05C1, 0x05C2, 0x05C3, 0x05C4, 0x05C5, 0x05C6, 0x05C7, 0x05C8, 0x05C9, 0x05CA, 0x05CB, 0x05CC, 0x05CD, 0x05CE, 0x05CF,
0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7, 0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF,
0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7, 0x05E8, 0x05E9, 0x05EA, 0x05EB, 0x05EC, 0x05ED, 0x05EE, 0x05EF,
0x05F0, 0x05F1, 0x05F2, 0x05F3, 0x05F4, 0x05F5, 0x05F6, 0x05F7, 0x05F8, 0x05F9, 0x05FA, 0x05FB, 0x05FC, 0x05FD, 0x05FE, 0x05FF}
plane1E = []uint16{
0x0041, 0x0041, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0042, 0x0043, 0x0043, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044, 0x0044,
0x0044, 0x0044, 0x0044, 0x0044, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0046, 0x0046,
0x0047, 0x0047, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0048, 0x0049, 0x0049, 0x0049, 0x0049,
0x004B, 0x004B, 0x004B, 0x004B, 0x004B, 0x004B, 0x004C, 0x004C, 0x004C, 0x004C, 0x004C, 0x004C, 0x004C, 0x004C, 0x004D, 0x004D,
0x004D, 0x004D, 0x004D, 0x004D, 0x004E, 0x004E, 0x004E, 0x004E, 0x004E, 0x004E, 0x004E, 0x004E, 0x004F, 0x004F, 0x004F, 0x004F,
0x004F, 0x004F, 0x004F, 0x004F, 0x0050, 0x0050, 0x0050, 0x0050, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052, 0x0052,
0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0053, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054, 0x0054,
0x0054, 0x0054, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0056, 0x0056, 0x0056, 0x0056,
0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0057, 0x0058, 0x0058, 0x0058, 0x0058, 0x0059, 0x0059,
0x005A, 0x005A, 0x005A, 0x005A, 0x005A, 0x005A, 0x0048, 0x0054, 0x0057, 0x0059, 0x1E9A, 0x0053, 0x1E9C, 0x1E9D, 0x1E9E, 0x1E9F,
0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041,
0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0041, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045,
0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0045, 0x0049, 0x0049, 0x0049, 0x0049, 0x004F, 0x004F, 0x004F, 0x004F,
0x004F, 0x004F, 0x004F, 0x004F, 0x004F, 0x004F, 0x004F, 0x004F, 0x004F, 0x004F, 0x004F, 0x004F, 0x004F, 0x004F, 0x004F, 0x004F,
0x004F, 0x004F, 0x004F, 0x004F, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055, 0x0055,
0x0055, 0x0055, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x0059, 0x1EFA, 0x1EFB, 0x1EFC, 0x1EFD, 0x1EFE, 0x1EFF}
plane1F = []uint16{
0x0391, 0x0391, 0x0391, 0x0391, 0x0391, 0x0391, 0x0391, 0x0391, 0x0391, 0x0391, 0x0391, 0x0391, 0x0391, 0x0391, 0x0391, 0x0391,
0x0395, 0x0395, 0x0395, 0x0395, 0x0395, 0x0395, 0x1F16, 0x1F17, 0x0395, 0x0395, 0x0395, 0x0395, 0x0395, 0x0395, 0x1F1E, 0x1F1F,
0x0397, 0x0397, 0x0397, 0x0397, 0x0397, 0x0397, 0x0397, 0x0397, 0x0397, 0x0397, 0x0397, 0x0397, 0x0397, 0x0397, 0x0397, 0x0397,
0x0399, 0x0399, 0x0399, 0x0399, 0x0399, 0x0399, 0x0399, 0x0399, 0x0399, 0x0399, 0x0399, 0x0399, 0x0399, 0x0399, 0x0399, 0x0399,
0x039F, 0x039F, 0x039F, 0x039F, 0x039F, 0x039F, 0x1F46, 0x1F47, 0x039F, 0x039F, 0x039F, 0x039F, 0x039F, 0x039F, 0x1F4E, 0x1F4F,
0x03A5, 0x03A5, 0x03A5, 0x03A5, 0x03A5, 0x03A5, 0x03A5, 0x03A5, 0x1F58, 0x03A5, 0x1F5A, 0x03A5, 0x1F5C, 0x03A5, 0x1F5E, 0x03A5,
0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03A9,
0x0391, 0x1FBB, 0x0395, 0x1FC9, 0x0397, 0x1FCB, 0x0399, 0x1FDB, 0x039F, 0x1FF9, 0x03A5, 0x1FEB, 0x03A9, 0x1FFB, 0x1F7E, 0x1F7F,
0x0391, 0x0391, 0x0391, 0x0391, 0x0391, 0x0391, 0x0391, 0x0391, 0x0391, 0x0391, 0x0391, 0x0391, 0x0391, 0x0391, 0x0391, 0x0391,
0x0397, 0x0397, 0x0397, 0x0397, 0x0397, 0x0397, 0x0397, 0x0397, 0x0397, 0x0397, 0x0397, 0x0397, 0x0397, 0x0397, 0x0397, 0x0397,
0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03A9, 0x03A9,
0x0391, 0x0391, 0x0391, 0x0391, 0x0391, 0x1FB5, 0x0391, 0x0391, 0x0391, 0x0391, 0x0391, 0x1FBB, 0x0391, 0x1FBD, 0x0399, 0x1FBF,
0x1FC0, 0x1FC1, 0x0397, 0x0397, 0x0397, 0x1FC5, 0x0397, 0x0397, 0x0395, 0x1FC9, 0x0397, 0x1FCB, 0x0397, 0x1FCD, 0x1FCE, 0x1FCF,
0x0399, 0x0399, 0x0399, 0x1FD3, 0x1FD4, 0x1FD5, 0x0399, 0x0399, 0x0399, 0x0399, 0x0399, 0x1FDB, 0x1FDC, 0x1FDD, 0x1FDE, 0x1FDF,
0x03A5, 0x03A5, 0x03A5, 0x1FE3, 0x03A1, 0x03A1, 0x03A5, 0x03A5, 0x03A5, 0x03A5, 0x03A5, 0x1FEB, 0x03A1, 0x1FED, 0x1FEE, 0x1FEF,
0x1FF0, 0x1FF1, 0x03A9, 0x03A9, 0x03A9, 0x1FF5, 0x03A9, 0x03A9, 0x039F, 0x1FF9, 0x03A9, 0x1FFB, 0x03A9, 0x1FFD, 0x1FFE, 0x1FFF}
plane21 = []uint16{
0x2100, 0x2101, 0x2102, 0x2103, 0x2104, 0x2105, 0x2106, 0x2107, 0x2108, 0x2109, 0x210A, 0x210B, 0x210C, 0x210D, 0x210E, 0x210F,
0x2110, 0x2111, 0x2112, 0x2113, 0x2114, 0x2115, 0x2116, 0x2117, 0x2118, 0x2119, 0x211A, 0x211B, 0x211C, 0x211D, 0x211E, 0x211F,
0x2120, 0x2121, 0x2122, 0x2123, 0x2124, 0x2125, 0x2126, 0x2127, 0x2128, 0x2129, 0x212A, 0x212B, 0x212C, 0x212D, 0x212E, 0x212F,
0x2130, 0x2131, 0x2132, 0x2133, 0x2134, 0x2135, 0x2136, 0x2137, 0x2138, 0x2139, 0x213A, 0x213B, 0x213C, 0x213D, 0x213E, 0x213F,
0x2140, 0x2141, 0x2142, 0x2143, 0x2144, 0x2145, 0x2146, 0x2147, 0x2148, 0x2149, 0x214A, 0x214B, 0x214C, 0x214D, 0x214E, 0x214F,
0x2150, 0x2151, 0x2152, 0x2153, 0x2154, 0x2155, 0x2156, 0x2157, 0x2158, 0x2159, 0x215A, 0x215B, 0x215C, 0x215D, 0x215E, 0x215F,
0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0x216A, 0x216B, 0x216C, 0x216D, 0x216E, 0x216F,
0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0x216A, 0x216B, 0x216C, 0x216D, 0x216E, 0x216F,
0x2180, 0x2181, 0x2182, 0x2183, 0x2184, 0x2185, 0x2186, 0x2187, 0x2188, 0x2189, 0x218A, 0x218B, 0x218C, 0x218D, 0x218E, 0x218F,
0x2190, 0x2191, 0x2192, 0x2193, 0x2194, 0x2195, 0x2196, 0x2197, 0x2198, 0x2199, 0x219A, 0x219B, 0x219C, 0x219D, 0x219E, 0x219F,
0x21A0, 0x21A1, 0x21A2, 0x21A3, 0x21A4, 0x21A5, 0x21A6, 0x21A7, 0x21A8, 0x21A9, 0x21AA, 0x21AB, 0x21AC, 0x21AD, 0x21AE, 0x21AF,
0x21B0, 0x21B1, 0x21B2, 0x21B3, 0x21B4, 0x21B5, 0x21B6, 0x21B7, 0x21B8, 0x21B9, 0x21BA, 0x21BB, 0x21BC, 0x21BD, 0x21BE, 0x21BF,
0x21C0, 0x21C1, 0x21C2, 0x21C3, 0x21C4, 0x21C5, 0x21C6, 0x21C7, 0x21C8, 0x21C9, 0x21CA, 0x21CB, 0x21CC, 0x21CD, 0x21CE, 0x21CF,
0x21D0, 0x21D1, 0x21D2, 0x21D3, 0x21D4, 0x21D5, 0x21D6, 0x21D7, 0x21D8, 0x21D9, 0x21DA, 0x21DB, 0x21DC, 0x21DD, 0x21DE, 0x21DF,
0x21E0, 0x21E1, 0x21E2, 0x21E3, 0x21E4, 0x21E5, 0x21E6, 0x21E7, 0x21E8, 0x21E9, 0x21EA, 0x21EB, 0x21EC, 0x21ED, 0x21EE, 0x21EF,
0x21F0, 0x21F1, 0x21F2, 0x21F3, 0x21F4, 0x21F5, 0x21F6, 0x21F7, 0x21F8, 0x21F9, 0x21FA, 0x21FB, 0x21FC, 0x21FD, 0x21FE, 0x21FF}
plane24 = []uint16{
0x2400, 0x2401, 0x2402, 0x2403, 0x2404, 0x2405, 0x2406, 0x2407, 0x2408, 0x2409, 0x240A, 0x240B, 0x240C, 0x240D, 0x240E, 0x240F,
0x2410, 0x2411, 0x2412, 0x2413, 0x2414, 0x2415, 0x2416, 0x2417, 0x2418, 0x2419, 0x241A, 0x241B, 0x241C, 0x241D, 0x241E, 0x241F,
0x2420, 0x2421, 0x2422, 0x2423, 0x2424, 0x2425, 0x2426, 0x2427, 0x2428, 0x2429, 0x242A, 0x242B, 0x242C, 0x242D, 0x242E, 0x242F,
0x2430, 0x2431, 0x2432, 0x2433, 0x2434, 0x2435, 0x2436, 0x2437, 0x2438, 0x2439, 0x243A, 0x243B, 0x243C, 0x243D, 0x243E, 0x243F,
0x2440, 0x2441, 0x2442, 0x2443, 0x2444, 0x2445, 0x2446, 0x2447, 0x2448, 0x2449, 0x244A, 0x244B, 0x244C, 0x244D, 0x244E, 0x244F,
0x2450, 0x2451, 0x2452, 0x2453, 0x2454, 0x2455, 0x2456, 0x2457, 0x2458, 0x2459, 0x245A, 0x245B, 0x245C, 0x245D, 0x245E, 0x245F,
0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, 0x246A, 0x246B, 0x246C, 0x246D, 0x246E, 0x246F,
0x2470, 0x2471, 0x2472, 0x2473, 0x2474, 0x2475, 0x2476, 0x2477, 0x2478, 0x2479, 0x247A, 0x247B, 0x247C, 0x247D, 0x247E, 0x247F,
0x2480, 0x2481, 0x2482, 0x2483, 0x2484, 0x2485, 0x2486, 0x2487, 0x2488, 0x2489, 0x248A, 0x248B, 0x248C, 0x248D, 0x248E, 0x248F,
0x2490, 0x2491, 0x2492, 0x2493, 0x2494, 0x2495, 0x2496, 0x2497, 0x2498, 0x2499, 0x249A, 0x249B, 0x249C, 0x249D, 0x249E, 0x249F,
0x24A0, 0x24A1, 0x24A2, 0x24A3, 0x24A4, 0x24A5, 0x24A6, 0x24A7, 0x24A8, 0x24A9, 0x24AA, 0x24AB, 0x24AC, 0x24AD, 0x24AE, 0x24AF,
0x24B0, 0x24B1, 0x24B2, 0x24B3, 0x24B4, 0x24B5, 0x24B6, 0x24B7, 0x24B8, 0x24B9, 0x24BA, 0x24BB, 0x24BC, 0x24BD, 0x24BE, 0x24BF,
0x24C0, 0x24C1, 0x24C2, 0x24C3, 0x24C4, 0x24C5, 0x24C6, 0x24C7, 0x24C8, 0x24C9, 0x24CA, 0x24CB, 0x24CC, 0x24CD, 0x24CE, 0x24CF,
0x24B6, 0x24B7, 0x24B8, 0x24B9, 0x24BA, 0x24BB, 0x24BC, 0x24BD, 0x24BE, 0x24BF, 0x24C0, 0x24C1, 0x24C2, 0x24C3, 0x24C4, 0x24C5,
0x24C6, 0x24C7, 0x24C8, 0x24C9, 0x24CA, 0x24CB, 0x24CC, 0x24CD, 0x24CE, 0x24CF, 0x24EA, 0x24EB, 0x24EC, 0x24ED, 0x24EE, 0x24EF,
0x24F0, 0x24F1, 0x24F2, 0x24F3, 0x24F4, 0x24F5, 0x24F6, 0x24F7, 0x24F8, 0x24F9, 0x24FA, 0x24FB, 0x24FC, 0x24FD, 0x24FE, 0x24FF}
planeFF = []uint16{
0xFF00, 0xFF01, 0xFF02, 0xFF03, 0xFF04, 0xFF05, 0xFF06, 0xFF07, 0xFF08, 0xFF09, 0xFF0A, 0xFF0B, 0xFF0C, 0xFF0D, 0xFF0E, 0xFF0F,
0xFF10, 0xFF11, 0xFF12, 0xFF13, 0xFF14, 0xFF15, 0xFF16, 0xFF17, 0xFF18, 0xFF19, 0xFF1A, 0xFF1B, 0xFF1C, 0xFF1D, 0xFF1E, 0xFF1F,
0xFF20, 0xFF21, 0xFF22, 0xFF23, 0xFF24, 0xFF25, 0xFF26, 0xFF27, 0xFF28, 0xFF29, 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D, 0xFF2E, 0xFF2F,
0xFF30, 0xFF31, 0xFF32, 0xFF33, 0xFF34, 0xFF35, 0xFF36, 0xFF37, 0xFF38, 0xFF39, 0xFF3A, 0xFF3B, 0xFF3C, 0xFF3D, 0xFF3E, 0xFF3F,
0xFF40, 0xFF21, 0xFF22, 0xFF23, 0xFF24, 0xFF25, 0xFF26, 0xFF27, 0xFF28, 0xFF29, 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D, 0xFF2E, 0xFF2F,
0xFF30, 0xFF31, 0xFF32, 0xFF33, 0xFF34, 0xFF35, 0xFF36, 0xFF37, 0xFF38, 0xFF39, 0xFF3A, 0xFF5B, 0xFF5C, 0xFF5D, 0xFF5E, 0xFF5F,
0xFF60, 0xFF61, 0xFF62, 0xFF63, 0xFF64, 0xFF65, 0xFF66, 0xFF67, 0xFF68, 0xFF69, 0xFF6A, 0xFF6B, 0xFF6C, 0xFF6D, 0xFF6E, 0xFF6F,
0xFF70, 0xFF71, 0xFF72, 0xFF73, 0xFF74, 0xFF75, 0xFF76, 0xFF77, 0xFF78, 0xFF79, 0xFF7A, 0xFF7B, 0xFF7C, 0xFF7D, 0xFF7E, 0xFF7F,
0xFF80, 0xFF81, 0xFF82, 0xFF83, 0xFF84, 0xFF85, 0xFF86, 0xFF87, 0xFF88, 0xFF89, 0xFF8A, 0xFF8B, 0xFF8C, 0xFF8D, 0xFF8E, 0xFF8F,
0xFF90, 0xFF91, 0xFF92, 0xFF93, 0xFF94, 0xFF95, 0xFF96, 0xFF97, 0xFF98, 0xFF99, 0xFF9A, 0xFF9B, 0xFF9C, 0xFF9D, 0xFF9E, 0xFF9F,
0xFFA0, 0xFFA1, 0xFFA2, 0xFFA3, 0xFFA4, 0xFFA5, 0xFFA6, 0xFFA7, 0xFFA8, 0xFFA9, 0xFFAA, 0xFFAB, 0xFFAC, 0xFFAD, 0xFFAE, 0xFFAF,
0xFFB0, 0xFFB1, 0xFFB2, 0xFFB3, 0xFFB4, 0xFFB5, 0xFFB6, 0xFFB7, 0xFFB8, 0xFFB9, 0xFFBA, 0xFFBB, 0xFFBC, 0xFFBD, 0xFFBE, 0xFFBF,
0xFFC0, 0xFFC1, 0xFFC2, 0xFFC3, 0xFFC4, 0xFFC5, 0xFFC6, 0xFFC7, 0xFFC8, 0xFFC9, 0xFFCA, 0xFFCB, 0xFFCC, 0xFFCD, 0xFFCE, 0xFFCF,
0xFFD0, 0xFFD1, 0xFFD2, 0xFFD3, 0xFFD4, 0xFFD5, 0xFFD6, 0xFFD7, 0xFFD8, 0xFFD9, 0xFFDA, 0xFFDB, 0xFFDC, 0xFFDD, 0xFFDE, 0xFFDF,
0xFFE0, 0xFFE1, 0xFFE2, 0xFFE3, 0xFFE4, 0xFFE5, 0xFFE6, 0xFFE7, 0xFFE8, 0xFFE9, 0xFFEA, 0xFFEB, 0xFFEC, 0xFFED, 0xFFEE, 0xFFEF,
0xFFF0, 0xFFF1, 0xFFF2, 0xFFF3, 0xFFF4, 0xFFF5, 0xFFF6, 0xFFF7, 0xFFF8, 0xFFF9, 0xFFFA, 0xFFFB, 0xFFFC, 0xFFFD, 0xFFFE, 0xFFFF}
planeTable = [][]uint16{
plane00, plane01, plane02, plane03, plane04, plane05, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, plane1E, plane1F, nil, plane21, nil, nil,
plane24, nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, nil, nil, nil, nil, nil, nil,
nil, nil, nil, planeFF}
)
// Copyright 2020 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package collate
// Collation of utf8mb4_zh_pinyin_tidb_as_cs
type zhPinyinTiDBASCSCollator struct {
}
// Compare is not implemented.
func (*zhPinyinTiDBASCSCollator) Compare(_, _ string) int {
panic("implement me")
}
// Key is not implemented.
func (*zhPinyinTiDBASCSCollator) Key(_ string) []byte {
panic("implement me")
}
// ImmutableKey implement Collator interface.
func (*zhPinyinTiDBASCSCollator) ImmutableKey(_ string) []byte {
panic("implement me")
}
// KeyWithoutTrimRightSpace is not implemented.
func (*zhPinyinTiDBASCSCollator) KeyWithoutTrimRightSpace(_ string) []byte {
panic("implement me")
}
// MaxKeyLen implements Collator interface.
func (*zhPinyinTiDBASCSCollator) MaxKeyLen(string) int {
panic("implement me")
}
// Pattern is not implemented.
func (*zhPinyinTiDBASCSCollator) Pattern() WildcardPattern {
panic("implement me")
}
// Clone is not implemented.
func (*zhPinyinTiDBASCSCollator) Clone() Collator {
panic("implement me")
}
// Copyright 2023 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// Code generated by "util/collate/ucaimpl"; DO NOT EDIT.
// These codes are generated rather than using other polymorphism method (e.g. generics, interfaces, if/else...) to make
// sure every call to the `GetWeight` and `Preprocess` is inlined. The function inlining can affect 20%~50% performance.
package collate
import "unicode/utf8"
// unicodeCICollator implements UCA. see http://unicode.org/reports/tr10/
type unicodeCICollator struct {
impl unicode0400Impl
}
// Clone implements Collator interface.
func (uc *unicodeCICollator) Clone() Collator {
return &unicodeCICollator{impl: uc.impl.Clone()}
}
// Compare implements Collator interface.
func (uc *unicodeCICollator) Compare(a, b string) int {
a = uc.impl.Preprocess(a)
b = uc.impl.Preprocess(b)
// weight of a, b. weight in unicode_ci may have 8 uint16s. xn indicate first 4 u16s, xs indicate last 4 u16s
an, bn := uint64(0), uint64(0)
as, bs := uint64(0), uint64(0)
// rune of a, b
ar, br := rune(0), rune(0)
// decode index of a, b
ai, bi := 0, 0
arLen, brLen := 0, 0
for {
if an == 0 {
if as == 0 {
for an == 0 && ai < len(a) {
// When the byte sequence is not a valid UTF-8 encoding of a rune, Golang returns RuneError('�') and size 1.
// See https://pkg.go.dev/unicode/utf8#DecodeRune for more details.
// Here we check both the size and rune to distinguish between invalid byte sequence and valid '�'.
ar, arLen = utf8.DecodeRuneInString(a[ai:])
invalid := ar == utf8.RuneError && arLen == 1
if invalid {
return 0
}
ai = ai + arLen
an, as = uc.impl.GetWeight(ar)
}
} else {
an = as
as = 0
}
}
if bn == 0 {
if bs == 0 {
for bn == 0 && bi < len(b) {
// When the byte sequence is not a valid UTF-8 encoding of a rune, Golang returns RuneError('�') and size 1.
// See https://pkg.go.dev/unicode/utf8#DecodeRune for more details.
// Here we check both the size and rune to distinguish between invalid byte sequence and valid '�'.
br, brLen = utf8.DecodeRuneInString(b[bi:])
invalid := br == utf8.RuneError && brLen == 1
if invalid {
return 0
}
bi = bi + brLen
bn, bs = uc.impl.GetWeight(br)
}
} else {
bn = bs
bs = 0
}
}
if an == 0 || bn == 0 {
return sign(int(an) - int(bn))
}
if an == bn {
an, bn = 0, 0
continue
}
for an != 0 && bn != 0 {
if (an^bn)&0xFFFF != 0 {
return sign(int(an&0xFFFF) - int(bn&0xFFFF))
}
an >>= 16
bn >>= 16
}
}
}
// Key implements Collator interface.
func (uc *unicodeCICollator) Key(str string) []byte {
return uc.KeyWithoutTrimRightSpace(uc.impl.Preprocess(str))
}
// ImmutableKey implements Collator interface.
func (uc *unicodeCICollator) ImmutableKey(str string) []byte {
return uc.KeyWithoutTrimRightSpace(uc.impl.Preprocess(str))
}
// KeyWithoutTrimRightSpace implements Collator interface.
func (uc *unicodeCICollator) KeyWithoutTrimRightSpace(str string) []byte {
buf := make([]byte, 0, len(str)*2)
r := rune(0)
si := 0 // decode index of s
sn, ss := uint64(0), uint64(0) // weight of str. weight in unicode_ci may has 8 uint16s. sn indicate first 4 u16s, ss indicate last 4 u16s
rLen := 0
for si < len(str) {
r, rLen = utf8.DecodeRuneInString(str[si:])
invalid := r == utf8.RuneError && rLen == 1
if invalid {
return buf
}
si = si + rLen
sn, ss = uc.impl.GetWeight(r)
for sn != 0 {
buf = append(buf, byte((sn&0xFF00)>>8), byte(sn))
sn >>= 16
}
for ss != 0 {
buf = append(buf, byte((ss&0xFF00)>>8), byte(ss))
ss >>= 16
}
}
return buf
}
// Pattern implements Collator interface.
func (uc *unicodeCICollator) Pattern() WildcardPattern {
return uc.impl.Pattern()
}
// MaxKeyLen implements Collator interface.
func (uc *unicodeCICollator) MaxKeyLen(s string) int {
return utf8.RuneCountInString(s) * 16
}
// Copyright 2020 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package collate
import (
"github.com/pingcap/tidb/pkg/util/collate/ucadata"
"github.com/pingcap/tidb/pkg/util/stringutil"
)
const (
// magic number indicate weight has 2 uint64, should get from `longRuneMap`
longRune uint64 = 0xFFFD
)
//go:generate go run ./ucaimpl/main.go -- unicode_0400_ci_generated.go
type unicode0400Impl struct {
}
func (unicode0400Impl) Clone() unicode0400Impl {
return unicode0400Impl{}
}
func (unicode0400Impl) Preprocess(s string) string {
return truncateTailingSpace(s)
}
func (unicode0400Impl) GetWeight(r rune) (first, second uint64) {
if r > 0xFFFF {
return 0xFFFD, 0
}
if ucadata.DUCET0400Table.MapTable4[r] == longRune {
return ucadata.DUCET0400Table.LongRuneMap[r][0], ucadata.DUCET0400Table.LongRuneMap[r][1]
}
return ucadata.DUCET0400Table.MapTable4[r], 0
}
func (unicode0400Impl) Pattern() WildcardPattern {
return &unicodePattern{}
}
type unicodePattern struct {
patChars []rune
patTypes []byte
}
// Compile implements WildcardPattern interface.
func (p *unicodePattern) Compile(patternStr string, escape byte) {
p.patChars, p.patTypes = stringutil.CompilePatternInner(patternStr, escape)
}
// DoMatch implements WildcardPattern interface.
func (p *unicodePattern) DoMatch(str string) bool {
return stringutil.DoMatchCustomized(str, p.patChars, p.patTypes, func(a, b rune) bool {
if a > 0xFFFF || b > 0xFFFF {
return a == b
}
ar, br := ucadata.DUCET0400Table.MapTable4[a], ucadata.DUCET0400Table.MapTable4[b]
if ar != br {
return false
}
if ar == longRune {
return a == b
}
return true
})
}
// Copyright 2023 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// Code generated by "util/collate/ucaimpl"; DO NOT EDIT.
// These codes are generated rather than using other polymorphism method (e.g. generics, interfaces, if/else...) to make
// sure every call to the `GetWeight` and `Preprocess` is inlined. The function inlining can affect 20%~50% performance.
package collate
import "unicode/utf8"
// unicode0900AICICollator implements UCA. see http://unicode.org/reports/tr10/
type unicode0900AICICollator struct {
impl unicode0900Impl
}
// Clone implements Collator interface.
func (uc *unicode0900AICICollator) Clone() Collator {
return &unicode0900AICICollator{impl: uc.impl.Clone()}
}
// Compare implements Collator interface.
func (uc *unicode0900AICICollator) Compare(a, b string) int {
a = uc.impl.Preprocess(a)
b = uc.impl.Preprocess(b)
// weight of a, b. weight in unicode_ci may have 8 uint16s. xn indicate first 4 u16s, xs indicate last 4 u16s
an, bn := uint64(0), uint64(0)
as, bs := uint64(0), uint64(0)
// rune of a, b
ar, br := rune(0), rune(0)
// decode index of a, b
ai, bi := 0, 0
arLen, brLen := 0, 0
for {
if an == 0 {
if as == 0 {
for an == 0 && ai < len(a) {
// When the byte sequence is not a valid UTF-8 encoding of a rune, Golang returns RuneError('�') and size 1.
// See https://pkg.go.dev/unicode/utf8#DecodeRune for more details.
// Here we check both the size and rune to distinguish between invalid byte sequence and valid '�'.
ar, arLen = utf8.DecodeRuneInString(a[ai:])
invalid := ar == utf8.RuneError && arLen == 1
if invalid {
return 0
}
ai = ai + arLen
an, as = uc.impl.GetWeight(ar)
}
} else {
an = as
as = 0
}
}
if bn == 0 {
if bs == 0 {
for bn == 0 && bi < len(b) {
// When the byte sequence is not a valid UTF-8 encoding of a rune, Golang returns RuneError('�') and size 1.
// See https://pkg.go.dev/unicode/utf8#DecodeRune for more details.
// Here we check both the size and rune to distinguish between invalid byte sequence and valid '�'.
br, brLen = utf8.DecodeRuneInString(b[bi:])
invalid := br == utf8.RuneError && brLen == 1
if invalid {
return 0
}
bi = bi + brLen
bn, bs = uc.impl.GetWeight(br)
}
} else {
bn = bs
bs = 0
}
}
if an == 0 || bn == 0 {
return sign(int(an) - int(bn))
}
if an == bn {
an, bn = 0, 0
continue
}
for an != 0 && bn != 0 {
if (an^bn)&0xFFFF != 0 {
return sign(int(an&0xFFFF) - int(bn&0xFFFF))
}
an >>= 16
bn >>= 16
}
}
}
// Key implements Collator interface.
func (uc *unicode0900AICICollator) Key(str string) []byte {
return uc.KeyWithoutTrimRightSpace(uc.impl.Preprocess(str))
}
// ImmutableKey implements Collator interface.
func (uc *unicode0900AICICollator) ImmutableKey(str string) []byte {
return uc.KeyWithoutTrimRightSpace(uc.impl.Preprocess(str))
}
// KeyWithoutTrimRightSpace implements Collator interface.
func (uc *unicode0900AICICollator) KeyWithoutTrimRightSpace(str string) []byte {
buf := make([]byte, 0, len(str)*2)
r := rune(0)
si := 0 // decode index of s
sn, ss := uint64(0), uint64(0) // weight of str. weight in unicode_ci may has 8 uint16s. sn indicate first 4 u16s, ss indicate last 4 u16s
rLen := 0
for si < len(str) {
r, rLen = utf8.DecodeRuneInString(str[si:])
invalid := r == utf8.RuneError && rLen == 1
if invalid {
return buf
}
si = si + rLen
sn, ss = uc.impl.GetWeight(r)
for sn != 0 {
buf = append(buf, byte((sn&0xFF00)>>8), byte(sn))
sn >>= 16
}
for ss != 0 {
buf = append(buf, byte((ss&0xFF00)>>8), byte(ss))
ss >>= 16
}
}
return buf
}
// Pattern implements Collator interface.
func (uc *unicode0900AICICollator) Pattern() WildcardPattern {
return uc.impl.Pattern()
}
// MaxKeyLen implements Collator interface.
func (uc *unicode0900AICICollator) MaxKeyLen(s string) int {
return utf8.RuneCountInString(s) * 16
}
// Copyright 2023 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package collate
import (
"github.com/pingcap/tidb/pkg/util/collate/ucadata"
"github.com/pingcap/tidb/pkg/util/stringutil"
)
//go:generate go run ./ucaimpl/main.go -- unicode_0900_ai_ci_generated.go
type unicode0900Impl struct {
}
func (unicode0900Impl) Clone() unicode0900Impl {
return unicode0900Impl{}
}
func (unicode0900Impl) Preprocess(s string) string {
return s
}
func (unicode0900Impl) GetWeight(r rune) (first, second uint64) {
return convertRuneUnicodeCI0900(r)
}
func (unicode0900Impl) Pattern() WildcardPattern {
return &unicode0900AICIPattern{}
}
func convertRuneUnicodeCI0900(r rune) (first, second uint64) {
if int(r) > len(ucadata.DUCET0900Table.MapTable4) {
return uint64(r>>15) + 0xFBC0 + (uint64((r&0x7FFF)|0x8000) << 16), 0
}
first = ucadata.DUCET0900Table.MapTable4[r]
if first == ucadata.LongRune8 {
return ucadata.DUCET0900Table.LongRuneMap[r][0], ucadata.DUCET0900Table.LongRuneMap[r][1]
}
return first, 0
}
type unicode0900AICIPattern struct {
patChars []rune
patTypes []byte
}
// Compile implements WildcardPattern interface.
func (p *unicode0900AICIPattern) Compile(patternStr string, escape byte) {
p.patChars, p.patTypes = stringutil.CompilePatternInner(patternStr, escape)
}
// DoMatch implements WildcardPattern interface.
func (p *unicode0900AICIPattern) DoMatch(str string) bool {
return stringutil.DoMatchCustomized(str, p.patChars, p.patTypes, func(a, b rune) bool {
aFirst, aSecond := convertRuneUnicodeCI0900(a)
bFirst, bSecond := convertRuneUnicodeCI0900(b)
return aFirst == bFirst && aSecond == bSecond
})
}
// Copyright 2024 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package context
import (
"fmt"
"sync/atomic"
)
// ValueStoreContext is a context that can store values.
type ValueStoreContext interface {
// SetValue saves a value associated with this context for key.
SetValue(key fmt.Stringer, value any)
// Value returns the value associated with this context for key.
Value(key fmt.Stringer) any
// ClearValue clears the value associated with this context for key.
ClearValue(key fmt.Stringer)
// GetDomain returns the domain.
GetDomain() any
}
var contextIDGenerator atomic.Uint64
// GenContextID generates a unique context ID.
func GenContextID() uint64 {
return contextIDGenerator.Add(1)
}
// Copyright 2024 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package context
import (
"sync"
"github.com/pingcap/errors"
)
// PlanCacheType is the flag of plan cache
type PlanCacheType int
const (
// DefaultNoCache no cache
DefaultNoCache PlanCacheType = iota
// SessionPrepared session prepared plan cache
SessionPrepared
// SessionNonPrepared session non-prepared plan cache
SessionNonPrepared
)
// PlanCacheTracker PlanCacheTracker `PlanCacheTracker`. `PlanCacheTracker` is thread-safe.
type PlanCacheTracker struct {
mu sync.Mutex
useCache bool
cacheType PlanCacheType
planCacheUnqualified string
forcePlanCache bool // force the optimizer to use plan cache even if there is risky optimization, see #49736.
alwaysWarnSkipCache bool
warnHandler WarnAppender
}
// WarnSkipPlanCache output the reason why this query can't hit the plan cache.
func (h *PlanCacheTracker) WarnSkipPlanCache(reason string) {
h.mu.Lock()
defer h.mu.Unlock()
if h.cacheType == DefaultNoCache {
return
}
h.warnSkipPlanCache(reason)
}
// SetSkipPlanCache sets to skip plan cache.
func (h *PlanCacheTracker) SetSkipPlanCache(reason string) {
h.mu.Lock()
defer h.mu.Unlock()
if !h.useCache {
return
}
if h.forcePlanCache {
h.warnHandler.AppendWarning(errors.NewNoStackErrorf("force plan-cache: may use risky cached plan: %s", reason))
return
}
h.useCache = false
h.warnSkipPlanCache(reason)
}
func (h *PlanCacheTracker) warnSkipPlanCache(reason string) {
h.planCacheUnqualified = reason
switch h.cacheType {
case DefaultNoCache:
h.warnHandler.AppendWarning(errors.NewNoStackError("unknown cache type"))
case SessionPrepared:
h.warnHandler.AppendWarning(errors.NewNoStackErrorf("skip prepared plan-cache: %s", reason))
case SessionNonPrepared:
if h.alwaysWarnSkipCache {
// use "plan_cache" rather than types.ExplainFormatPlanCache to avoid import cycle
h.warnHandler.AppendWarning(errors.NewNoStackErrorf("skip non-prepared plan-cache: %s", reason))
}
}
}
// SetAlwaysWarnSkipCache sets whether to always warn when skip plan cache. By default, for `SessionNonPrepared`, we don't warn
// when skip plan cache. But in some cases, we want to warn even for `SessionNonPrepared`.
func (h *PlanCacheTracker) SetAlwaysWarnSkipCache(alwaysWarnSkipCache bool) {
h.mu.Lock()
defer h.mu.Unlock()
h.alwaysWarnSkipCache = alwaysWarnSkipCache
}
// SetCacheType sets the cache type.
func (h *PlanCacheTracker) SetCacheType(cacheType PlanCacheType) {
h.mu.Lock()
defer h.mu.Unlock()
h.cacheType = cacheType
}
// SetForcePlanCache sets whether to force the optimizer to use plan cache even if there is risky optimization.
func (h *PlanCacheTracker) SetForcePlanCache(forcePlanCache bool) {
h.mu.Lock()
defer h.mu.Unlock()
h.forcePlanCache = forcePlanCache
}
// EnablePlanCache sets to use plan cache.
func (h *PlanCacheTracker) EnablePlanCache() {
h.mu.Lock()
defer h.mu.Unlock()
h.useCache = true
}
// Save captures the mutable planning-time state of the tracker.
func (h *PlanCacheTracker) Save() (useCache bool, cacheType PlanCacheType, planCacheUnqualified string, forcePlanCache bool, alwaysWarnSkipCache bool) {
h.mu.Lock()
defer h.mu.Unlock()
return h.useCache, h.cacheType, h.planCacheUnqualified, h.forcePlanCache, h.alwaysWarnSkipCache
}
// Restore restores the mutable planning-time state of the tracker.
func (h *PlanCacheTracker) Restore(useCache bool, cacheType PlanCacheType, planCacheUnqualified string, forcePlanCache bool, alwaysWarnSkipCache bool) {
h.mu.Lock()
defer h.mu.Unlock()
h.useCache = useCache
h.cacheType = cacheType
h.planCacheUnqualified = planCacheUnqualified
h.forcePlanCache = forcePlanCache
h.alwaysWarnSkipCache = alwaysWarnSkipCache
}
// UseCache returns whether to use plan cache.
func (h *PlanCacheTracker) UseCache() bool {
h.mu.Lock()
defer h.mu.Unlock()
return h.useCache
}
// PlanCacheUnqualified returns the reason of why the plan cache is unqualified
func (h *PlanCacheTracker) PlanCacheUnqualified() string {
h.mu.Lock()
defer h.mu.Unlock()
return h.planCacheUnqualified
}
// NewPlanCacheTracker creates a new PlanCacheTracker.
func NewPlanCacheTracker(warnHandler WarnAppender) PlanCacheTracker {
return PlanCacheTracker{
warnHandler: warnHandler,
}
}
// RangeFallbackHandler is used to handle range fallback.
// If there are too many ranges, it'll fallback and add a warning.
// RangeFallbackHandler is thread-safe.
type RangeFallbackHandler struct {
planCacheTracker *PlanCacheTracker
warnHandler WarnAppender
reportRangeFallbackWarning sync.Once
}
// RecordRangeFallback records the range fallback event.
func (h *RangeFallbackHandler) RecordRangeFallback(rangeMaxSize int64) {
// If range fallback happens, it means ether the query is unreasonable(for example, several long IN lists) or tidb_opt_range_max_size is too small
// and the generated plan is probably suboptimal. In that case we don't put it into plan cache.
h.planCacheTracker.SetSkipPlanCache("in-list is too long")
h.reportRangeFallbackWarning.Do(func() {
h.warnHandler.AppendWarning(errors.NewNoStackErrorf("Memory capacity of %v bytes for 'tidb_opt_range_max_size' exceeded when building ranges. Less accurate ranges such as full range are chosen", rangeMaxSize))
})
}
// NewRangeFallbackHandler creates a new RangeFallbackHandler.
func NewRangeFallbackHandler(planCacheTracker *PlanCacheTracker, warnHandler WarnAppender) RangeFallbackHandler {
return RangeFallbackHandler{
planCacheTracker: planCacheTracker,
warnHandler: warnHandler,
}
}
// Copyright 2023 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package context
import (
"encoding/json"
"math"
"sync"
"github.com/pingcap/errors"
"github.com/pingcap/tidb/pkg/parser/terror"
)
const (
// WarnLevelError represents level "Error" for 'SHOW WARNINGS' syntax.
WarnLevelError = "Error"
// WarnLevelWarning represents level "Warning" for 'SHOW WARNINGS' syntax.
WarnLevelWarning = "Warning"
// WarnLevelNote represents level "Note" for 'SHOW WARNINGS' syntax.
WarnLevelNote = "Note"
)
// SQLWarn relates a sql warning and it's level.
type SQLWarn struct {
Level string
Err error
}
type jsonSQLWarn struct {
Level string `json:"level"`
SQLErr *terror.Error `json:"err,omitempty"`
Msg string `json:"msg,omitempty"`
}
// MarshalJSON implements the Marshaler.MarshalJSON interface.
func (warn *SQLWarn) MarshalJSON() ([]byte, error) {
w := &jsonSQLWarn{
Level: warn.Level,
}
e := errors.Cause(warn.Err)
switch x := e.(type) {
case *terror.Error:
// Omit outter errors because only the most inner error matters.
w.SQLErr = x
default:
w.Msg = e.Error()
}
return json.Marshal(w)
}
// UnmarshalJSON implements the Unmarshaler.UnmarshalJSON interface.
func (warn *SQLWarn) UnmarshalJSON(data []byte) error {
var w jsonSQLWarn
if err := json.Unmarshal(data, &w); err != nil {
return err
}
warn.Level = w.Level
if w.SQLErr != nil {
warn.Err = w.SQLErr
} else {
warn.Err = errors.New(w.Msg)
}
return nil
}
// WarnAppender provides a function to add a warning.
// Using interface rather than a simple function/closure can avoid memory allocation in some cases.
// See https://github.com/pingcap/tidb/issues/49277
type WarnAppender interface {
// AppendWarning appends a warning
AppendWarning(err error)
// AppendNote appends a warning with level 'Note'.
AppendNote(msg error)
}
// WarnHandler provides a handler to append and get warnings.
type WarnHandler interface {
WarnAppender
// WarningCount gets warning count.
WarningCount() int
// TruncateWarnings truncates warnings begin from start and returns the truncated warnings.
//
// Deprecated: This method is deprecated. Because it's unsafe to read the warnings returned by `GetWarnings`
// after truncate and append the warnings.
//
// Currently it's used in two cases and they all have better alternatives:
// 1. Read warnings count, do some operation and truncate warnings to read new warnings. In this case, we
// can use a new temporary WarnHandler to do the operation and get the warnings without touching the
// global `WarnHandler` in the statement context.
// 2. Read warnings count, do some operation and truncate warnings to see whether new warnings are appended.
// In this case, we can use a specially designed `WarnHandler` which doesn't actually record warnings, but
// just counts whether new warnings are appended.
// It's understandable to use `TruncateWarnings` as it's not always easy to assign a new `WarnHandler` to the
// context now.
// TODO: Make it easier to assign a new `WarnHandler` to the context (of `table` and other packages) and remove
// this method.
TruncateWarnings(start int) []SQLWarn
// CopyWarnings copies warnings to another slice.
// The input argument provides target warnings that copy to.
// If the dist capacity is not enough, it will allocate a new slice.
CopyWarnings(dst []SQLWarn) []SQLWarn
}
// WarnHandlerExt includes more methods for WarnHandler. It allows more detailed control over warnings.
// TODO: it's a standalone interface, because it's not necessary for all WarnHandler to implement these methods.
// However, it's still needed for many executors, so we'll see whether it's good to merge it with `WarnAppender`
// and `WarnHandler` in the future.
type WarnHandlerExt interface {
WarnHandler
// AppendWarnings appends multiple warnings
AppendWarnings(warns []SQLWarn)
// AppendNote appends a warning with level 'Note'.
AppendNote(warn error)
// AppendError appends a warning with level 'Error'.
AppendError(warn error)
// GetWarnings gets all warnings. The slice is not copied, so it should not be modified.
GetWarnings() []SQLWarn
// SetWarnings resets all warnings in the handler directly. The handler may ignore the given warnings.
SetWarnings(warns []SQLWarn)
// NumErrorWarnings returns the number of warnings with level 'Error' and the total number of warnings.
NumErrorWarnings() (uint16, int)
}
var _ WarnHandler = &StaticWarnHandler{}
// StaticWarnHandler implements the WarnHandler interface.
type StaticWarnHandler struct {
sync.Mutex
warnings []SQLWarn
}
// NewStaticWarnHandler creates a new StaticWarnHandler.
func NewStaticWarnHandler(sliceCap int) *StaticWarnHandler {
var warnings []SQLWarn
if sliceCap > 0 {
warnings = make([]SQLWarn, 0, sliceCap)
}
return &StaticWarnHandler{warnings: warnings}
}
// NewStaticWarnHandlerWithHandler creates a new StaticWarnHandler with copying the warnings from the given WarnHandler.
func NewStaticWarnHandlerWithHandler(h WarnHandler) *StaticWarnHandler {
if h == nil {
return NewStaticWarnHandler(0)
}
cnt := h.WarningCount()
newHandler := NewStaticWarnHandler(cnt)
if cnt > 0 {
newHandler.warnings = h.CopyWarnings(newHandler.warnings)
}
return newHandler
}
// Reset resets the warnings of this handler.
func (h *StaticWarnHandler) Reset() {
if h.warnings != nil {
h.warnings = h.warnings[:0]
}
}
// AppendWarning implements the StaticWarnHandler.AppendWarning.
func (h *StaticWarnHandler) AppendWarning(warn error) {
h.Lock()
defer h.Unlock()
h.appendWarningWithLevel(WarnLevelWarning, warn)
}
// AppendWarnings appends multiple warnings
func (h *StaticWarnHandler) AppendWarnings(warns []SQLWarn) {
h.Lock()
defer h.Unlock()
if len(h.warnings) < math.MaxUint16 {
h.warnings = append(h.warnings, warns...)
}
}
// AppendNote appends a warning with level 'Note'.
func (h *StaticWarnHandler) AppendNote(warn error) {
h.Lock()
defer h.Unlock()
h.appendWarningWithLevel(WarnLevelNote, warn)
}
// AppendError appends a warning with level 'Error'.
func (h *StaticWarnHandler) AppendError(warn error) {
h.Lock()
defer h.Unlock()
h.appendWarningWithLevel(WarnLevelError, warn)
}
// WarningCount implements the StaticWarnHandler.WarningCount.
func (h *StaticWarnHandler) WarningCount() int {
h.Lock()
defer h.Unlock()
return len(h.warnings)
}
// TruncateWarnings implements the StaticWarnHandler.TruncateWarnings.
func (h *StaticWarnHandler) TruncateWarnings(start int) []SQLWarn {
h.Lock()
defer h.Unlock()
sz := len(h.warnings) - start
if sz <= 0 {
return nil
}
ret := make([]SQLWarn, sz)
copy(ret, h.warnings[start:])
h.warnings = h.warnings[:start]
return ret
}
// CopyWarnings implements the StaticWarnHandler.CopyWarnings.
func (h *StaticWarnHandler) CopyWarnings(dst []SQLWarn) []SQLWarn {
h.Lock()
defer h.Unlock()
if cnt := len(h.warnings); cap(dst) < cnt {
dst = make([]SQLWarn, cnt)
} else {
dst = dst[:cnt]
}
copy(dst, h.warnings)
return dst
}
// GetWarnings returns all warnings in the handler. It's not safe to modify the returned slice.
func (h *StaticWarnHandler) GetWarnings() []SQLWarn {
h.Mutex.Lock()
defer h.Mutex.Unlock()
return h.warnings
}
func (h *StaticWarnHandler) appendWarningWithLevel(level string, warn error) {
if len(h.warnings) < math.MaxUint16 {
h.warnings = append(h.warnings, SQLWarn{level, warn})
}
}
// SetWarnings sets the internal warnings directly.
func (h *StaticWarnHandler) SetWarnings(warns []SQLWarn) {
h.Lock()
defer h.Unlock()
h.warnings = warns
}
// NumErrorWarnings returns the number of warnings with level 'Error' and the total number of warnings.
func (h *StaticWarnHandler) NumErrorWarnings() (uint16, int) {
h.Lock()
defer h.Unlock()
var numError uint16
for _, w := range h.warnings {
if w.Level == WarnLevelError {
numError++
}
}
return numError, len(h.warnings)
}
type ignoreWarn struct{}
func (*ignoreWarn) AppendWarning(_ error) {}
func (*ignoreWarn) AppendNote(_ error) {}
func (*ignoreWarn) WarningCount() int { return 0 }
func (*ignoreWarn) TruncateWarnings(_ int) []SQLWarn { return nil }
func (*ignoreWarn) CopyWarnings(_ []SQLWarn) []SQLWarn { return nil }
// IgnoreWarn is WarnHandler which does nothing
var IgnoreWarn WarnHandler = &ignoreWarn{}
type funcWarnAppender struct {
fn func(level string, err error)
}
func (r *funcWarnAppender) AppendWarning(err error) {
r.fn(WarnLevelWarning, err)
}
func (r *funcWarnAppender) AppendNote(err error) {
r.fn(WarnLevelNote, err)
}
// NewFuncWarnAppenderForTest creates a `WarnHandler` which will use the function to handle warn
// To have a better performance, it's not suggested to use this function in production.
func NewFuncWarnAppenderForTest(fn func(level string, err error)) WarnAppender {
return &funcWarnAppender{fn}
}
// Copyright 2020 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package dbterror
import (
"github.com/pingcap/tidb/pkg/errno"
"github.com/pingcap/tidb/pkg/parser/terror"
)
// ErrClass represents a class of errors.
type ErrClass struct{ terror.ErrClass }
// Error classes.
var (
ClassAutoid = ErrClass{terror.ClassAutoid}
ClassDDL = ErrClass{terror.ClassDDL}
ClassDomain = ErrClass{terror.ClassDomain}
ClassExecutor = ErrClass{terror.ClassExecutor}
ClassExpression = ErrClass{terror.ClassExpression}
ClassAdmin = ErrClass{terror.ClassAdmin}
ClassKV = ErrClass{terror.ClassKV}
ClassMeta = ErrClass{terror.ClassMeta}
ClassOptimizer = ErrClass{terror.ClassOptimizer}
ClassPrivilege = ErrClass{terror.ClassPrivilege}
ClassSchema = ErrClass{terror.ClassSchema}
ClassServer = ErrClass{terror.ClassServer}
ClassStructure = ErrClass{terror.ClassStructure}
ClassVariable = ErrClass{terror.ClassVariable}
ClassXEval = ErrClass{terror.ClassXEval}
ClassTable = ErrClass{terror.ClassTable}
ClassTypes = ErrClass{terror.ClassTypes}
ClassJSON = ErrClass{terror.ClassJSON}
ClassTiKV = ErrClass{terror.ClassTiKV}
ClassSession = ErrClass{terror.ClassSession}
ClassPlugin = ErrClass{terror.ClassPlugin}
ClassUtil = ErrClass{terror.ClassUtil}
)
// NewStd calls New using the standard message for the error code
// Attention:
// this method is not goroutine-safe and
// usually be used in global variable initializer
func (ec ErrClass) NewStd(code terror.ErrCode) *terror.Error {
return ec.NewStdErr(code, errno.MySQLErrName[uint16(code)])
}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package hack
import (
"unsafe"
)
// MutableString can be used as string via string(MutableString) without performance loss.
type MutableString string
// String converts slice to MutableString without copy.
// The MutableString can be converts to string without copy.
// Use it at your own risk.
func String(b []byte) MutableString {
if len(b) == 0 {
return ""
}
return MutableString(unsafe.String(unsafe.SliceData(b), len(b)))
}
// Slice converts string to slice without copy.
// Use at your own risk.
func Slice(s string) []byte {
return unsafe.Slice(unsafe.StringData(s), len(s))
}
func init() {
checkMapABI()
}
// GetBytesFromPtr return a bytes array from the given ptr and length
func GetBytesFromPtr(ptr unsafe.Pointer, length int) []byte {
return unsafe.Slice((*byte)(ptr), length)
}
// Memory usage constants for swiss map
const (
DefBucketMemoryUsageForMapStringToAny = 312
DefBucketMemoryUsageForSetString = 248
DefBucketMemoryUsageForSetFloat64 = 184
DefBucketMemoryUsageForSetInt64 = 184
)
// Copyright 2025 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//go:build go1.25 && !go1.26
package hack
import (
"runtime"
"strings"
"unsafe"
)
// Maximum size of a table before it is split at the directory level.
const maxTableCapacity = 1024
// Number of bits in the group.slot count.
const swissMapGroupSlotsBits = 3
// Number of slots in a group.
const swissMapGroupSlots = 1 << swissMapGroupSlotsBits // 8
// $GOROOT/src/internal/runtime/maps/table.go:`type table struct`
type swissMapTable struct {
// The number of filled slots (i.e. the number of elements in the table).
used uint16
// The total number of slots (always 2^N). Equal to
// `(groups.lengthMask+1)*abi.SwissMapGroupSlots`.
capacity uint16
// The number of slots we can still fill without needing to rehash.
//
// We rehash when used + tombstones > loadFactor*capacity, including
// tombstones so the table doesn't overfill with tombstones. This field
// counts down remaining empty slots before the next rehash.
growthLeft uint16
// The number of bits used by directory lookups above this table. Note
// that this may be less then globalDepth, if the directory has grown
// but this table has not yet been split.
localDepth uint8
// Index of this table in the Map directory. This is the index of the
// _first_ location in the directory. The table may occur in multiple
// sequential indicies.
//
// index is -1 if the table is stale (no longer installed in the
// directory).
index int
// groups is an array of slot groups. Each group holds abi.SwissMapGroupSlots
// key/elem slots and their control bytes. A table has a fixed size
// groups array. The table is replaced (in rehash) when more space is
// required.
//
// TODO(prattmic): keys and elements are interleaved to maximize
// locality, but it comes at the expense of wasted space for some types
// (consider uint8 key, uint64 element). Consider placing all keys
// together in these cases to save space.
groups groupsReference
}
// groupsReference is a wrapper type describing an array of groups stored at
// data.
type groupsReference struct {
// data points to an array of groups. See groupReference above for the
// definition of group.
data unsafe.Pointer // data *[length]typ.Group
// lengthMask is the number of groups in data minus one (note that
// length must be a power of two). This allows computing i%length
// quickly using bitwise AND.
lengthMask uint64
}
// $GOROOT/src/internal/runtime/maps/map.go:`type Map struct`
type swissMap struct {
// The number of filled slots (i.e. the number of elements in all
// tables). Excludes deleted slots.
// Must be first (known by the compiler, for len() builtin).
Used uint64
// seed is the hash seed, computed as a unique random number per map.
seed uintptr
// The directory of tables.
//
// Normally dirPtr points to an array of table pointers
//
// dirPtr *[dirLen]*table
//
// The length (dirLen) of this array is `1 << globalDepth`. Multiple
// entries may point to the same table. See top-level comment for more
// details.
//
// Small map optimization: if the map always contained
// abi.SwissMapGroupSlots or fewer entries, it fits entirely in a
// single group. In that case dirPtr points directly to a single group.
//
// dirPtr *group
//
// In this case, dirLen is 0. used counts the number of used slots in
// the group. Note that small maps never have deleted slots (as there
// is no probe sequence to maintain).
dirPtr unsafe.Pointer
dirLen int
// The number of bits to use in table directory lookups.
globalDepth uint8
// The number of bits to shift out of the hash for directory lookups.
// On 64-bit systems, this is 64 - globalDepth.
globalShift uint8
// writing is a flag that is toggled (XOR 1) while the map is being
// written. Normally it is set to 1 when writing, but if there are
// multiple concurrent writers, then toggling increases the probability
// that both sides will detect the race.
writing uint8
// tombstonePossible is false if we know that no table in this map
// contains a tombstone.
tombstonePossible bool
// clearSeq is a sequence counter of calls to Clear. It is used to
// detect map clears during iteration.
clearSeq uint64
}
func (m *swissMap) directoryAt(i uintptr) *swissMapTable {
return *(**swissMapTable)(unsafe.Pointer(uintptr(m.dirPtr) + uintptr(sizeofPtr)*i))
}
// Size returns the accurate memory size of the swissMap including all its tables.
func (m *swissMap) Size(groupSize uint64) (sz uint64) {
sz += swissMapSize
sz += sizeofPtr * uint64(m.dirLen)
if m.dirLen == 0 {
sz += groupSize
return
}
var lastTab *swissMapTable
for i := range m.dirLen {
t := m.directoryAt(uintptr(i))
if t == lastTab {
continue
}
lastTab = t
sz += swissTableSize
sz += groupSize * (t.groups.lengthMask + 1)
}
return
}
// Cap returns the total capacity of the swissMap.
func (m *swissMap) Cap() uint64 {
if m.dirLen == 0 {
return swissMapGroupSlots
}
var capacity uint64
var lastTab *swissMapTable
for i := range m.dirLen {
t := m.directoryAt(uintptr(i))
if t == lastTab {
continue
}
lastTab = t
capacity += uint64(t.capacity)
}
return capacity
}
// Size returns the accurate memory size
func (m *SwissMapWrap) Size() uint64 {
return m.Data.Size(uint64(m.Type.GroupSize))
}
const (
swissMapSize = uint64(unsafe.Sizeof(swissMap{}))
swissTableSize = uint64(unsafe.Sizeof(swissMapTable{}))
sizeofPtr = uint64(unsafe.Sizeof(uintptr(0)))
)
// TODO: use a more accurate size calculation if necessary
func approxSize(groupSize uint64, maxLen uint64) (size uint64) {
// 204 can fit the `split`/`rehash` behavior of different kinds of swisstable
const ratio = 204
return groupSize * maxLen * ratio / 1000
}
type ctrlGroup uint64
type groupReference struct {
// data points to the group, which is described by typ.Group and has
// layout:
//
// type group struct {
// ctrls ctrlGroup
// slots [abi.SwissMapGroupSlots]slot
// }
//
// type slot struct {
// key typ.Key
// elem typ.Elem
// }
data unsafe.Pointer // data *typ.Group
}
func (g *groupsReference) group(typ *swissMapType, i uint64) groupReference {
// TODO(prattmic): Do something here about truncation on cast to
// uintptr on 32-bit systems?
offset := uintptr(i) * typ.GroupSize
return groupReference{
data: unsafe.Pointer(uintptr(g.data) + offset),
}
}
// $GOROOT/src/internal/abi/type.go:`type Type struct`
type abiType struct {
Size uintptr
PtrBytes uintptr // number of (prefix) bytes in the type that can contain pointers
Hash uint32 // hash of type; avoids computation in hash tables
TFlag uint8 // extra type information flags
Align uint8 // alignment of variable with this type
FieldAlign uint8 // alignment of struct field with this type
Kind uint8 // enumeration for C
// function for comparing objects of this type
// (ptr to object A, ptr to object B) -> ==?
Equal func(unsafe.Pointer, unsafe.Pointer) bool
// GCData stores the GC type data for the garbage collector.
// Normally, GCData points to a bitmask that describes the
// ptr/nonptr fields of the type. The bitmask will have at
// least PtrBytes/ptrSize bits.
// If the TFlagGCMaskOnDemand bit is set, GCData is instead a
// **byte and the pointer to the bitmask is one dereference away.
// The runtime will build the bitmask if needed.
// (See runtime/type.go:getGCMask.)
// Note: multiple types may have the same value of GCData,
// including when TFlagGCMaskOnDemand is set. The types will, of course,
// have the same pointer layout (but not necessarily the same size).
GCData *byte
Str int32 // string form
PtrToThis int32 // type for pointer to this type, may be zero
}
// $GOROOT/src/internal/abi/map_swiss.go:`type SwissMapType struct`
type swissMapType struct {
abiType
Key *abiType
Elem *abiType
Group *abiType // internal type representing a slot group
// function for hashing keys (ptr to key, seed) -> hash
Hasher func(unsafe.Pointer, uintptr) uintptr
GroupSize uintptr // == Group.Size_
SlotSize uintptr // size of key/elem slot
ElemOff uintptr // offset of elem in key/elem slot; aka key size; elem size: SlotSize - ElemOff;
Flags uint32
}
// SwissMapWrap is a wrapper of map to access its internal structure.
type SwissMapWrap struct {
Type *swissMapType
Data *swissMap
}
// ToSwissMap converts a map to SwissMapWrap.
func ToSwissMap[K comparable, V any](m map[K]V) (sm SwissMapWrap) {
ref := any(m)
sm = *(*SwissMapWrap)(unsafe.Pointer(&ref))
return
}
const (
ctrlGroupsSize = unsafe.Sizeof(ctrlGroup(0))
groupSlotsOffset = ctrlGroupsSize
)
func (g *groupReference) cap(typ *swissMapType) uint64 {
_ = g
return groupCap(uint64(typ.GroupSize), uint64(typ.SlotSize))
}
func groupCap(groupSize, slotSize uint64) uint64 {
return (groupSize - uint64(groupSlotsOffset)) / slotSize
}
// key returns a pointer to the key at index i.
func (g *groupReference) key(typ *swissMapType, i uintptr) unsafe.Pointer {
offset := groupSlotsOffset + i*typ.SlotSize
return unsafe.Pointer(uintptr(g.data) + offset)
}
// elem returns a pointer to the element at index i.
func (g *groupReference) elem(typ *swissMapType, i uintptr) unsafe.Pointer {
offset := groupSlotsOffset + i*typ.SlotSize + typ.ElemOff
return unsafe.Pointer(uintptr(g.data) + offset)
}
// MemAwareMap is a map with memory usage tracking.
type MemAwareMap[K comparable, V any] struct {
M map[K]V
groupSize uint64
nextCheckpoint uint64 // every `maxTableCapacity` increase in Used
Bytes uint64
}
const mockSeedForTest = 4992862800126241206
// MockSeedForTest sets the seed of the swissMap for testing.
// It should only be used in tests and should not be called on maps that are already in use, as it may cause issues with map operations.
// The map should be empty before calling this function.
func (m *MemAwareMap[K, V]) MockSeedForTest() {
m.unwrap().MockSeedForTest(mockSeedForTest)
}
// MockSeedForTest sets the seed of the swissMap
func (m *swissMap) MockSeedForTest(seed uint64) (oriSeed uint64) {
if m.Used != 0 {
panic("MockSeedForTest can only be called on empty map")
}
oriSeed = uint64(m.seed)
m.seed = uintptr(seed)
return
}
// Count returns the number of elements in the map.
func (m *MemAwareMap[K, V]) Count() int {
return len(m.M)
}
// Empty returns true if the map is empty.
func (m *MemAwareMap[K, V]) Empty() bool {
return len(m.M) == 0
}
// Exist returns true if the key exists in the map.
func (m *MemAwareMap[K, V]) Exist(val K) bool {
_, ok := m.M[val]
return ok
}
func (m *MemAwareMap[K, V]) unwrap() *swissMap {
return *(**swissMap)(unsafe.Pointer(&m.M))
}
// Set sets the value for the key in the map and returns the memory delta.
func (m *MemAwareMap[K, V]) Set(key K, value V) (deltaBytes int64) {
sm := m.unwrap()
m.M[key] = value
if sm.Used >= m.nextCheckpoint {
newBytes := max(m.Bytes, approxSize(m.groupSize, sm.Used))
deltaBytes = int64(newBytes) - int64(m.Bytes)
m.Bytes = newBytes
m.nextCheckpoint = min(sm.Used, maxTableCapacity) + sm.Used
}
return
}
// SetExt sets the value for the key in the map and returns the memory delta and whether it's an insert.
func (m *MemAwareMap[K, V]) SetExt(key K, value V) (deltaBytes int64, insert bool) {
sm := m.unwrap()
oriUsed := sm.Used
deltaBytes = m.Set(key, value)
insert = oriUsed != sm.Used
return
}
// Init initializes the MemAwareMap with the given map and returns the initial memory size.
// The input map should NOT be nil.
func (m *MemAwareMap[K, V]) Init(v map[K]V) int64 {
if v == nil {
panic("MemAwareMap.Init: input map should NOT be nil")
}
m.M = v
sm := m.unwrap()
m.groupSize = uint64(ToSwissMap(m.M).Type.GroupSize)
m.Bytes = sm.Size(m.groupSize)
if sm.Used <= swissMapGroupSlots {
m.nextCheckpoint = swissMapGroupSlots * 2
} else {
m.nextCheckpoint = min(sm.Used, maxTableCapacity) + sm.Used
}
return int64(m.Bytes)
}
// NewMemAwareMap creates a new MemAwareMap with the given initial capacity.
func NewMemAwareMap[K comparable, V any](capacity int) *MemAwareMap[K, V] {
m := new(MemAwareMap[K, V])
m.Init(make(map[K]V, capacity))
return m
}
// RealBytes returns the real memory size of the map.
// Compute the real size is expensive, so do not call it frequently.
// Make sure the `seed` is same when testing the memory size.
func (m *MemAwareMap[K, V]) RealBytes() uint64 {
return m.unwrap().Size(m.groupSize)
}
func checkMapABI() {
if !strings.Contains(runtime.Version(), `go1.25`) {
panic("The hack package only supports go1.25, please confirm the correctness of the ABI before upgrading")
}
}
// Get the value of the key.
func (m *MemAwareMap[K, V]) Get(k K) (v V, ok bool) {
v, ok = m.M[k]
return
}
// Len returns the number of elements in the map.
func (m *MemAwareMap[K, V]) Len() int {
return len(m.M)
}
// Copyright 2025 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package intest
import (
"fmt"
"reflect"
"github.com/pingcap/failpoint"
)
// EnableInternalCheck is a general switch to enable internal check.
var EnableInternalCheck = false
// Assert asserts a condition is true
func doAssert(cond bool, msgAndArgs ...any) {
if !cond {
doPanic("", msgAndArgs...)
}
}
// AssertNoError asserts an error is nil
func doAssertNoError(err error, msgAndArgs ...any) {
if err != nil {
doPanic(fmt.Sprintf("error is not nil: %+v", err), msgAndArgs...)
}
}
// AssertNotNil asserts an object is not nil
func doAssertNotNil(obj any, msgAndArgs ...any) {
doAssert(obj != nil, msgAndArgs...)
value := reflect.ValueOf(obj)
switch value.Kind() {
case reflect.Func, reflect.Chan, reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice, reflect.UnsafePointer:
doAssert(!value.IsNil(), msgAndArgs...)
}
}
// AssertFunc asserts a function condition
func doAssertFunc(fn func() bool, msgAndArgs ...any) {
doAssert(fn != nil, msgAndArgs...)
doAssert(fn(), msgAndArgs...)
}
func doPanic(extraMsg string, userMsgAndArgs ...any) {
panic(assertionFailedMsg(extraMsg, userMsgAndArgs...))
}
func assertionFailedMsg(extraMsg string, userMsgAndArgs ...any) string {
msg := "assert failed"
if len(userMsgAndArgs) == 0 {
if extraMsg != "" {
msg = fmt.Sprintf("%s, %s", msg, extraMsg)
}
return msg
}
if len(userMsgAndArgs) == 0 {
return fmt.Sprintf("assert failed, %s", extraMsg)
}
userMsg, ok := userMsgAndArgs[0].(string)
if !ok {
userMsg = fmt.Sprintf("%+v", userMsgAndArgs[0])
}
msg = fmt.Sprintf("%s, %s", msg, userMsg)
if extraMsg != "" {
msg = fmt.Sprintf("%s, %s", msg, extraMsg)
}
return fmt.Sprintf(msg, userMsgAndArgs[1:]...)
}
func init() {
if InTest || EnableAssert {
EnableInternalCheck = true
}
// Use `export GO_FAILPOINTS="/enableInternalCheck=return(true)"` to enable internal check.
// The path is "/" instead of "pingcap/tidb/pkg/intest/enableInternalCheck" because of the init().
failpoint.Inject("enableInternalCheck", func(val failpoint.Value) {
if val.(bool) {
EnableInternalCheck = true
EnableAssert = true
}
})
}
// Copyright 2023 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//go:build !intest && !enableassert
package intest
// EnableAssert checks if the code is running in integration test.
var EnableAssert = false
// Assert asserts a condition is true
func Assert(cond bool, msgAndArgs ...any) {
if EnableInternalCheck {
doAssert(cond, msgAndArgs...)
}
}
// AssertNoError asserts an error is nil
func AssertNoError(err error, msgAndArgs ...any) {
if EnableInternalCheck {
doAssertNoError(err, msgAndArgs...)
}
}
// AssertNotNil asserts an object is not nil
func AssertNotNil(obj any, msgAndArgs ...any) {
if EnableInternalCheck {
doAssertNotNil(obj, msgAndArgs...)
}
}
// AssertFunc asserts a function condition
func AssertFunc(fn func() bool, msgAndArgs ...any) {
if EnableInternalCheck {
doAssertFunc(fn, msgAndArgs...)
}
}
// Copyright 2017 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package kvcache
import (
"container/list"
"github.com/pingcap/errors"
"github.com/pingcap/tidb/pkg/util/memory"
)
// Key is the interface that every key in LRU Cache should implement.
type Key interface {
Hash() []byte
}
// Value is the interface that every value in LRU Cache should implement.
type Value any
// cacheEntry wraps Key and Value. It's the value of list.Element.
type cacheEntry struct {
key Key
value Value
}
var (
// GlobalLRUMemUsageTracker tracks all the memory usage of SimpleLRUCache
GlobalLRUMemUsageTracker *memory.Tracker
)
const (
// ProfileName is the function name in heap profile
ProfileName = "github.com/pingcap/tidb/pkg/util/kvcache.(*SimpleLRUCache).Put"
)
func init() {
GlobalLRUMemUsageTracker = memory.NewTracker(memory.LabelForGlobalSimpleLRUCache, -1)
}
// SimpleLRUCache is a simple least recently used cache, not thread-safe, use it carefully.
type SimpleLRUCache struct {
elements map[string]*list.Element
// onEvict function will be called if any eviction happened
onEvict func(Key, Value)
cache *list.List
capacity uint
size uint
// 0 indicates no quota
quota uint64
guard float64
}
// NewSimpleLRUCache creates a SimpleLRUCache object, whose capacity is "capacity".
// NOTE: "capacity" should be a positive value.
func NewSimpleLRUCache(capacity uint, guard float64, quota uint64) *SimpleLRUCache {
if capacity < 1 {
panic("capacity of LRU Cache should be at least 1.")
}
return &SimpleLRUCache{
capacity: capacity,
size: 0,
quota: quota,
guard: guard,
elements: make(map[string]*list.Element),
onEvict: nil,
cache: list.New(),
}
}
// SetOnEvict set the function called on each eviction.
func (l *SimpleLRUCache) SetOnEvict(onEvict func(Key, Value)) {
l.onEvict = onEvict
}
// Get tries to find the corresponding value according to the given key.
func (l *SimpleLRUCache) Get(key Key) (value Value, ok bool) {
element, exists := l.elements[string(key.Hash())]
if !exists {
return nil, false
}
l.cache.MoveToFront(element)
return element.Value.(*cacheEntry).value, true
}
// Put puts the (key, value) pair into the LRU Cache.
func (l *SimpleLRUCache) Put(key Key, value Value) {
hash := string(key.Hash())
element, exists := l.elements[hash]
if exists {
element.Value.(*cacheEntry).value = value
l.cache.MoveToFront(element)
return
}
newCacheEntry := &cacheEntry{
key: key,
value: value,
}
element = l.cache.PushFront(newCacheEntry)
l.elements[hash] = element
l.size++
// Getting used memory is expensive and can be avoided by setting quota to 0.
if l.quota == 0 {
if l.size > l.capacity {
lru := l.cache.Back()
l.cache.Remove(lru)
if l.onEvict != nil {
l.onEvict(lru.Value.(*cacheEntry).key, lru.Value.(*cacheEntry).value)
}
delete(l.elements, string(lru.Value.(*cacheEntry).key.Hash()))
l.size--
}
return
}
memUsed, err := memory.InstanceMemUsed()
if err != nil {
l.DeleteAll()
return
}
for memUsed > uint64(float64(l.quota)*(1.0-l.guard)) || l.size > l.capacity {
lru := l.cache.Back()
if lru == nil {
break
}
if l.onEvict != nil {
l.onEvict(lru.Value.(*cacheEntry).key, lru.Value.(*cacheEntry).value)
}
l.cache.Remove(lru)
delete(l.elements, string(lru.Value.(*cacheEntry).key.Hash()))
l.size--
if memUsed > uint64(float64(l.quota)*(1.0-l.guard)) {
memUsed, err = memory.InstanceMemUsed()
if err != nil {
l.DeleteAll()
return
}
}
}
}
// Delete deletes the key-value pair from the LRU Cache.
func (l *SimpleLRUCache) Delete(key Key) {
k := string(key.Hash())
element := l.elements[k]
if element == nil {
return
}
l.cache.Remove(element)
delete(l.elements, k)
l.size--
}
// DeleteAll deletes all elements from the LRU Cache.
func (l *SimpleLRUCache) DeleteAll() {
for lru := l.cache.Back(); lru != nil; lru = l.cache.Back() {
l.cache.Remove(lru)
delete(l.elements, string(lru.Value.(*cacheEntry).key.Hash()))
l.size--
}
}
// Size gets the current cache size.
func (l *SimpleLRUCache) Size() int {
return int(l.size)
}
// Values return all values in cache.
func (l *SimpleLRUCache) Values() []Value {
values := make([]Value, 0, l.cache.Len())
for ele := l.cache.Front(); ele != nil; ele = ele.Next() {
value := ele.Value.(*cacheEntry).value
values = append(values, value)
}
return values
}
// Keys return all keys in cache.
func (l *SimpleLRUCache) Keys() []Key {
keys := make([]Key, 0, l.cache.Len())
for ele := l.cache.Front(); ele != nil; ele = ele.Next() {
key := ele.Value.(*cacheEntry).key
keys = append(keys, key)
}
return keys
}
// SetCapacity sets capacity of the cache.
func (l *SimpleLRUCache) SetCapacity(capacity uint) error {
if capacity < 1 {
return errors.New("capacity of lru cache should be at least 1")
}
l.capacity = capacity
for l.size > l.capacity {
lru := l.cache.Back()
l.cache.Remove(lru)
delete(l.elements, string(lru.Value.(*cacheEntry).key.Hash()))
l.size--
}
return nil
}
// RemoveOldest removes the oldest element from the cache.
func (l *SimpleLRUCache) RemoveOldest() (key Key, value Value, ok bool) {
if l.size > 0 {
ele := l.cache.Back()
l.cache.Remove(ele)
delete(l.elements, string(ele.Value.(*cacheEntry).key.Hash()))
l.size--
return ele.Value.(*cacheEntry).key, ele.Value.(*cacheEntry).value, true
}
return nil, nil, false
}
// Copyright 2024 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package logutil
import (
"github.com/pingcap/errors"
"github.com/pingcap/log"
"go.uber.org/zap"
)
func newGeneralLogger(cfg *LogConfig) (*zap.Logger, *log.ZapProperties, error) {
// create the general logger
sqLogger, prop, err := log.InitLogger(newGeneralLogConfig(cfg))
if err != nil {
return nil, nil, errors.Trace(err)
}
return sqLogger, prop, nil
}
func newGeneralLogConfig(cfg *LogConfig) *log.Config {
// copy the global log config to general log config
// if the filename of general log config is empty, general log will behave the same as global log.
sqConfig := cfg.Config
// level of the global log config doesn't affect the general logger which determines whether to
// log by execution duration.
sqConfig.Level = LogConfig{}.Level
if len(cfg.GeneralLogFile) != 0 {
sqConfig.File = cfg.File
sqConfig.File.Filename = cfg.GeneralLogFile
}
return &sqConfig
}
// Copyright 2019 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package logutil
import (
"bytes"
"encoding/hex"
"fmt"
"io"
"reflect"
"strings"
"github.com/golang/protobuf/proto"
)
// Hex defines a fmt.Stringer for proto.Message.
// We can't define the String() method on proto.Message, but we can wrap it.
func Hex(msg proto.Message) fmt.Stringer {
return hexStringer{msg}
}
type hexStringer struct {
proto.Message
}
func (h hexStringer) String() string {
val := reflect.ValueOf(h.Message)
var w bytes.Buffer
prettyPrint(&w, val)
return w.String()
}
func prettyPrint(w io.Writer, val reflect.Value) {
tp := val.Type()
switch val.Kind() {
case reflect.Slice:
elemType := tp.Elem()
if elemType.Kind() == reflect.Uint8 {
fmt.Fprintf(w, "%s", hex.EncodeToString(val.Bytes()))
} else {
fmt.Fprintf(w, "%s", val.Interface())
}
case reflect.Struct:
fmt.Fprintf(w, "{")
for i := range val.NumField() {
fv := val.Field(i)
ft := tp.Field(i)
if strings.HasPrefix(ft.Name, "XXX") {
continue
}
if i != 0 {
fmt.Fprintf(w, " ")
}
fmt.Fprintf(w, "%s:", ft.Name)
prettyPrint(w, fv)
}
fmt.Fprintf(w, "}")
case reflect.Ptr:
if val.IsNil() {
fmt.Fprintf(w, "%v", val.Interface())
} else {
prettyPrint(w, reflect.Indirect(val))
}
default:
fmt.Fprintf(w, "%v", val.Interface())
}
}
// Copyright 2017 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package logutil
import (
"context"
"encoding/json"
"fmt"
"os"
"runtime/trace"
"sync"
"time"
gzap "github.com/grpc-ecosystem/go-grpc-middleware/logging/zap"
"github.com/opentracing/opentracing-go"
tlog "github.com/opentracing/opentracing-go/log"
"github.com/pingcap/errors"
"github.com/pingcap/log"
"github.com/pingcap/tidb/pkg/util/tracing"
"github.com/tikv/client-go/v2/tikv"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"golang.org/x/net/http/httpproxy"
)
const (
// DefaultLogMaxSize is the default size of log files.
DefaultLogMaxSize = 300 // MB
// DefaultLogFormat is the default format of the log.
DefaultLogFormat = "text"
// DefaultSlowThreshold is the default slow log threshold in millisecond.
DefaultSlowThreshold = 300
// DefaultSlowTxnThreshold is the default slow txn log threshold in ms.
DefaultSlowTxnThreshold = 0
// DefaultQueryLogMaxLen is the default max length of the query in the log.
DefaultQueryLogMaxLen = 4096
// DefaultRecordPlanInSlowLog is the default value for whether enable log query plan in the slow log.
DefaultRecordPlanInSlowLog = 1
// DefaultTiDBEnableSlowLog enables TiDB to log slow queries.
DefaultTiDBEnableSlowLog = true
)
const (
// LogFieldCategory is the field name for log category
LogFieldCategory = "category"
// LogFieldConn is the field name for connection id in log
LogFieldConn = "conn"
// LogFieldSessionAlias is the field name for session_alias in log
LogFieldSessionAlias = "session_alias"
// jsonLogFormat is the json format of the log.
jsonLogFormat = "json"
)
// EmptyFileLogConfig is an empty FileLogConfig.
var EmptyFileLogConfig = FileLogConfig{}
// FileLogConfig serializes file log related config in toml/json.
type FileLogConfig struct {
log.FileLogConfig
}
// NewFileLogConfig creates a FileLogConfig.
func NewFileLogConfig(maxSize uint) FileLogConfig {
return FileLogConfig{FileLogConfig: log.FileLogConfig{
MaxSize: int(maxSize),
},
}
}
// LogConfig serializes log related config in toml/json.
type LogConfig struct {
log.Config
// SlowQueryFile filename, default to File log config on empty.
SlowQueryFile string
// GeneralLogFile filenanme, default to File log config on empty.
GeneralLogFile string
}
// NewLogConfig creates a LogConfig.
func NewLogConfig(level, format, slowQueryFile string, generalLogFile string, fileCfg FileLogConfig, disableTimestamp bool, opts ...func(*log.Config)) *LogConfig {
c := &LogConfig{
Config: log.Config{
Level: level,
Format: format,
DisableTimestamp: disableTimestamp,
File: fileCfg.FileLogConfig,
},
SlowQueryFile: slowQueryFile,
GeneralLogFile: generalLogFile,
}
for _, opt := range opts {
opt(&c.Config)
}
return c
}
const (
// SlowLogTimeFormat is the time format for slow log.
SlowLogTimeFormat = time.RFC3339Nano
// OldSlowLogTimeFormat is the first version of the the time format for slow log, This is use for compatibility.
OldSlowLogTimeFormat = "2006-01-02-15:04:05.999999999 -0700"
// GRPCDebugEnvName is the environment variable name for GRPC_DEBUG.
GRPCDebugEnvName = "GRPC_DEBUG"
)
// SlowQueryLogger is used to log slow query, InitLogger will modify it according to config file.
var SlowQueryLogger = log.L()
// GeneralLogger is used to log general log, InitLogger will modify it according to config file.
var GeneralLogger = log.L()
// this logger will always output error verbose regardless of the log config.
var errVerboseLogger = log.L()
// InitLogger initializes a logger with cfg.
func InitLogger(cfg *LogConfig, opts ...zap.Option) error {
opts = append(opts, zap.AddStacktrace(zapcore.FatalLevel))
gl, props, err := log.InitLogger(&cfg.Config, opts...)
if err != nil {
return errors.Trace(err)
}
log.ReplaceGlobals(gl, props)
// pingcap/log doesn't support DisableErrorVerbose for json format log.
if cfg.Config.Format == jsonLogFormat || !cfg.Config.DisableErrorVerbose {
errVerboseLogger = gl
} else {
newLogCfg := cfg.Config
newLogCfg.DisableErrorVerbose = false
logger, _, err := log.InitLoggerWithWriteSyncer(&newLogCfg, props.Syncer, props.ErrSyncer, opts...)
if err != nil {
return errors.Trace(err)
}
errVerboseLogger = logger
}
// init dedicated logger for slow query log,
// we should use same writeSyncer when filenames are equal.
if cfg.SlowQueryFile != "" && cfg.SlowQueryFile != cfg.File.Filename {
SlowQueryLogger, _, err = newSlowQueryLogger(cfg)
if err != nil {
return errors.Trace(err)
}
} else {
SlowQueryLogger = newSlowQueryLoggerFromZapLogger(gl, props)
}
// init dedicated logger for general log,
// we should use same writeSyncer when filenames are equal.
if cfg.GeneralLogFile != "" && cfg.GeneralLogFile != cfg.File.Filename {
GeneralLogger, _, err = newGeneralLogger(cfg)
if err != nil {
return errors.Trace(err)
}
} else {
GeneralLogger = gl
}
initGRPCLogger(gl)
tikv.SetLogContextKey(CtxLogKey)
return nil
}
func initGRPCLogger(gl *zap.Logger) {
level := zapcore.ErrorLevel
verbosity := 0
if len(os.Getenv(GRPCDebugEnvName)) > 0 {
verbosity = 999
level = zapcore.DebugLevel
}
newgl := gl.WithOptions(zap.WrapCore(func(core zapcore.Core) zapcore.Core {
oldcore, ok := core.(*log.TextIOCore)
if !ok {
return oldcore
}
newcore := oldcore.Clone()
leveler := zap.NewAtomicLevel()
leveler.SetLevel(level)
newcore.LevelEnabler = leveler
return newcore
}))
gzap.ReplaceGrpcLoggerV2WithVerbosity(newgl, verbosity)
}
// ReplaceLogger replace global logger instance with given log config.
func ReplaceLogger(cfg *LogConfig, opts ...zap.Option) error {
opts = append(opts, zap.AddStacktrace(zapcore.FatalLevel))
gl, props, err := log.InitLogger(&cfg.Config, opts...)
if err != nil {
return errors.Trace(err)
}
log.ReplaceGlobals(gl, props)
cfgJSON, err := json.Marshal(&cfg.Config)
if err != nil {
return errors.Trace(err)
}
SlowQueryLogger, _, err = newSlowQueryLogger(cfg)
if err != nil {
return errors.Trace(err)
}
GeneralLogger, _, err = newGeneralLogger(cfg)
if err != nil {
return errors.Trace(err)
}
log.S().Infof("replaced global logger with config: %s", string(cfgJSON))
return nil
}
// SetLevel sets the zap logger's level.
func SetLevel(level string) error {
l := zap.NewAtomicLevel()
if err := l.UnmarshalText([]byte(level)); err != nil {
return errors.Trace(err)
}
log.SetLevel(l.Level())
return nil
}
type ctxLogKeyType struct{}
// CtxLogKey indicates the context key for logger
// public for test usage.
var CtxLogKey = ctxLogKeyType{}
// Logger gets a contextual logger from current context.
// contextual logger will output common fields from context.
func Logger(ctx context.Context) *zap.Logger {
if ctxlogger, ok := ctx.Value(CtxLogKey).(*zap.Logger); ok {
return ctxlogger
}
return log.L()
}
// BgLogger is alias of `logutil.BgLogger()`. It's initialized in tidb-server's
// main function. Don't use it in `init` or equivalent functions otherwise it
// will print to stdout.
func BgLogger() *zap.Logger {
return log.L().With()
}
// ErrVerboseLogger returns a logger that always output error verbose regardless
// of the log config.
// error verbose is disabled on default, but without stack it's harder to investigate
// some issues, such as in DXF the error mostly happen in business logic, the
// error stack is very deep, we want to log the stack to help us investigate.
// Note: if stack is not that needed to investigate, use normal logger instead.
func ErrVerboseLogger() *zap.Logger {
return errVerboseLogger
}
// LoggerWithTraceInfo attaches fields from trace info to logger
func LoggerWithTraceInfo(logger *zap.Logger, info *tracing.TraceInfo) *zap.Logger {
if logger == nil {
logger = log.L()
}
if fields := fieldsFromTraceInfo(info); len(fields) > 0 {
logger = logger.With(fields...)
}
return logger
}
// WithConnID attaches connId to context.
func WithConnID(ctx context.Context, connID uint64) context.Context {
return WithFields(ctx, zap.Uint64(LogFieldConn, connID))
}
// WithSessionAlias attaches session_alias to context
func WithSessionAlias(ctx context.Context, alias string) context.Context {
return WithFields(ctx, zap.String(LogFieldSessionAlias, alias))
}
// WithCategory attaches category to context.
func WithCategory(ctx context.Context, category string) context.Context {
return WithFields(ctx, zap.String(LogFieldCategory, category))
}
// WithTraceFields attaches trace fields to context
func WithTraceFields(ctx context.Context, info *tracing.TraceInfo) context.Context {
if info == nil {
return WithFields(ctx)
}
return WithFields(ctx,
zap.Uint64(LogFieldConn, info.ConnectionID),
zap.String(LogFieldSessionAlias, info.SessionAlias),
)
}
func fieldsFromTraceInfo(info *tracing.TraceInfo) []zap.Field {
if info == nil {
return nil
}
fields := make([]zap.Field, 0, 2)
if info.ConnectionID != 0 {
fields = append(fields, zap.Uint64(LogFieldConn, info.ConnectionID))
}
if info.SessionAlias != "" {
fields = append(fields, zap.String(LogFieldSessionAlias, info.SessionAlias))
}
return fields
}
// WithTraceLogger attaches trace identifier to context
func WithTraceLogger(ctx context.Context, info *tracing.TraceInfo) context.Context {
var logger *zap.Logger
if ctxLogger, ok := ctx.Value(CtxLogKey).(*zap.Logger); ok {
logger = ctxLogger
} else {
logger = log.L()
}
return context.WithValue(ctx, CtxLogKey, wrapTraceLogger(ctx, info, logger))
}
func wrapTraceLogger(ctx context.Context, info *tracing.TraceInfo, logger *zap.Logger) *zap.Logger {
return logger.WithOptions(zap.WrapCore(func(core zapcore.Core) zapcore.Core {
tl := &traceLog{ctx: ctx}
// cfg.Format == "", never return error
enc, _ := log.NewTextEncoder(&log.Config{})
traceCore := log.NewTextCore(enc, tl, tl)
if fields := fieldsFromTraceInfo(info); len(fields) > 0 {
traceCore = traceCore.With(fields)
}
return zapcore.NewTee(traceCore, core)
}))
}
type traceLog struct {
ctx context.Context
}
func (*traceLog) Enabled(_ zapcore.Level) bool {
return true
}
func (t *traceLog) Write(p []byte) (n int, err error) {
trace.Log(t.ctx, "log", string(p))
return len(p), nil
}
func (*traceLog) Sync() error {
return nil
}
// WithKeyValue attaches key/value to context.
func WithKeyValue(ctx context.Context, key, value string) context.Context {
return WithFields(ctx, zap.String(key, value))
}
// WithFields attaches key/value to context.
func WithFields(ctx context.Context, fields ...zap.Field) context.Context {
var logger *zap.Logger
if ctxLogger, ok := ctx.Value(CtxLogKey).(*zap.Logger); ok {
logger = ctxLogger
} else {
logger = log.L()
}
if len(fields) > 0 {
logger = logger.With(fields...)
}
return context.WithValue(ctx, CtxLogKey, logger)
}
// WithLogger attaches a logger to context.
func WithLogger(ctx context.Context, logger *zap.Logger) context.Context {
if logger == nil {
logger = log.L()
}
return context.WithValue(ctx, CtxLogKey, logger)
}
// TraceEventKey presents the TraceEventKey in span log.
const TraceEventKey = "event"
// Event records event in current tracing span.
func Event(ctx context.Context, event string) {
if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil {
span.LogFields(tlog.String(TraceEventKey, event))
}
}
// Eventf records event in current tracing span with format support.
func Eventf(ctx context.Context, format string, args ...any) {
if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil {
span.LogFields(tlog.String(TraceEventKey, fmt.Sprintf(format, args...)))
}
}
// SetTag sets tag kv-pair in current tracing span
func SetTag(ctx context.Context, key string, value any) {
if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil {
span.SetTag(key, value)
}
}
// LogEnvVariables logs related environment variables.
func LogEnvVariables() {
// log http proxy settings, it will be used in gRPC connection by default
fields := proxyFields()
if len(fields) > 0 {
log.Info("using proxy config", fields...)
}
}
func proxyFields() []zap.Field {
proxyCfg := httpproxy.FromEnvironment()
fields := make([]zap.Field, 0, 3)
if proxyCfg.HTTPProxy != "" {
fields = append(fields, zap.String("http_proxy", proxyCfg.HTTPProxy))
}
if proxyCfg.HTTPSProxy != "" {
fields = append(fields, zap.String("https_proxy", proxyCfg.HTTPSProxy))
}
if proxyCfg.NoProxy != "" {
fields = append(fields, zap.String("no_proxy", proxyCfg.NoProxy))
}
return fields
}
// SampleLoggerFactory returns a factory function that creates a sample logger.
// the logger is used to sample the log to avoid too many logs, it will only log
// the first 'first' log entries with the same level and message in 'tick' time.
// NOTE: Because we need to record the log count with the same level and message
// in this specific logger, the returned factory function will only create one logger.
// this logger support at most 4096 types of logs with the same level and message.
func SampleLoggerFactory(tick time.Duration, first int, fields ...zap.Field) func() *zap.Logger {
var (
once sync.Once
logger *zap.Logger
)
return func() *zap.Logger {
once.Do(func() {
sampleCore := zap.WrapCore(func(core zapcore.Core) zapcore.Core {
return zapcore.NewSamplerWithOptions(core, tick, first, 0)
})
logger = BgLogger().With(fields...).With(zap.String("sampled", "")).WithOptions(sampleCore)
})
return logger
}
}
// SampleErrVerboseLoggerFactory returns a factory function that creates a sample logger with error verbose logging.
// It works similarly to SampleLoggerFactory but ensures that error details are always logged,
// regardless of the logging configuration.
func SampleErrVerboseLoggerFactory(tick time.Duration, first int, fields ...zap.Field) func() *zap.Logger {
var (
once sync.Once
logger *zap.Logger
)
return func() *zap.Logger {
once.Do(func() {
sampleCore := zap.WrapCore(func(core zapcore.Core) zapcore.Core {
return zapcore.NewSamplerWithOptions(core, tick, first, 0)
})
logger = ErrVerboseLogger().With(fields...).With(zap.String("sampled", "")).WithOptions(sampleCore)
})
return logger
}
}
// Copyright 2021 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package logutil
import (
"fmt"
"time"
"github.com/pingcap/errors"
"github.com/pingcap/log"
"go.uber.org/zap"
"go.uber.org/zap/buffer"
"go.uber.org/zap/zapcore"
)
var _pool = buffer.NewPool()
func newSlowQueryLogger(cfg *LogConfig) (*zap.Logger, *log.ZapProperties, error) {
// create the slow query logger
sqLogger, prop, err := log.InitLogger(newSlowQueryLogConfig(cfg))
if err != nil {
return nil, nil, errors.Trace(err)
}
// replace 2018-12-19-unified-log-format text encoder with slow log encoder
newCore := log.NewTextCore(&slowLogEncoder{}, prop.Syncer, prop.Level)
sqLogger = sqLogger.WithOptions(zap.WrapCore(func(zapcore.Core) zapcore.Core {
return newCore
}))
prop.Core = newCore
return sqLogger, prop, nil
}
func newSlowQueryLoggerFromZapLogger(l *zap.Logger, p *log.ZapProperties) *zap.Logger {
newCore := log.NewTextCore(&slowLogEncoder{}, p.Syncer, p.Level)
sqLogger := l.WithOptions(zap.WrapCore(func(zapcore.Core) zapcore.Core {
return newCore
}))
return sqLogger
}
func newSlowQueryLogConfig(cfg *LogConfig) *log.Config {
// copy the global log config to slow log config
// if the filename of slow log config is empty, slow log will behave the same as global log.
sqConfig := cfg.Config
// level of the global log config doesn't affect the slow query logger which determines whether to
// log by execution duration.
sqConfig.Level = LogConfig{}.Level
if len(cfg.SlowQueryFile) != 0 {
sqConfig.File = cfg.File
sqConfig.File.Filename = cfg.SlowQueryFile
}
return &sqConfig
}
type slowLogEncoder struct{}
func (*slowLogEncoder) EncodeEntry(entry zapcore.Entry, _ []zapcore.Field) (*buffer.Buffer, error) {
b := _pool.Get()
fmt.Fprintf(b, "# Time: %s\n", entry.Time.Format(SlowLogTimeFormat))
fmt.Fprintf(b, "%s\n", entry.Message)
return b, nil
}
func (e *slowLogEncoder) Clone() zapcore.Encoder { return e }
func (*slowLogEncoder) AddArray(string, zapcore.ArrayMarshaler) error { return nil }
func (*slowLogEncoder) AddObject(string, zapcore.ObjectMarshaler) error { return nil }
func (*slowLogEncoder) AddBinary(string, []byte) {}
func (*slowLogEncoder) AddByteString(string, []byte) {}
func (*slowLogEncoder) AddBool(string, bool) {}
func (*slowLogEncoder) AddComplex128(string, complex128) {}
func (*slowLogEncoder) AddComplex64(string, complex64) {}
func (*slowLogEncoder) AddDuration(string, time.Duration) {}
func (*slowLogEncoder) AddFloat64(string, float64) {}
func (*slowLogEncoder) AddFloat32(string, float32) {}
func (*slowLogEncoder) AddInt(string, int) {}
func (*slowLogEncoder) AddInt64(string, int64) {}
func (*slowLogEncoder) AddInt32(string, int32) {}
func (*slowLogEncoder) AddInt16(string, int16) {}
func (*slowLogEncoder) AddInt8(string, int8) {}
func (*slowLogEncoder) AddString(string, string) {}
func (*slowLogEncoder) AddTime(string, time.Time) {}
func (*slowLogEncoder) AddUint(string, uint) {}
func (*slowLogEncoder) AddUint64(string, uint64) {}
func (*slowLogEncoder) AddUint32(string, uint32) {}
func (*slowLogEncoder) AddUint16(string, uint16) {}
func (*slowLogEncoder) AddUint8(string, uint8) {}
func (*slowLogEncoder) AddUintptr(string, uintptr) {}
func (*slowLogEncoder) AddReflected(string, any) error { return nil }
func (*slowLogEncoder) OpenNamespace(string) {}
// Copyright 2022 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package mathutil
// ExponentialMovingAverage is an exponential moving average measurement implementation. It is not thread-safe.
type ExponentialMovingAverage struct {
value float64
sum float64
factor float64
warmupWindow int
count int
}
// NewExponentialMovingAverage will create a new ExponentialMovingAverage.
func NewExponentialMovingAverage(
factor float64,
warmupWindow int,
) *ExponentialMovingAverage {
if factor >= 1 || factor <= 0 {
panic("factor must be (0, 1)")
}
return &ExponentialMovingAverage{
factor: factor,
warmupWindow: warmupWindow,
}
}
// Add a single sample and update the internal state.
func (m *ExponentialMovingAverage) Add(value float64) {
if m.count < m.warmupWindow {
m.count++
m.sum += value
m.value = m.sum / float64(m.count)
} else {
m.value = m.value*(1-m.factor) + value*m.factor
}
}
// Get the current value.
func (m *ExponentialMovingAverage) Get() float64 {
return m.value
}
// Copyright 2019 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package mathutil
import (
"cmp"
"math"
"github.com/pingcap/tidb/pkg/util/intest"
"golang.org/x/exp/constraints"
)
// Architecture and/or implementation specific integer limits and bit widths.
const (
MaxInt = 1<<(IntBits-1) - 1
MinInt = -MaxInt - 1
MaxUint = 1<<IntBits - 1
IntBits = 1 << (^uint(0)>>32&1 + ^uint(0)>>16&1 + ^uint(0)>>8&1 + 3)
)
// Abs implement the abs function according to http://cavaliercoder.com/blog/optimized-abs-for-int64-in-go.html
func Abs(n int64) int64 {
y := n >> 63
return (n ^ y) - y
}
// uintSizeTable is used as a table to do comparison to get uint length is faster than doing loop on division with 10
var uintSizeTable = [21]uint64{
0, // redundant 0 here, so to make function StrLenOfUint64Fast to count from 1 and return i directly
9, 99, 999, 9999, 99999,
999999, 9999999, 99999999, 999999999, 9999999999,
99999999999, 999999999999, 9999999999999, 99999999999999, 999999999999999,
9999999999999999, 99999999999999999, 999999999999999999, 9999999999999999999,
math.MaxUint64,
} // math.MaxUint64 is 18446744073709551615 and it has 20 digits
// StrLenOfUint64Fast efficiently calculate the string character lengths of an uint64 as input
func StrLenOfUint64Fast(x uint64) int {
for i := 1; ; i++ {
if x <= uintSizeTable[i] {
return i
}
}
}
// StrLenOfInt64Fast efficiently calculate the string character lengths of an int64 as input
func StrLenOfInt64Fast(x int64) int {
size := 0
if x < 0 {
size = 1 // add "-" sign on the length count
}
return size + StrLenOfUint64Fast(uint64(Abs(x)))
}
// IsFinite reports whether f is neither NaN nor an infinity.
func IsFinite(f float64) bool {
return !math.IsNaN(f - f)
}
// Clamp restrict a value to a certain interval.
func Clamp[T cmp.Ordered](n, minv, maxv T) T {
if n >= maxv {
return maxv
} else if n <= minv {
return minv
}
return n
}
// NextPowerOfTwo returns the smallest power of two greater than or equal to `i`
// Caller should guarantee that i > 0 and the return value is not overflow.
func NextPowerOfTwo(i int64) int64 {
if i&(i-1) == 0 {
return i
}
i *= 2
for i&(i-1) != 0 {
i &= i - 1
}
return i
}
// Divide2Batches divides 'total' into 'batches'. It returns a slice of sizes
// whose sum equals total. If total < batches, it returns total parts of size 1.
// If total equals 0, it returns an empty slice. Batches must be > 0.
func Divide2Batches[T constraints.Integer](total, batches T) []T {
result := make([]T, 0, batches)
quotient := total / batches
remainder := total % batches
for total > 0 {
size := quotient
if remainder > 0 {
size++
remainder--
}
intest.Assert(size > 0, "size should be positive")
result = append(result, size)
total -= size
}
return result
}
// Copyright 2020 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package mathutil
import (
"sync"
"time"
)
const maxRandValue = 0x3FFFFFFF
// MysqlRng is random number generator and this implementation is ported from MySQL.
// See https://github.com/tikv/tikv/pull/6117#issuecomment-562489078.
type MysqlRng struct {
mu *sync.Mutex
seed1 uint32
seed2 uint32
}
// NewWithSeed create a rng with random seed.
func NewWithSeed(seed int64) *MysqlRng {
seed1 := uint32(seed*0x10001+55555555) % maxRandValue
seed2 := uint32(seed*0x10000001) % maxRandValue
return &MysqlRng{
seed1: seed1,
seed2: seed2,
mu: &sync.Mutex{},
}
}
// NewWithTime create a rng with time stamp.
func NewWithTime() *MysqlRng {
return NewWithSeed(time.Now().UnixNano())
}
// Gen will generate random number.
func (rng *MysqlRng) Gen() float64 {
rng.mu.Lock()
defer rng.mu.Unlock()
rng.seed1 = (rng.seed1*3 + rng.seed2) % maxRandValue
rng.seed2 = (rng.seed1 + rng.seed2 + 33) % maxRandValue
return float64(rng.seed1) / float64(maxRandValue)
}
// SetSeed1 is a interface to set seed1
func (rng *MysqlRng) SetSeed1(seed uint32) {
rng.mu.Lock()
defer rng.mu.Unlock()
rng.seed1 = seed
}
// SetSeed2 is a interface to set seed2
func (rng *MysqlRng) SetSeed2(seed uint32) {
rng.mu.Lock()
defer rng.mu.Unlock()
rng.seed2 = seed
}
// GetSeed1 is an interface to get seed1. It's only used for getting session states.
func (rng *MysqlRng) GetSeed1() uint32 {
rng.mu.Lock()
defer rng.mu.Unlock()
return rng.seed1
}
// GetSeed2 is an interface to get seed2. It's only used for getting session states.
func (rng *MysqlRng) GetSeed2() uint32 {
rng.mu.Lock()
defer rng.mu.Unlock()
return rng.seed2
}
// Copyright 2018 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package memory
import (
"sync"
"sync/atomic"
"github.com/pingcap/tidb/pkg/errno"
"github.com/pingcap/tidb/pkg/util/dbterror"
"github.com/pingcap/tidb/pkg/util/logutil"
"github.com/pingcap/tidb/pkg/util/sqlkiller"
"go.uber.org/zap"
)
// ActionOnExceed is the action taken when memory usage exceeds memory quota.
// NOTE: All the implementors should be thread-safe.
type ActionOnExceed interface {
// Action will be called when memory usage exceeds memory quota by the
// corresponding Tracker.
Action(t *Tracker)
// SetFallback sets a fallback action which will be triggered if itself has
// already been triggered.
SetFallback(a ActionOnExceed)
// GetFallback get the fallback action of the Action.
GetFallback() ActionOnExceed
// GetPriority get the priority of the Action.
GetPriority() int64
// SetFinished sets the finished state of the Action.
SetFinished()
// IsFinished returns the finished state of the Action.
IsFinished() bool
}
var _ ActionOnExceed = &actionWithPriority{}
type actionWithPriority struct {
ActionOnExceed
priority int64
}
// NewActionWithPriority wraps the action with a new priority
func NewActionWithPriority(action ActionOnExceed, priority int64) *actionWithPriority {
return &actionWithPriority{
action,
priority,
}
}
func (a *actionWithPriority) GetPriority() int64 {
return a.priority
}
// BaseOOMAction manages the fallback action for all Action.
type BaseOOMAction struct {
fallbackAction ActionOnExceed
finished int32
}
// SetFallback sets a fallback action which will be triggered if itself has
// already been triggered.
func (b *BaseOOMAction) SetFallback(a ActionOnExceed) {
b.fallbackAction = a
}
// SetFinished sets the finished state of the Action.
func (b *BaseOOMAction) SetFinished() {
atomic.StoreInt32(&b.finished, 1)
}
// IsFinished returns the finished state of the Action.
func (b *BaseOOMAction) IsFinished() bool {
return atomic.LoadInt32(&b.finished) == 1
}
// GetFallback get the fallback action and remove finished fallback.
func (b *BaseOOMAction) GetFallback() ActionOnExceed {
for b.fallbackAction != nil && b.fallbackAction.IsFinished() {
b.SetFallback(b.fallbackAction.GetFallback())
}
return b.fallbackAction
}
// TriggerFallBackAction triggers the fallback action of the current action
func (b *BaseOOMAction) TriggerFallBackAction(tracker *Tracker) {
if fallback := b.GetFallback(); fallback != nil {
fallback.Action(tracker)
}
}
// Default OOM Action priority.
const (
DefPanicPriority = iota
DefLogPriority
DefSpillPriority
// DefCursorFetchSpillPriority is higher than normal disk spill, because it can release much more memory in the future.
// And the performance impaction of it is less than other disk-spill action, because it's write-only in execution stage.
DefCursorFetchSpillPriority
DefRateLimitPriority
)
// LogOnExceed logs a warning only once when memory usage exceeds memory quota.
type LogOnExceed struct {
logHook func(uint64)
BaseOOMAction
ConnID uint64
mutex sync.Mutex // For synchronization.
acted bool
}
// SetLogHook sets a hook for LogOnExceed.
func (a *LogOnExceed) SetLogHook(hook func(uint64)) {
a.logHook = hook
}
// Action logs a warning only once when memory usage exceeds memory quota.
func (a *LogOnExceed) Action(t *Tracker) {
a.mutex.Lock()
defer a.mutex.Unlock()
if !a.acted {
a.acted = true
if a.logHook == nil {
logutil.BgLogger().Warn("memory exceeds quota",
zap.Error(errMemExceedThreshold.GenWithStackByArgs(t.label, t.BytesConsumed(), t.GetBytesLimit(), t.String())))
return
}
a.logHook(a.ConnID)
}
}
// GetPriority get the priority of the Action
func (*LogOnExceed) GetPriority() int64 {
return DefLogPriority
}
// PanicOnExceed panics when memory usage exceeds memory quota.
type PanicOnExceed struct {
Killer *sqlkiller.SQLKiller
logHook func(uint64)
BaseOOMAction
ConnID uint64
mutex sync.Mutex // For synchronization.
acted bool
}
// SetLogHook sets a hook for PanicOnExceed.
func (a *PanicOnExceed) SetLogHook(hook func(uint64)) {
a.logHook = hook
}
// Action panics when memory usage exceeds memory quota.
func (a *PanicOnExceed) Action(t *Tracker) {
a.mutex.Lock()
defer func() {
a.mutex.Unlock()
}()
if !a.acted {
if a.logHook == nil {
logutil.BgLogger().Warn("memory exceeds quota",
zap.Uint64("conn", t.SessionID.Load()), zap.Error(errMemExceedThreshold.GenWithStackByArgs(t.label, t.BytesConsumed(), t.GetBytesLimit(), t.String())))
} else {
a.logHook(a.ConnID)
}
}
a.acted = true
a.Killer.SendKillSignal(sqlkiller.QueryMemoryExceeded)
if err := a.Killer.HandleSignal(); err != nil {
panic(err)
}
}
// GetPriority get the priority of the Action
func (*PanicOnExceed) GetPriority() int64 {
return DefPanicPriority
}
var (
errMemExceedThreshold = dbterror.ClassUtil.NewStd(errno.ErrMemExceedThreshold)
)
// Copyright 2025 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package memory
import (
"errors"
"fmt"
"sync"
"sync/atomic"
"time"
"github.com/pingcap/tidb/pkg/util/intest"
"go.uber.org/zap"
)
// ArbitrateResult represents the results of the arbitration process
type ArbitrateResult int32
const (
// ArbitrateOk indicates that the arbitration is successful.
ArbitrateOk ArbitrateResult = iota
// ArbitrateFail indicates that the arbitration is failed
ArbitrateFail
)
// SoftLimitMode represents the mode of soft limit for the mem-arbitrator
type SoftLimitMode int32
const (
// SoftLimitModeDisable indicates that soft-limit is same as the threshold of oom risk
SoftLimitModeDisable SoftLimitMode = iota
// SoftLimitModeSpecified indicates that the soft-limit is a specified num of bytes or rate of the limit
SoftLimitModeSpecified
// SoftLimitModeAuto indicates that the soft-limit is auto calculated by the mem-arbitrator
SoftLimitModeAuto
)
const (
// ArbitratorSoftLimitModDisableName is the name of the soft limit mode default
ArbitratorSoftLimitModDisableName = "0"
// ArbitratorSoftLimitModeAutoName is the name of the soft limit mode auto
ArbitratorSoftLimitModeAutoName = "auto"
// ArbitratorModeStandardName is the name of the standard mode
ArbitratorModeStandardName = "standard"
// ArbitratorModePriorityName is the name of the priority mode
ArbitratorModePriorityName = "priority"
// ArbitratorModeDisableName is the name of the disable mode
ArbitratorModeDisableName = "disable"
// DefMaxLimit is the default maximum limit of mem quota
DefMaxLimit int64 = 5e15
defTaskTickDur = time.Millisecond * 10
defMinHeapFreeBPS int64 = 100 * byteSizeMB
defHeapReclaimCheckDuration = time.Second * 1
defHeapReclaimCheckMaxDuration = time.Second * 5
defOOMRiskRatio = 0.95
defMemRiskRatio = 0.9
defTickDurMilli = kilo * 1 // 1s
defStorePoolMediumCapDurMilli = defTickDurMilli * 10 // 10s
defTrackMemStatsDurMilli = kilo * 1
defMax int64 = 9e15
defServerlimitSmallLimitNum = 1000
defServerlimitMinUnitNum = 500
defServerlimitMaxUnitNum = 100
defUpdateMemConsumedTimeAlignSec = 30
defUpdateMemMagnifUtimeAlign = 30
defUpdateBufferTimeAlignSec = 60
defRedundancy = 2
defPoolReservedQuota = byteSizeMB
defAwaitFreePoolAllocAlignSize = defPoolReservedQuota + byteSizeMB
defAwaitFreePoolShardNum int64 = 256
defAwaitFreePoolShrinkDurMilli = kilo * 2
defPoolStatusShards = 128
defPoolQuotaShards = 27 // quota >= BaseQuotaUnit * 2^(max_shards - 2) will be put into the last shard
prime64 uint64 = 1099511628211
initHashKey uint64 = 14695981039346656037
defKillCancelCheckTimeout = time.Second * 20
defDigestProfileSmallMemTimeoutSec = 60 * 60 * 24 // 1 day
defDigestProfileMemTimeoutSec = 60 * 60 * 24 * 7 // 1 week
baseQuotaUnit = 4 * byteSizeKB // 4KB
defMaxMagnif = kilo * 10
defMaxDigestProfileCacheLimit = 4e4
)
// ArbitratorWorkMode represents the work mode of the arbitrator: Standard, Priority, Disable
type ArbitratorWorkMode int32
const (
// ArbitratorModeStandard indicates the standard mode
ArbitratorModeStandard ArbitratorWorkMode = iota
// ArbitratorModePriority indicates the priority mode
ArbitratorModePriority
// ArbitratorModeDisable indicates the mem-arbitrator is disabled
ArbitratorModeDisable
maxArbitratorMode
)
// ArbitrationPriority represents the priority of the task: Low, Medium, High
type ArbitrationPriority int32
type entryExecState int32
const (
execStateIdle entryExecState = iota
execStateRunning
execStatePrivileged
)
const (
// ArbitrationPriorityLow indicates the low priority
ArbitrationPriorityLow ArbitrationPriority = iota
// ArbitrationPriorityMedium indicates the medium priority
ArbitrationPriorityMedium
// ArbitrationPriorityHigh indicates the high priority
ArbitrationPriorityHigh
minArbitrationPriority = ArbitrationPriorityLow
maxArbitrationPriority = ArbitrationPriorityHigh + 1
maxArbitrateMode = maxArbitrationPriority + 1
// ArbitrationWaitAverse indicates the wait-averse property
ArbitrationWaitAverse = maxArbitrationPriority
)
var errArbitrateFailError = errors.New("failed to allocate resource from arbitrator")
var arbitrationPriorityNames = [maxArbitrationPriority]string{"LOW", "MEDIUM", "HIGH"}
var mockNow func() time.Time
var mockWinupCB func(*rootPoolEntry)
// String returns the string representation of the ArbitrationPriority
func (p ArbitrationPriority) String() string {
return arbitrationPriorityNames[p]
}
var arbitratorWorkModeNames = []string{ArbitratorModeStandardName, ArbitratorModePriorityName, ArbitratorModeDisableName}
// String returns the string representation of the ArbitratorWorkMode
func (m ArbitratorWorkMode) String() string {
return arbitratorWorkModeNames[m]
}
func (m *MemArbitrator) taskNumByPriority(priority ArbitrationPriority) int64 {
return m.tasks.fifoByPriority[priority].approxSize()
}
func (m *MemArbitrator) taskNumOfWaitAverse() int64 {
return m.tasks.fifoWaitAverse.approxSize()
}
func (m *MemArbitrator) firstTaskEntry(priority ArbitrationPriority) *rootPoolEntry {
return m.tasks.fifoByPriority[priority].front()
}
func (m *MemArbitrator) removeTaskImpl(entry *rootPoolEntry) bool {
if entry.taskMu.fifo.valid() {
m.tasks.fifoTasks.remove(entry.taskMu.fifo)
entry.taskMu.fifo.reset()
m.tasks.fifoByPriority[entry.taskMu.fifoByPriority.priority].remove(entry.taskMu.fifoByPriority.wrapListElement)
entry.taskMu.fifoByPriority.reset()
if entry.taskMu.fifoWaitAverse.valid() {
m.tasks.fifoWaitAverse.remove(entry.taskMu.fifoWaitAverse)
entry.taskMu.fifoWaitAverse.reset()
}
return true
}
return false
}
// there is no need to wind up if task has been removed by cancel.
func (m *MemArbitrator) removeTask(entry *rootPoolEntry) (res bool) {
m.tasks.Lock()
res = m.removeTaskImpl(entry)
m.tasks.Unlock()
return res
}
func (m *MemArbitrator) addTask(entry *rootPoolEntry) {
m.tasks.Lock()
priority := entry.ctx.memPriority
entry.taskMu.fifoByPriority.priority = priority
entry.taskMu.fifoByPriority.wrapListElement = m.tasks.fifoByPriority[priority].pushBack(entry)
if entry.ctx.waitAverse {
entry.taskMu.fifoWaitAverse = m.tasks.fifoWaitAverse.pushBack(entry)
}
entry.taskMu.fifo = m.tasks.fifoTasks.pushBack(entry)
m.tasks.Unlock()
}
func (m *MemArbitrator) frontTaskEntry() (entry *rootPoolEntry) {
m.tasks.Lock()
entry = m.tasks.fifoTasks.front()
m.tasks.Unlock()
return
}
func (m *MemArbitrator) extractFirstTaskEntry() (entry *rootPoolEntry) {
m.tasks.Lock()
if m.privilegedEntry != nil {
if m.privilegedEntry.taskMu.fifo.valid() {
m.tasks.fifoTasks.moveToFront(m.privilegedEntry.taskMu.fifo)
entry = m.privilegedEntry
}
}
if entry == nil {
if m.execMu.mode == ArbitratorModePriority {
for priority := maxArbitrationPriority - 1; priority >= minArbitrationPriority; priority-- {
if entry = m.firstTaskEntry(priority); entry != nil {
break
}
}
} else {
entry = m.tasks.fifoTasks.front()
}
}
m.tasks.Unlock()
return
}
type rootPoolEntry struct {
pool *ResourcePool
taskMu struct { // protected by the tasks mutex of arbitrator
fifo wrapListElement
fifoWaitAverse wrapListElement
fifoByPriority struct {
wrapListElement
priority ArbitrationPriority
}
}
// context of execution
// mutable when entry is idle and the mutex of root pool is locked
ctx struct {
atomic.Pointer[ArbitrationContext]
cancelCh <-chan struct{}
canceled atomic.Bool
// properties hint of the entry; data race is acceptable;
memPriority ArbitrationPriority
waitAverse bool
preferPrivilege bool
}
request struct {
// arbitrator will send result in `windup`
resultCh chan ArbitrateResult
// quota is readable to arbitrator when taskMu is locked
// quota is mutable only when entry is not in task queue and taskMu is unlocked, almost like after receiving data from `<-resultCh`
quota int64
// task-mutex is locked when entry is under arbitration
// task-mutex can be locked when entry is in task queue
taskMu sync.Mutex
}
arbitratorMu struct { // mutable for arbitrator
shard *entryMapShard
quotaShard *entryQuotaShard
underKill entryKillCancelCtx
underCancel entryKillCancelCtx
quota int64 // -1: uninitiated
destroyed bool
}
stateMu struct {
quotaToReclaim atomic.Int64
sync.Mutex
stop atomic.Bool
// execStateIdle -> execStateRunning -> execStatePrivileged -> execStateIdle
// execStateIdle -> execStateRunning -> execStateIdle
exec entryExecState
}
}
type mapUIDEntry map[uint64]*rootPoolEntry
type entryMapShard struct {
entries mapUIDEntry
sync.RWMutex
}
type entryQuotaShard struct {
entries mapUIDEntry
}
func (e *rootPoolEntry) execState() entryExecState {
return entryExecState(atomic.LoadInt32((*int32)(&e.stateMu.exec)))
}
func (e *rootPoolEntry) setExecState(s entryExecState) {
atomic.StoreInt32((*int32)(&e.stateMu.exec), int32(s))
}
func (e *rootPoolEntry) intoExecPrivileged() bool {
return atomic.CompareAndSwapInt32((*int32)(&e.stateMu.exec), int32(execStateRunning), int32(execStatePrivileged))
}
func (e *rootPoolEntry) notRunning() bool {
return e.stateMu.stop.Load() || e.execState() == execStateIdle || e.stateMu.quotaToReclaim.Load() > 0
}
type entryMap struct {
quotaShards [maxArbitrationPriority][]*entryQuotaShard // entries order by priority, quota
contextCache struct { // cache for traversing all entries concurrently
sync.Map // map[uint64]*rootPoolEntry
num atomic.Int64
}
shards []*entryMapShard
shardsMask uint64
maxQuotaShardIndex int // for quota >= `BaseQuotaUnit * 2^(maxQuotaShard - 1)`
minQuotaShardIndexToCheck int // ignore the pool with smaller quota
}
// controlled by arbitrator
func (m *entryMap) delete(entry *rootPoolEntry) {
uid := entry.pool.uid
if entry.arbitratorMu.quotaShard != nil {
delete(entry.arbitratorMu.quotaShard.entries, uid)
entry.arbitratorMu.quota = 0
entry.arbitratorMu.quotaShard = nil
}
entry.arbitratorMu.shard.delete(uid)
entry.arbitratorMu.shard = nil
if _, loaded := m.contextCache.LoadAndDelete(uid); loaded {
m.contextCache.num.Add(-1)
}
}
// controlled by arbitrator
func (m *entryMap) addQuota(entry *rootPoolEntry, delta int64) {
if delta == 0 {
return
}
uid := entry.pool.UID()
entry.arbitratorMu.quota += delta
if entry.arbitratorMu.quota == 0 { // remove
delete(entry.arbitratorMu.quotaShard.entries, uid)
entry.arbitratorMu.quotaShard = nil
return
}
newPos := getQuotaShard(entry.arbitratorMu.quota, m.maxQuotaShardIndex)
newShard := m.quotaShards[entry.ctx.memPriority][newPos]
if newShard != entry.arbitratorMu.quotaShard {
if entry.arbitratorMu.quotaShard != nil {
delete(entry.arbitratorMu.quotaShard.entries, uid)
}
entry.arbitratorMu.quotaShard = newShard
entry.arbitratorMu.quotaShard.entries[uid] = entry
}
}
func (m *entryMap) getStatusShard(key uint64) *entryMapShard {
return m.shards[shardIndexByUID(key, m.shardsMask)]
}
func (m *entryMap) getQuotaShard(priority ArbitrationPriority, quota int64) *entryQuotaShard {
return m.quotaShards[priority][getQuotaShard(quota, m.maxQuotaShardIndex)]
}
func (s *entryMapShard) get(key uint64) (e *rootPoolEntry, ok bool) {
s.RLock()
e, ok = s.entries[key]
s.RUnlock()
return
}
func (s *entryMapShard) delete(key uint64) {
s.Lock()
delete(s.entries, key)
s.Unlock()
}
func (s *entryMapShard) emplace(key uint64, tar *rootPoolEntry) (e *rootPoolEntry, ok bool) {
s.Lock()
e, found := s.entries[key]
ok = !found
if !found {
s.entries[key] = tar
e = tar
}
s.Unlock()
return
}
func (m *entryMap) emplace(pool *ResourcePool) (*rootPoolEntry, bool) {
key := pool.UID()
s := m.getStatusShard(key)
if v, ok := s.get(key); ok {
return v, false
}
tar := &rootPoolEntry{pool: pool}
tar.arbitratorMu.shard = s
tar.request.resultCh = make(chan ArbitrateResult, 1)
return s.emplace(key, tar)
}
func (m *entryMap) init(shardNum uint64, maxQuotaShard int, minQuotaForReclaim int64) {
m.shards = make([]*entryMapShard, shardNum)
m.shardsMask = shardNum - 1
m.maxQuotaShardIndex = maxQuotaShard
m.minQuotaShardIndexToCheck = getQuotaShard(minQuotaForReclaim, m.maxQuotaShardIndex)
for p := minArbitrationPriority; p < maxArbitrationPriority; p++ {
m.quotaShards[p] = make([]*entryQuotaShard, m.maxQuotaShardIndex)
for i := range m.maxQuotaShardIndex {
m.quotaShards[p][i] = &entryQuotaShard{
entries: make(mapUIDEntry),
}
}
}
for i := range shardNum {
m.shards[i] = &entryMapShard{
entries: make(mapUIDEntry),
}
}
}
// if entry is in task queue, it must have acquire the unique request lock and wait for callback
// this func only can be invoked after `removeTask`
func (e *rootPoolEntry) windUp(delta int64, r ArbitrateResult) {
e.pool.forceAddCap(delta)
e.request.resultCh <- r
if intest.InTest {
if mockWinupCB != nil {
mockWinupCB(e)
}
}
}
// non thread safe: the mutex of root pool must have been locked
func (m *MemArbitrator) blockingAllocate(entry *rootPoolEntry, requestedBytes int64) ArbitrateResult {
if entry.execState() == execStateIdle {
return ArbitrateFail
}
if entry.ctx.canceled.Load() {
atomic.AddInt64(&m.execMetrics.Task.Fail, 1)
return ArbitrateFail
}
m.prepareAlloc(entry, requestedBytes)
return m.waitAlloc(entry)
}
// non thread safe: the mutex of root pool must have been locked
func (m *MemArbitrator) prepareAlloc(entry *rootPoolEntry, requestedBytes int64) {
entry.request.quota = requestedBytes
m.tasks.waitingAlloc.Add(requestedBytes)
m.addTask(entry)
m.notifer.WeakWake()
}
// non thread safe: the mutex of root pool must have been locked
func (m *MemArbitrator) waitAlloc(entry *rootPoolEntry) ArbitrateResult {
res := ArbitrateOk
select {
case res = <-entry.request.resultCh:
if res == ArbitrateFail {
atomic.AddInt64(&m.execMetrics.Task.Fail, 1)
} else {
atomic.AddInt64(&m.execMetrics.Task.Succ, 1)
}
case <-entry.ctx.cancelCh:
// 1. cancel by session
// 2. stop by the arbitrate-helper (cancel / kill by arbitrator)
res = ArbitrateFail
atomic.AddInt64(&m.execMetrics.Task.Fail, 1)
entry.ctx.canceled.Store(true)
{ // wait for arbitration process finish
entry.request.taskMu.Lock()
if !m.removeTask(entry) {
<-entry.request.resultCh
}
entry.request.taskMu.Unlock()
}
}
m.tasks.waitingAlloc.Add(-entry.request.quota)
return res
}
type blockedState struct {
allocated int64
utimeSec int64
}
// PoolAllocProfile represents the profile of root pool allocation in the mem-arbitrator
type PoolAllocProfile struct {
SmallPoolLimit int64 // limit / 1000
PoolAllocUnit int64 // limit / 500
MaxPoolAllocUnit int64 // limit / 100
}
// MemArbitrator represents the main structure aka `mem-arbitrator`
type MemArbitrator struct {
execMu struct {
startTime time.Time // start time of each round
blockedState blockedState // blocked state during arbitration
mode ArbitratorWorkMode // work mode of each round
}
actions MemArbitratorActions // actions interfaces
controlMu struct { // control the async work process
finishCh chan struct{}
sync.Mutex
running atomic.Bool
}
privilegedEntry *rootPoolEntry // entry with privilege will always be satisfied first
underKill mapEntryWithMem // entries under `KILL` operation
underCancel mapEntryWithMem // entries under `CANCEL` operation
notifer Notifer // wake up the async work process
cleanupMu struct { // cleanup the state of the entry
fifoTasks wrapList[*rootPoolEntry]
sync.Mutex
}
tasks struct {
fifoByPriority [maxArbitrationPriority]wrapList[*rootPoolEntry] // tasks by priority
fifoTasks wrapList[*rootPoolEntry] // all tasks in FIFO order
fifoWaitAverse wrapList[*rootPoolEntry] // tasks with wait-averse property
waitingAlloc atomic.Int64 // total waiting allocation size
sync.Mutex
}
digestProfileCache struct {
shards []digestProfileShard
shardsMask uint64
num atomic.Int64
limit int64 // max number of digest profiles; shrink to limit/2 when num > limit;
}
entryMap entryMap // sharded hash map & ordered quota map
awaitFree struct { // await-free pool
pool *ResourcePool
budget struct { // fixed size budget shards
shards []TrackedConcurrentBudget
sizeMask uint64
}
lastQuotaUsage memPoolQuotaUsage // tracked heap memory usage & quota usage
lastShrinkUtimeMilli atomic.Int64
}
heapController heapController // monitor runtime mem stats; resolve mem issues; record mem profiles;
poolAllocStats struct { // statistics of root pool allocation
sync.RWMutex
PoolAllocProfile
mediumQuota atomic.Int64 // medium (max quota usage of root pool)
timedMap [2 + defRedundancy]struct {
sync.RWMutex
statisticsTimedMapElement
}
lastUpdateUtimeMilli atomic.Int64
}
buffer buffer // reserved buffer quota which only works under priority mode
mu struct {
sync.Mutex
_ cpuCacheLinePad
allocated int64 // allocated mem quota
released uint64 // total released mem quota
lastGC uint64 // total released mem quota at last GC point
_ cpuCacheLinePad
limit int64 // hard limit of mem quota which is same as the server limit
threshold struct {
risk int64 // threshold of mem risk
oomRisk int64 // threshold of oom risk
}
softLimit struct {
mode SoftLimitMode
size int64
specified struct {
size int64
ratio int64 // ratio of soft-limit to hard-limit
}
}
}
execMetrics execMetricsCounter // execution metrics
avoidance struct {
size atomic.Int64 // size of quota cannot be allocated
heapTracked struct { // tracked heap memory usage
atomic.Int64
lastUpdateUtimeMilli atomic.Int64
}
memMagnif struct { // memory pressure magnification factor: ratio of runtime memory usage to quota usage
sync.Mutex
ratio atomic.Int64
}
awaitFreeBudgetKickOutIdx uint64 // round-robin index to clean await-free pool budget when quota is insufficient
}
tickTask struct { // periodic task
sync.Mutex
lastTickUtimeMilli atomic.Int64
}
UnixTimeSec int64 // approximate unix time in seconds
rootPoolNum atomic.Int64
mode ArbitratorWorkMode
}
type buffer struct {
size atomic.Int64 // approximate max quota usage of root pool
timedMap [2 + defRedundancy]struct {
sync.RWMutex
wrapTimeSizeQuota
}
}
func (m *MemArbitrator) setBufferSize(v int64) {
m.buffer.size.Store(v)
}
type digestProfileShard struct {
sync.Map //map[uint64]*digestProfile
num atomic.Int64
}
// MemArbitratorActions represents the actions of the mem-arbitrator
type MemArbitratorActions struct {
Info, Warn, Error func(format string, args ...zap.Field) // log actions
UpdateRuntimeMemStats func() // update runtime memory statistics
GC func() // garbage collection
}
type awaitFreePoolExecMetrics struct {
pairSuccessFail
Shrink int64
ForceShrink int64
}
type pairSuccessFail struct{ Succ, Fail int64 }
// NumByPriority represents the number of tasks by priority
type NumByPriority [maxArbitrationPriority]int64
type execMetricsAction struct {
GC int64
UpdateRuntimeMemStats int64
RecordMemState pairSuccessFail
}
type execMetricsRisk struct {
Mem int64
OOM int64
OOMKill NumByPriority
}
type execMetricsCancel struct {
StandardMode int64
PriorityMode NumByPriority
WaitAverse int64
}
type execMetricsTask struct {
pairSuccessFail // all work modes
SuccByPriority NumByPriority // priority mode
}
type execMetricsCounter struct {
Task execMetricsTask
Cancel execMetricsCancel
AwaitFree awaitFreePoolExecMetrics
Action execMetricsAction
Risk execMetricsRisk
ShrinkDigest int64
}
// ExecMetrics returns the reference of the execution metrics
//
//go:norace
func (m *MemArbitrator) ExecMetrics() execMetricsCounter {
if m == nil {
return execMetricsCounter{}
}
return m.execMetrics
}
// SetWorkMode sets the work mode of the mem-arbitrator
func (m *MemArbitrator) SetWorkMode(newMode ArbitratorWorkMode) (oriMode ArbitratorWorkMode) {
oriMode = ArbitratorWorkMode(atomic.SwapInt32((*int32)(&m.mode), int32(newMode)))
m.wake()
return
}
// WorkMode returns the current work mode of the mem-arbitrator
func (m *MemArbitrator) WorkMode() ArbitratorWorkMode {
if m == nil {
return ArbitratorModeDisable
}
return m.workMode()
}
// PoolAllocProfile returns the profile of root pool allocation in the mem-arbitrator
func (m *MemArbitrator) PoolAllocProfile() (res PoolAllocProfile) {
limit := m.limit()
return PoolAllocProfile{
SmallPoolLimit: max(1, limit/defServerlimitSmallLimitNum),
PoolAllocUnit: max(1, limit/defServerlimitMinUnitNum),
MaxPoolAllocUnit: max(1, limit/defServerlimitMaxUnitNum),
}
}
func (m *MemArbitrator) workMode() ArbitratorWorkMode {
return ArbitratorWorkMode(atomic.LoadInt32((*int32)(&m.mode)))
}
// GetDigestProfileCache returns the digest profile cache for a given digest-id and utime
func (m *MemArbitrator) GetDigestProfileCache(digestID uint64, utimeSec int64) (int64, bool) {
d := &m.digestProfileCache.shards[digestID&m.digestProfileCache.shardsMask]
e, ok := d.Load(digestID)
if !ok {
return 0, false
}
pf := e.(*digestProfile)
if utimeSec > pf.lastFetchUtimeSec.Load() {
pf.lastFetchUtimeSec.Store(utimeSec)
}
return pf.maxVal.Load(), true
}
func (m *MemArbitrator) shrinkDigestProfile(utimeSec int64, limit, shrinkTo int64) (shrinkedNum int64) {
if m.digestProfileCache.num.Load() <= limit {
return
}
m.execMetrics.ShrinkDigest++
var valMap [defPoolQuotaShards]int
for i := range m.digestProfileCache.shards {
d := &m.digestProfileCache.shards[i]
if d.num.Load() == 0 {
continue
}
dn := int64(0)
d.Range(func(k, v any) bool {
pf := v.(*digestProfile)
maxVal := pf.maxVal.Load()
{ // try to delete timeout cache
needDelete := false
if maxVal > m.poolAllocStats.SmallPoolLimit {
if utimeSec-pf.lastFetchUtimeSec.Load() > defDigestProfileMemTimeoutSec {
needDelete = true
}
} else { // small max-val
if utimeSec-pf.lastFetchUtimeSec.Load() > defDigestProfileSmallMemTimeoutSec {
needDelete = true
}
}
if needDelete {
if _, loaded := d.LoadAndDelete(k); loaded {
d.num.Add(-1)
dn++
return true
}
}
}
index := getQuotaShard(maxVal, defPoolQuotaShards)
valMap[index]++
return true
})
m.digestProfileCache.num.Add(-dn)
shrinkedNum += dn
}
toShinkNum := m.digestProfileCache.num.Load() - shrinkTo
if toShinkNum <= 0 {
return
}
shrinkMaxSize := DefMaxLimit
{ // find the max size to shrink
n := int64(0)
for i := range defPoolQuotaShards {
if n += int64(valMap[i]); n >= toShinkNum {
shrinkMaxSize = baseQuotaUnit * (1 << i)
break
}
}
}
for i := range m.digestProfileCache.shards {
d := &m.digestProfileCache.shards[i]
if d.num.Load() == 0 {
continue
}
dn := int64(0)
d.Range(func(k, v any) bool {
if pf := v.(*digestProfile); pf.maxVal.Load() < shrinkMaxSize {
if _, loaded := d.LoadAndDelete(k); loaded {
d.num.Add(-1)
toShinkNum--
dn++
}
}
return toShinkNum > 0
})
m.digestProfileCache.num.Add(-dn)
shrinkedNum += dn
if toShinkNum <= 0 {
break
}
}
return
}
// UpdateDigestProfileCache updates the digest profile cache for a given digest-id
func (m *MemArbitrator) UpdateDigestProfileCache(digestID uint64, memConsumed int64, utimeSec int64) {
d := &m.digestProfileCache.shards[digestID&m.digestProfileCache.shardsMask]
var pf *digestProfile
if e, ok := d.Load(digestID); ok {
pf = e.(*digestProfile)
} else {
pf = &digestProfile{}
if actual, loaded := d.LoadOrStore(digestID, pf); loaded {
pf = actual.(*digestProfile)
} else {
d.num.Add(1)
m.digestProfileCache.num.Add(1)
}
}
const maxNum = int64(len(pf.timedMap))
const maxDur = maxNum - defRedundancy
tsAlign := utimeSec / defUpdateBufferTimeAlignSec
tar := &pf.timedMap[tsAlign%maxNum]
if oriTs := tar.tsAlign.Load(); oriTs < tsAlign && oriTs != 0 {
tar.Lock()
if oriTs = tar.tsAlign.Load(); oriTs < tsAlign && oriTs != 0 {
tar.wrapTimeMaxval = wrapTimeMaxval{}
}
tar.Unlock()
}
tar.RLock()
updateSize := false
cleanNext := false
if tar.tsAlign.Load() == 0 {
if tar.tsAlign.CompareAndSwap(0, tsAlign) {
cleanNext = true
}
}
for oldVal := tar.maxVal.Load(); oldVal < memConsumed; oldVal = tar.maxVal.Load() {
if tar.maxVal.CompareAndSwap(oldVal, memConsumed) {
updateSize = true
break
}
}
if updateSize {
maxv := tar.maxVal.Load()
// tsAlign-1, tsAlign
for i := range maxDur {
d := &pf.timedMap[(maxNum+tsAlign-i)%maxNum]
if ts := d.tsAlign.Load(); ts > tsAlign-maxDur && ts <= tsAlign {
maxv = max(maxv, d.maxVal.Load())
}
}
pf.maxVal.CompareAndSwap(pf.maxVal.Load(), maxv) // force update
}
tar.RUnlock()
if utimeSec > pf.lastFetchUtimeSec.Load() {
pf.lastFetchUtimeSec.Store(utimeSec)
}
if cleanNext {
d := &pf.timedMap[(tsAlign+1)%maxNum]
d.Lock()
if ts := d.tsAlign.Load(); ts < (tsAlign+1) && ts != 0 {
d.wrapTimeMaxval = wrapTimeMaxval{}
}
d.Unlock()
}
}
type digestProfile struct {
maxVal atomic.Int64
timedMap [2 + defRedundancy]struct {
sync.RWMutex
wrapTimeMaxval
}
lastFetchUtimeSec atomic.Int64
}
type wrapTimeMaxval struct {
tsAlign atomic.Int64
maxVal atomic.Int64
}
type wrapTimeSizeQuota struct {
ts atomic.Int64
size atomic.Int64
quota atomic.Int64
}
type statisticsTimedMapElement struct {
tsAlign atomic.Int64
slot [defServerlimitMinUnitNum]uint32
num atomic.Uint64
}
type entryKillCancelCtx struct {
startTime time.Time
reclaim int64
start bool
fail bool
}
type mapEntryWithMem struct {
entries mapUIDEntry
num int64
}
func (x *mapEntryWithMem) delete(entry *rootPoolEntry) {
delete(x.entries, entry.pool.uid)
x.num--
}
//go:norace
func (x *mapEntryWithMem) approxSize() int64 {
return x.num
}
func (x *mapEntryWithMem) init() {
x.entries = make(mapUIDEntry)
}
func (x *mapEntryWithMem) add(entry *rootPoolEntry) {
x.entries[entry.pool.uid] = entry
x.num++
}
func (m *MemArbitrator) addUnderKill(entry *rootPoolEntry, memoryUsed int64, startTime time.Time) {
if !entry.arbitratorMu.underKill.start {
m.underKill.add(entry)
entry.arbitratorMu.underKill = entryKillCancelCtx{
start: true,
startTime: startTime,
reclaim: memoryUsed,
}
}
}
func (m *MemArbitrator) addUnderCancel(entry *rootPoolEntry, memoryUsed int64, startTime time.Time) {
if !entry.arbitratorMu.underCancel.start {
m.underCancel.add(entry)
entry.arbitratorMu.underCancel = entryKillCancelCtx{
start: true,
startTime: startTime,
reclaim: memoryUsed,
}
}
}
func (m *MemArbitrator) deleteUnderKill(entry *rootPoolEntry) {
if entry.arbitratorMu.underKill.start {
m.underKill.delete(entry)
entry.arbitratorMu.underKill.start = false
m.warnKillCancel(entry, &entry.arbitratorMu.underKill, "Finish to `KILL` root pool")
}
}
func (m *MemArbitrator) deleteUnderCancel(entry *rootPoolEntry) {
if entry.arbitratorMu.underCancel.start {
m.underCancel.delete(entry)
entry.arbitratorMu.underCancel.start = false
}
}
type memProfile struct {
startUtimeMilli int64
tsAlign int64
heap int64 // max heap-alloc size after GC
quota int64 // max quota allocated when failed to arbitrate
ratio int64 // heap / quota
}
type heapController struct {
memStateRecorder struct {
RecordMemState
lastMemState atomic.Pointer[RuntimeMemStateV1]
lastRecordUtimeMilli atomic.Int64
sync.Mutex
}
memRisk struct {
startTime struct {
t time.Time
unixMilli atomic.Int64
}
lastMemStats struct {
startTime time.Time
heapTotalFree int64
}
minHeapFreeBPS int64
oomRisk bool
}
timedMemProfile [2]memProfile
lastGC struct {
heapAlloc atomic.Int64 // heap alloc size after GC
utime atomic.Int64 // end time of last GC
}
heapTotalFree atomic.Int64
heapAlloc atomic.Int64 // heap objects occupied bytes
heapInuse atomic.Int64 // heap-inuse = heap-alloc + unused
memOffHeap atomic.Int64 // off-heap memory: `stack` + `gc` + `other` + `meta` ...
memInuse atomic.Int64 // heap-inuse + off-heap: must be less than runtime-limit to avoid Heavy GC / OOM
sync.Mutex
}
func (m *MemArbitrator) lastMemState() (res *RuntimeMemStateV1) {
res = m.heapController.memStateRecorder.lastMemState.Load()
return
}
// RecordMemState is an interface for recording runtime memory state
type RecordMemState interface {
Load() (*RuntimeMemStateV1, error)
Store(*RuntimeMemStateV1) error
}
func (m *MemArbitrator) recordMemConsumed(memConsumed, utimeSec int64) {
m.poolAllocStats.RLock()
defer m.poolAllocStats.RUnlock()
const maxNum = int64(len(m.poolAllocStats.timedMap))
tsAlign := utimeSec / defUpdateMemConsumedTimeAlignSec
tar := &m.poolAllocStats.timedMap[tsAlign%maxNum]
if oriTs := tar.tsAlign.Load(); oriTs < tsAlign && oriTs != 0 {
tar.Lock()
if oriTs = tar.tsAlign.Load(); oriTs < tsAlign && oriTs != 0 {
tar.statisticsTimedMapElement = statisticsTimedMapElement{}
}
tar.Unlock()
}
cleanNext := false
{
tar.RLock()
if tar.tsAlign.Load() == 0 {
if tar.tsAlign.CompareAndSwap(0, tsAlign) {
cleanNext = true
}
}
{
pos := min(memConsumed/m.poolAllocStats.PoolAllocUnit, defServerlimitMinUnitNum-1)
atomic.AddUint32(&tar.slot[pos], 1)
tar.num.Add(1)
}
tar.RUnlock()
}
if cleanNext {
d := &m.poolAllocStats.timedMap[(tsAlign+1)%maxNum]
d.Lock()
if v := d.tsAlign.Load(); v < (tsAlign+1) && v != 0 {
d.statisticsTimedMapElement = statisticsTimedMapElement{}
}
d.Unlock()
}
}
func (m *MemArbitrator) tryToUpdateBuffer(memConsumed, utimeSec int64) {
const maxNum = int64(len(m.buffer.timedMap))
const maxDur = maxNum - defRedundancy
tsAlign := utimeSec / defUpdateBufferTimeAlignSec
tar := &m.buffer.timedMap[tsAlign%maxNum]
if oriTs := tar.ts.Load(); oriTs < tsAlign && oriTs != 0 {
tar.Lock()
if oriTs = tar.ts.Load(); oriTs < tsAlign && oriTs != 0 {
tar.wrapTimeSizeQuota = wrapTimeSizeQuota{}
}
tar.Unlock()
}
cleanNext := false
{
tar.RLock()
updateSize := false
if ts := tar.ts.Load(); ts == 0 {
if tar.ts.CompareAndSwap(0, tsAlign) {
cleanNext = true
}
}
for oldVal := tar.size.Load(); oldVal < memConsumed; oldVal = tar.size.Load() {
if tar.size.CompareAndSwap(oldVal, memConsumed) {
updateSize = true
break
}
}
if updateSize {
// tsAlign-1, tsAlign
for i := range maxDur {
d := &m.buffer.timedMap[(maxNum+tsAlign-i)%maxNum]
if ts := d.ts.Load(); ts > tsAlign-maxDur && ts <= tsAlign {
memConsumed = max(memConsumed, d.size.Load())
}
}
if updateSize && m.buffer.size.Load() != memConsumed {
m.setBufferSize(memConsumed)
}
}
tar.RUnlock()
}
if cleanNext {
d := &m.buffer.timedMap[(tsAlign+1)%maxNum]
d.Lock()
if v := d.ts.Load(); v < tsAlign+1 && v != 0 {
d.wrapTimeSizeQuota = wrapTimeSizeQuota{}
}
d.Unlock()
}
}
func (m *MemArbitrator) gc() {
m.mu.lastGC = m.mu.released
if m.actions.GC != nil {
m.actions.GC()
}
atomic.AddInt64(&m.execMetrics.Action.GC, 1)
}
func (m *MemArbitrator) reclaimHeap() {
m.gc()
m.refreshRuntimeMemStats() // refresh runtime mem stats after GC and record
}
func (m *MemArbitrator) setMinHeapFreeBPS(sz int64) {
m.heapController.memRisk.minHeapFreeBPS = sz
}
func (m *MemArbitrator) minHeapFreeBPS() int64 {
return m.heapController.memRisk.minHeapFreeBPS
}
// ResetRootPoolByID resets the root pool by ID and analyze the memory consumption info
func (m *MemArbitrator) ResetRootPoolByID(uid uint64, maxMemConsumed int64, tune bool) {
entry := m.getRootPoolEntry(uid)
if entry == nil {
return
}
m.tryToUpdateBuffer(
maxMemConsumed,
m.approxUnixTimeSec())
if tune {
if maxMemConsumed > m.poolAllocStats.SmallPoolLimit {
m.recordMemConsumed(
maxMemConsumed,
m.approxUnixTimeSec())
}
}
m.resetRootPoolEntry(entry)
m.wake()
}
func (m *MemArbitrator) resetRootPoolEntry(entry *rootPoolEntry) bool {
{
entry.stateMu.Lock()
if entry.execState() == execStateIdle {
entry.stateMu.Unlock()
return false
}
entry.setExecState(execStateIdle)
entry.stateMu.Unlock()
}
// aquiure the lock of root pool:
// - wait for the alloc task to finish
// - publish the state of entry
if releasedSize := entry.pool.Stop(); releasedSize > 0 {
entry.stateMu.quotaToReclaim.Add(releasedSize)
}
{
m.cleanupMu.Lock()
m.cleanupMu.fifoTasks.pushBack(entry)
m.cleanupMu.Unlock()
}
return true
}
func (m *MemArbitrator) warnKillCancel(entry *rootPoolEntry, ctx *entryKillCancelCtx, reason string) {
m.actions.Warn(
reason,
zap.Uint64("uid", entry.pool.uid),
zap.String("name", entry.pool.name),
zap.String("mem-priority", entry.ctx.memPriority.String()),
zap.Int64("reclaimed", ctx.reclaim),
zap.Time("start-time", ctx.startTime),
)
}
// RemoveRootPoolByID removes & terminates the root pool by ID
func (m *MemArbitrator) RemoveRootPoolByID(uid uint64) bool {
entry := m.getRootPoolEntry(uid)
if entry == nil {
return false
}
if m.removeRootPoolEntry(entry) {
if ctx := entry.ctx.Load(); ctx != nil && ctx.arbitrateHelper != nil {
ctx.arbitrateHelper.Finish()
}
m.wake()
return true
}
return false
}
func (m *MemArbitrator) removeRootPoolEntry(entry *rootPoolEntry) bool {
{
entry.stateMu.Lock()
if entry.stateMu.stop.Swap(true) {
entry.stateMu.Unlock()
return false
}
if entry.execState() != execStateIdle {
entry.setExecState(execStateIdle)
}
entry.stateMu.Unlock()
}
// make the alloc task failed in arbitrator;
{
m.cleanupMu.Lock()
m.cleanupMu.fifoTasks.pushBack(entry)
m.cleanupMu.Unlock()
}
// aquiure the lock of root pool and clean up
entry.pool.Stop()
// any new lock of root pool must have sensed the exec state is idle
return true
}
func (m *MemArbitrator) getRootPoolEntry(uid uint64) *rootPoolEntry {
if e, ok := m.entryMap.getStatusShard(uid).get(uid); ok {
return e
}
return nil
}
type rootPoolWrap struct {
entry *rootPoolEntry
}
// FindRootPool finds the root pool by ID
func (m *MemArbitrator) FindRootPool(uid uint64) rootPoolWrap {
if e := m.getRootPoolEntry(uid); e != nil {
return rootPoolWrap{e}
}
return rootPoolWrap{}
}
// EmplaceRootPool emplaces a new root pool with the given uid (uid < 0 means the internal pool)
func (m *MemArbitrator) EmplaceRootPool(uid uint64) (rootPoolWrap, error) {
if e := m.getRootPoolEntry(uid); e != nil {
return rootPoolWrap{e}, nil
}
pool := &ResourcePool{
name: fmt.Sprintf("root-%d", uid),
uid: uid,
limit: DefMaxLimit,
allocAlignSize: 1,
}
entry, err := m.addRootPool(pool)
return rootPoolWrap{entry}, err
}
func (m *MemArbitrator) addRootPool(pool *ResourcePool) (*rootPoolEntry, error) {
if b := pool.capacity(); b != 0 {
return nil, fmt.Errorf("%s: has %d bytes budget left", pool.name, b)
}
if pool.mu.budget.pool != nil {
return nil, fmt.Errorf("%s: already started with pool %s", pool.name, pool.mu.budget.pool.Name())
}
if pool.reserved != 0 {
return nil, fmt.Errorf("%s: has %d reserved budget left", pool.name, pool.reserved)
}
entry, ok := m.entryMap.emplace(pool)
if !ok {
return nil, fmt.Errorf("%s: already exists", pool.name)
}
m.rootPoolNum.Add(1)
return entry, nil
}
func (m *MemArbitrator) doAdjustSoftLimit() {
var softLimit int64
limit := m.limit()
if m.mu.softLimit.mode == SoftLimitModeSpecified {
if m.mu.softLimit.specified.size > 0 {
softLimit = min(m.mu.softLimit.specified.size, limit)
} else {
softLimit = min(multiRatio(limit, m.mu.softLimit.specified.ratio), limit)
}
} else {
softLimit = m.oomRisk()
}
m.mu.softLimit.size = softLimit
}
// SetSoftLimit sets the soft limit of the mem-arbitrator
func (m *MemArbitrator) SetSoftLimit(softLimit int64, sortLimitRatio float64, mode SoftLimitMode) {
m.mu.Lock()
m.mu.softLimit.mode = mode
if mode == SoftLimitModeSpecified {
m.mu.softLimit.specified.size = softLimit
m.mu.softLimit.specified.ratio = intoRatio(sortLimitRatio)
}
m.doAdjustSoftLimit()
m.mu.Unlock()
}
//go:norace
func (m *MemArbitrator) softLimit() int64 {
return m.mu.softLimit.size
}
// SoftLimit returns the soft limit of the mem-arbitrator
func (m *MemArbitrator) SoftLimit() uint64 {
if m == nil {
return 0
}
return uint64(m.softLimit())
}
func (m *MemArbitrator) doSetLimit(limit int64) {
m.mu.limit = limit
m.mu.threshold.oomRisk = int64(float64(limit) * defOOMRiskRatio)
m.mu.threshold.risk = int64(float64(limit) * defMemRiskRatio)
m.doAdjustSoftLimit()
}
// SetLimit sets the limit of the mem-arbitrator and returns whether the limit has changed
func (m *MemArbitrator) SetLimit(x uint64) (changed bool) {
newLimit := min(int64(x), DefMaxLimit)
if newLimit <= 0 {
return
}
needWake := false
{
m.mu.Lock()
if limit := m.limit(); newLimit != limit {
changed = true
needWake = newLimit > limit // update to a greater limit
m.doSetLimit(newLimit)
}
m.mu.Unlock()
}
if changed {
m.resetStatistics()
}
if needWake {
m.weakWake()
}
return
}
func (m *MemArbitrator) resetStatistics() {
m.poolAllocStats.Lock()
m.poolAllocStats.PoolAllocProfile = m.PoolAllocProfile()
for i := range m.poolAllocStats.timedMap {
m.poolAllocStats.timedMap[i].statisticsTimedMapElement = statisticsTimedMapElement{}
}
m.poolAllocStats.Unlock()
}
func (m *MemArbitrator) alloc(x int64) {
m.mu.Lock()
m.doAlloc(x)
m.mu.Unlock()
}
func (m *MemArbitrator) doAlloc(x int64) {
m.mu.allocated += x
}
func (m *MemArbitrator) release(x int64) {
if x <= 0 {
return
}
m.alloc(-x)
}
//go:norace
func (m *MemArbitrator) allocated() int64 {
return m.mu.allocated
}
func (m *MemArbitrator) lastBlockedAt() (allocated, utimeSec int64) {
return m.execMu.blockedState.allocated, m.execMu.blockedState.utimeSec
}
//go:norace
func (b *blockedState) reset() {
*b = blockedState{}
}
//go:norace
func (m *MemArbitrator) updateBlockedAt() {
m.execMu.blockedState = blockedState{m.allocated(), m.approxUnixTimeSec()}
}
// Allocated returns the allocated mem quota of the mem-arbitrator
func (m *MemArbitrator) Allocated() int64 {
return m.allocated()
}
// OutOfControl returns the size of the out-of-control mem
func (m *MemArbitrator) OutOfControl() int64 {
return m.avoidance.size.Load()
}
// WaitingAllocSize returns the pending alloc mem quota of the mem-arbitrator
func (m *MemArbitrator) WaitingAllocSize() int64 {
return m.tasks.waitingAlloc.Load()
}
// TaskNum returns the number of pending tasks in the mem-arbitrator
func (m *MemArbitrator) TaskNum() int64 {
return m.tasks.fifoTasks.approxSize()
}
// RootPoolNum returns the number of root pools in the mem-arbitrator
func (m *MemArbitrator) RootPoolNum() int64 {
return m.rootPoolNum.Load()
}
//go:norace
func (m *MemArbitrator) limit() int64 {
return m.mu.limit
}
//go:norace
func (m *MemArbitrator) available() int64 {
return min(m.heapAvailable(), m.quotaAvailable())
}
func (m *MemArbitrator) heapAvailable() int64 {
return m.limit() - m.reservedBuffer() - m.heapController.heapAlloc.Load()
}
func (m *MemArbitrator) quotaAvailable() int64 {
return m.limit() - m.reservedBuffer() - m.OutOfControl() - m.allocated()
}
// Limit returns the mem quota limit of the mem-arbitrator
func (m *MemArbitrator) Limit() uint64 {
if m == nil {
return 0
}
return uint64(m.limit())
}
func (m *MemArbitrator) allocateFromArbitrator(remainBytes int64) (bool, int64) {
reclaimedBytes := int64(0)
ok := false
{
m.mu.Lock()
available := m.quotaAvailable()
if remainBytes <= available {
m.doAlloc(remainBytes)
reclaimedBytes += remainBytes
ok = true
} else if available > 0 {
m.doAlloc(available)
reclaimedBytes += available
}
m.mu.Unlock()
}
return ok, reclaimedBytes
}
func (m *MemArbitrator) doReclaimMemByPriority(target *rootPoolEntry, remainBytes int64) {
underReclaimBytes := int64(0)
// check under canceling pool entries
if m.underCancel.num > 0 {
now := m.innerTime()
for uid, entry := range m.underCancel.entries {
ctx := &entry.arbitratorMu.underCancel
if ctx.fail {
continue
}
if deadline := ctx.startTime.Add(defKillCancelCheckTimeout); now.Compare(deadline) >= 0 {
m.actions.Warn("Failed to `CANCEL` root pool due to timeout",
zap.Uint64("uid", uid),
zap.String("name", entry.pool.name),
zap.Int64("quota-to-reclaim", ctx.reclaim),
zap.String("mem-priority", entry.ctx.memPriority.String()),
zap.Time("start-time", ctx.startTime),
zap.Time("deadline", deadline),
)
ctx.fail = true
continue
}
underReclaimBytes += ctx.reclaim
}
}
// remain-bytes <= 0
if underReclaimBytes >= remainBytes {
return
}
// task whose mode is wait_averse must have been cleaned
for prio := minArbitrationPriority; prio < target.ctx.memPriority; prio++ {
for pos := m.entryMap.maxQuotaShardIndex - 1; pos >= m.entryMap.minQuotaShardIndexToCheck; pos-- {
for _, entry := range m.entryMap.quotaShards[prio][pos].entries {
if entry.arbitratorMu.underCancel.start || entry.notRunning() {
continue
}
if ctx := entry.ctx.Load(); ctx.available() {
m.execMetrics.Cancel.PriorityMode[prio]++
ctx.stop(ArbitratorPriorityCancel)
if m.removeTask(entry) {
entry.windUp(0, ArbitrateFail)
}
m.addUnderCancel(entry, entry.arbitratorMu.quota, m.innerTime())
underReclaimBytes += entry.arbitratorMu.quota
if underReclaimBytes >= remainBytes {
return
}
}
}
}
}
}
func (m *MemArbitrator) allocateFromPrivilegedBudget(target *rootPoolEntry, remainBytes int64) (bool, int64) {
ok := false
if m.privilegedEntry == target {
ok = true
} else if m.privilegedEntry == nil && target.ctx.preferPrivilege {
if target.intoExecPrivileged() {
m.privilegedEntry = target
ok = true
} else {
ok = false
}
}
if !ok {
return false, 0
}
m.alloc(remainBytes)
return ok, remainBytes
}
func (m *MemArbitrator) ableToGC() bool {
return m.mu.released-m.mu.lastGC >= uint64(m.poolAllocStats.SmallPoolLimit)
}
func (m *MemArbitrator) tryRuntimeGC() bool {
if m.ableToGC() {
m.updateTrackedHeapStats()
m.reclaimHeap()
return true
}
return false
}
// reserved buffer for arbitrate process
func (m *MemArbitrator) reservedBuffer() int64 {
if m.execMu.mode == ArbitratorModePriority {
return m.buffer.size.Load()
}
return 0
}
func (m *MemArbitrator) arbitrate(target *rootPoolEntry) (bool, int64) {
reclaimedBytes := int64(0)
remainBytes := target.request.quota
onlyPrivilegedBudget := false
for remainBytes > m.heapAvailable() {
if !m.tryRuntimeGC() {
onlyPrivilegedBudget = true // only could alloc from the privileged budget
break
}
}
{
ok := false
reclaimed := int64(0)
if m.execMu.mode == ArbitratorModePriority {
ok, reclaimed = m.allocateFromPrivilegedBudget(target, remainBytes)
reclaimedBytes += reclaimed
remainBytes -= reclaimed
}
if ok {
return true, reclaimedBytes
} else if onlyPrivilegedBudget {
return false, reclaimedBytes
}
}
for {
ok, reclaimed := m.allocateFromArbitrator(remainBytes)
reclaimedBytes += reclaimed
remainBytes -= reclaimed
if ok {
return true, reclaimedBytes
}
if !m.tryRuntimeGC() {
break
}
}
return false, reclaimedBytes
}
// NewMemArbitrator creates a new mem-arbitrator heap instance
func NewMemArbitrator(limit int64, shardNum uint64, maxQuotaShardNum int, minQuotaForReclaim int64, recorder RecordMemState) *MemArbitrator {
if limit <= 0 {
limit = DefMaxLimit
}
m := &MemArbitrator{
mode: ArbitratorModeDisable,
}
m.tasks.fifoTasks.init()
for i := range m.tasks.fifoByPriority {
m.tasks.fifoByPriority[i].init()
}
shardNum = nextPow2(shardNum)
m.tasks.fifoWaitAverse.init()
m.notifer = NewNotifer()
m.entryMap.init(shardNum, maxQuotaShardNum, minQuotaForReclaim)
m.doSetLimit(limit)
m.resetStatistics()
m.setMinHeapFreeBPS(defMinHeapFreeBPS)
m.cleanupMu.fifoTasks.init()
m.underKill.init()
m.underCancel.init()
{
f := func(string, ...zap.Field) {}
m.actions.Info = f
m.actions.Warn = f
m.actions.Error = f
}
{
m.heapController.memStateRecorder.Lock()
m.heapController.memStateRecorder.RecordMemState = recorder
if s, err := recorder.Load(); err == nil && s != nil {
m.heapController.memStateRecorder.lastMemState.Store(s)
m.doSetMemMagnif(s.Magnif)
m.poolAllocStats.mediumQuota.Store(s.PoolMediumCap)
}
m.heapController.memStateRecorder.Unlock()
}
m.resetDigestProfileCache(shardNum)
return m
}
func (m *MemArbitrator) resetDigestProfileCache(shardNum uint64) {
m.digestProfileCache.shards = make([]digestProfileShard, shardNum)
m.digestProfileCache.shardsMask = shardNum - 1
m.digestProfileCache.num.Store(0)
m.digestProfileCache.limit = defMaxDigestProfileCacheLimit
}
// SetDigestProfileCacheLimit sets the limit of the digest profile cache
func (m *MemArbitrator) SetDigestProfileCacheLimit(limit int64) {
m.digestProfileCache.limit = min(max(0, limit), defMax)
}
func (m *MemArbitrator) doCancelPendingTasks(prio ArbitrationPriority, waitAverse bool) (cnt int64) {
var entries [64]*rootPoolEntry
fifo := &m.tasks.fifoWaitAverse
reason := ArbitratorWaitAverseCancel
if !waitAverse {
fifo = &m.tasks.fifoByPriority[prio]
reason = ArbitratorStandardCancel
}
for {
size := 0
{
m.tasks.Lock()
for {
entry := fifo.front()
if entry == nil {
break
}
if m.removeTaskImpl(entry) {
entries[size] = entry
size++
}
if size == len(entries) {
break
}
}
m.tasks.Unlock()
}
for i := range size {
entry := entries[i]
if ctx := entry.ctx.Load(); ctx.available() {
ctx.stop(reason)
}
entry.windUp(0, ArbitrateFail)
}
cnt += int64(size)
if size != len(entries) {
break
}
}
return cnt
}
func (m *MemArbitrator) doExecuteFirstTask() (exec bool) {
if m.tasks.fifoTasks.approxEmpty() {
return
}
entry := m.extractFirstTaskEntry()
if entry == nil {
return
}
if entry.arbitratorMu.destroyed {
if m.removeTask(entry) {
entry.windUp(0, ArbitrateFail)
}
return true
}
{
entry.request.taskMu.Lock()
ok, reclaimedBytes := m.arbitrate(entry)
if ok {
exec = true
if m.removeTask(entry) {
if m.execMu.mode == ArbitratorModePriority {
m.execMetrics.Task.SuccByPriority[entry.taskMu.fifoByPriority.priority]++
}
m.entryMap.addQuota(entry, reclaimedBytes)
// wind up & publish the result
entry.windUp(reclaimedBytes, ArbitrateOk)
} else {
// subscription task may have been canceled
m.release(reclaimedBytes)
}
} else {
m.release(reclaimedBytes)
m.updateBlockedAt()
m.doReclaimByWorkMode(entry, reclaimedBytes)
}
entry.request.taskMu.Unlock()
}
return
}
func (m *MemArbitrator) doReclaimNonBlockingTasks() {
if m.execMu.mode == ArbitratorModeStandard {
for prio := minArbitrationPriority; prio < maxArbitrationPriority; prio++ {
if m.taskNumByPriority(prio) != 0 {
m.execMetrics.Cancel.StandardMode += m.doCancelPendingTasks(prio, false)
}
}
} else if m.taskNumOfWaitAverse() != 0 {
m.execMetrics.Cancel.WaitAverse += m.doCancelPendingTasks(maxArbitrationPriority, true)
}
}
func (m *MemArbitrator) doReclaimByWorkMode(entry *rootPoolEntry, reclaimedBytes int64) {
waitAverse := entry.ctx.waitAverse
m.doReclaimNonBlockingTasks()
// entry's ctx may have been modified
if waitAverse {
return
}
if m.execMu.mode == ArbitratorModePriority {
m.doReclaimMemByPriority(entry, entry.request.quota-reclaimedBytes)
}
}
func (m *MemArbitrator) doExecuteCleanupTasks() {
for {
var entry *rootPoolEntry
{
m.cleanupMu.Lock()
entry = m.cleanupMu.fifoTasks.popFront()
m.cleanupMu.Unlock()
}
if entry == nil {
break
}
if m.privilegedEntry == entry {
m.privilegedEntry = nil
}
m.deleteUnderCancel(entry)
m.deleteUnderKill(entry)
if !entry.stateMu.stop.Load() { // reset pool entry
toRelease := entry.stateMu.quotaToReclaim.Swap(0)
if toRelease > 0 {
m.release(toRelease)
atomic.AddUint64(&m.mu.released, uint64(toRelease))
m.entryMap.addQuota(entry, -toRelease)
}
} else {
if !entry.arbitratorMu.destroyed {
if entry.arbitratorMu.quota > 0 {
m.release(entry.arbitratorMu.quota)
atomic.AddUint64(&m.mu.released, uint64(entry.arbitratorMu.quota))
}
m.entryMap.delete(entry)
m.rootPoolNum.Add(-1)
entry.arbitratorMu.destroyed = true
}
if m.removeTask(entry) {
entry.windUp(0, ArbitrateFail)
}
}
}
}
func (m *MemArbitrator) implicitRun() { // satisfy any subscription task
if m.tasks.fifoTasks.approxEmpty() {
return
}
for { // make all tasks success
entry := m.frontTaskEntry()
if entry == nil {
break
}
if entry.arbitratorMu.destroyed {
if m.removeTask(entry) {
entry.windUp(0, ArbitrateFail)
}
continue
}
{
entry.request.taskMu.Lock()
quota := entry.request.quota
if m.removeTask(entry) {
m.alloc(quota)
m.entryMap.addQuota(entry, quota)
entry.windUp(quota, ArbitrateOk)
}
entry.request.taskMu.Unlock()
}
}
}
// -1: at ArbitratorModeDisable
// -2: mem unsafe
// >= 0: execute / cancel task num
func (m *MemArbitrator) runOneRound() (taskExecNum int) {
m.execMu.startTime = now()
if t := m.execMu.startTime.Unix(); t != m.approxUnixTimeSec() { // update per second duration and reduce force sharing
m.setUnixTimeSec(t)
}
if mode := m.workMode(); m.execMu.mode != mode {
m.execMu.mode = mode
if mode == ArbitratorModeDisable { // switch to disable mode
m.setMemSafe()
m.execMu.blockedState.reset()
}
}
if !m.cleanupMu.fifoTasks.approxEmpty() {
m.doExecuteCleanupTasks()
}
if m.execMu.mode == ArbitratorModeDisable {
m.implicitRun()
return -1
}
if !m.handleMemIssues() { // mem is still unsafe
return -2
}
for m.doExecuteFirstTask() {
taskExecNum++
}
return taskExecNum
}
func (m *MemArbitrator) asyncRun(duration time.Duration) bool {
if m.controlMu.running.Load() {
return false
}
m.controlMu.running.Store(true)
m.controlMu.finishCh = make(chan struct{})
go func() {
ticker := time.NewTicker(duration)
for m.controlMu.running.Load() {
select {
case <-ticker.C:
m.weakWake()
case <-m.notifer.C:
m.notifer.clear()
m.runOneRound()
}
}
ticker.Stop()
close(m.controlMu.finishCh)
}()
return true
}
// RestartEntryByContext starts the root pool with the given context
func (m *MemArbitrator) RestartEntryByContext(p rootPoolWrap, ctx *ArbitrationContext) bool {
entry := p.entry
if entry == nil {
return false
}
entry.stateMu.Lock()
defer entry.stateMu.Unlock()
if entry.stateMu.stop.Load() || entry.execState() != execStateIdle {
return false
}
entry.pool.mu.Lock()
defer entry.pool.mu.Unlock()
if ctx != nil {
if ctx.waitAverse {
entry.ctx.preferPrivilege = false
entry.ctx.memPriority = ArbitrationPriorityHigh
} else {
entry.ctx.preferPrivilege = ctx.preferPrivilege
entry.ctx.memPriority = ctx.memPriority
}
entry.ctx.cancelCh = ctx.cancelCh
entry.ctx.waitAverse = ctx.waitAverse
} else {
entry.ctx.cancelCh = nil
entry.ctx.waitAverse = false
entry.ctx.memPriority = ArbitrationPriorityMedium
entry.ctx.preferPrivilege = false
}
entry.ctx.canceled.Store(false)
entry.ctx.Store(ctx)
if _, loaded := m.entryMap.contextCache.LoadOrStore(entry.pool.uid, entry); !loaded {
m.entryMap.contextCache.num.Add(1)
}
entry.pool.doSetOutOfCapacityAction(func(s OutOfCapacityActionArgs) error {
if m.blockingAllocate(entry, s.Request) != ArbitrateOk {
return errArbitrateFailError
}
return nil
})
entry.pool.mu.stopped = false
entry.setExecState(execStateRunning)
return true
}
// DebugFields is used to store debug fields for logging
type DebugFields struct {
fields [30]zap.Field
n int
}
// ConcurrentBudget represents a wrapped budget of the resource pool for concurrent usage
type ConcurrentBudget struct {
Pool *ResourcePool
Capacity int64
LastUsedTimeSec int64
sync.Mutex
_ cpuCacheLinePad
Used atomic.Int64
_ cpuCacheLinePad
}
//go:norace
func (b *ConcurrentBudget) setLastUsedTimeSec(t int64) {
b.LastUsedTimeSec = t
}
//go:norace
func (b *ConcurrentBudget) approxCapacity() int64 {
return b.Capacity
}
func (b *ConcurrentBudget) getLastUsedTimeSec() int64 {
return b.LastUsedTimeSec
}
// TrackedConcurrentBudget consists of ConcurrentBudget and heap inuse
type TrackedConcurrentBudget struct {
ConcurrentBudget
HeapInuse atomic.Int64
_ cpuCacheLinePad
}
// Stop stops the concurrent budget and releases all the capacity and make the pool non-allocatable
func (b *ConcurrentBudget) Stop() int64 {
b.Lock()
defer b.Unlock()
b.Pool.SetOutOfCapacityAction(func(OutOfCapacityActionArgs) error {
return errArbitrateFailError
})
budgetCap := b.Capacity
b.Capacity = 0
b.Used.Store(0)
if budgetCap > 0 {
b.Pool.release(budgetCap)
}
return budgetCap
}
// Reserve reserves a given capacity for the concurrent budget
func (b *ConcurrentBudget) Reserve(newCap int64) (err error) {
b.Lock()
extra := max(newCap, b.Used.Load(), b.Capacity) - b.Capacity
if err = b.Pool.allocate(extra); err == nil {
b.Capacity += extra
}
b.Unlock()
return
}
// PullFromUpstream tries to pull from the upstream pool when facing `out of capacity`
// It requires the action of the pool to be non-blocking
func (b *ConcurrentBudget) PullFromUpstream() (err error) {
b.Lock()
delta := b.Used.Load() - b.Capacity
if delta > 0 {
delta = b.Pool.roundSize(delta)
if err = b.Pool.allocate(delta); err == nil {
b.Capacity += delta
}
}
b.Unlock()
return
}
// AutoRun starts the work groutine of the mem-arbitrator asynchronously
func (m *MemArbitrator) AutoRun(
actions MemArbitratorActions,
awaitFreePoolAllocAlignSize, awaitFreePoolShardNum int64,
taskTickDur time.Duration,
) bool {
m.controlMu.Lock()
defer m.controlMu.Unlock()
if m.controlMu.running.Load() {
return false
}
{ // init
m.actions = actions
m.refreshRuntimeMemStats()
m.initAwaitFreePool(awaitFreePoolAllocAlignSize, awaitFreePoolShardNum)
}
return m.asyncRun(taskTickDur)
}
func (m *MemArbitrator) refreshRuntimeMemStats() {
if m.actions.UpdateRuntimeMemStats != nil {
m.actions.UpdateRuntimeMemStats() // should invoke `SetRuntimeMemStats`
}
atomic.AddInt64(&m.execMetrics.Action.UpdateRuntimeMemStats, 1)
}
func (m *MemArbitrator) trySetRuntimeMemStats(s memStats) bool {
if m.heapController.TryLock() {
m.doSetRuntimeMemStats(s)
m.heapController.Unlock()
return true
}
return false
}
func (m *MemArbitrator) setRuntimeMemStats(s memStats) {
m.heapController.Lock()
m.doSetRuntimeMemStats(s)
m.heapController.Unlock()
}
func (m *MemArbitrator) doSetRuntimeMemStats(s memStats) {
m.heapController.heapAlloc.Store(s.HeapAlloc)
m.heapController.heapInuse.Store(s.HeapInuse)
m.heapController.heapTotalFree.Store(s.TotalFree)
m.heapController.memOffHeap.Store(s.MemOffHeap)
m.heapController.memInuse.Store(s.MemOffHeap + s.HeapInuse)
if s.LastGC > m.heapController.lastGC.utime.Load() {
m.heapController.lastGC.heapAlloc.Store(s.HeapAlloc)
m.heapController.lastGC.utime.Store(s.LastGC)
}
m.updateAvoidSize() // calc out-of-control & avoid size
}
func (m *MemArbitrator) updateAvoidSize() {
capacity := m.softLimit()
if m.mu.softLimit.mode == SoftLimitModeAuto {
if ratio := m.memMagnif(); ratio != 0 {
newCap := calcRatio(m.limit(), ratio)
capacity = min(capacity, newCap)
}
}
avoidSize := max(
0,
m.heapController.heapAlloc.Load()+m.heapController.memOffHeap.Load()-m.avoidance.heapTracked.Load(), // out-of-control size
m.limit()-capacity,
)
m.avoidance.size.Store(avoidSize)
if delta := m.allocated() - m.limit() + avoidSize; delta > 0 && m.awaitFree.pool.allocated() > 0 {
reclaimed := int64(0)
poolReleased := int64(0)
for i := range len(m.awaitFree.budget.shards) {
idx := (m.avoidance.awaitFreeBudgetKickOutIdx + uint64(i) + 1) & m.awaitFree.budget.sizeMask
b := &m.awaitFree.budget.shards[idx]
if b.approxCapacity() > 0 && b.TryLock() {
x := min(delta-reclaimed, b.Capacity)
b.Capacity -= x
reclaimed += x
b.Unlock()
}
if reclaimed >= delta {
m.avoidance.awaitFreeBudgetKickOutIdx = idx
break
}
}
if reclaimed > 0 {
poolReleased = m.awaitFree.pool.releasePopBudget(reclaimed)
}
if poolReleased > 0 {
m.release(poolReleased)
atomic.AddInt64(&m.execMetrics.AwaitFree.ForceShrink, 1)
atomic.AddUint64(&m.mu.released, uint64(poolReleased))
}
}
}
func (p *ResourcePool) releasePopBudget(c int64) int64 {
p.mu.Lock()
p.doRelease(c)
released := p.mu.budget.available()
p.mu.budget.cap -= released
p.mu.Unlock()
return released
}
func (m *MemArbitrator) weakWake() {
m.notifer.WeakWake()
}
func (m *MemArbitrator) wake() {
m.notifer.Wake()
}
func (m *MemArbitrator) updatePoolMediumCapacity(utimeMilli int64) {
s := &m.poolAllocStats
const maxNum = int64(len(s.timedMap))
const maxDur = maxNum - defRedundancy
{
s.RLock()
tsAlign := utimeMilli / kilo / defUpdateMemConsumedTimeAlignSec
tar1 := &s.timedMap[(maxNum+tsAlign-1)%maxNum]
tar2 := &s.timedMap[tsAlign%maxNum]
if ts := tar1.tsAlign.Load(); ts <= tsAlign-maxDur || ts > tsAlign {
tar1 = nil
}
if ts := tar2.tsAlign.Load(); ts <= tsAlign-maxDur || ts > tsAlign {
tar2 = nil
}
total := uint64(0)
if tar1 != nil {
tar1.RLock()
total += tar1.num.Load()
}
if tar2 != nil {
tar2.RLock()
total += tar2.num.Load()
}
if total != 0 {
expect := max(1, (total+1)/2)
cnt := uint64(0)
index := 0
for i := range defServerlimitMinUnitNum {
if tar1 != nil {
cnt += uint64(tar1.slot[i])
}
if tar2 != nil {
cnt += uint64(tar2.slot[i])
}
if cnt >= expect {
index = i
break
}
}
res := s.PoolAllocUnit * int64(index+1)
s.mediumQuota.Store(res)
}
if tar1 != nil {
tar1.RUnlock()
}
if tar2 != nil {
tar2.RUnlock()
}
s.RUnlock()
}
m.tryStorePoolMediumCapacity(utimeMilli, m.poolMediumQuota())
}
func (m *MemArbitrator) tryStorePoolMediumCapacity(utimeMilli int64, capacity int64) bool {
if capacity == 0 {
return false
}
if lastState := m.lastMemState(); lastState == nil ||
(m.poolAllocStats.lastUpdateUtimeMilli.Load()+defStorePoolMediumCapDurMilli <= utimeMilli &&
lastState.PoolMediumCap != capacity) {
var memState *RuntimeMemStateV1
if lastState != nil {
s := *lastState // copy
s.PoolMediumCap = capacity
memState = &s
} else {
memState = &RuntimeMemStateV1{
Version: 1,
PoolMediumCap: capacity,
}
}
_ = m.recordMemState(memState, "new root pool medium cap")
m.poolAllocStats.lastUpdateUtimeMilli.Store(utimeMilli)
return true
}
return false
}
func (m *MemArbitrator) poolMediumQuota() int64 {
return m.poolAllocStats.mediumQuota.Load()
}
// SuggestPoolInitCap returns the suggested initial capacity for the pool
func (m *MemArbitrator) SuggestPoolInitCap() int64 {
return m.poolMediumQuota()
}
func (m *MemArbitrator) updateMemMagnification(utimeMilli int64) (updatedPreProf *memProfile) {
const maxNum = int64(len(m.heapController.timedMemProfile))
curTsAlign := utimeMilli / kilo / defUpdateMemMagnifUtimeAlign
profs := &m.heapController.timedMemProfile
cur := &profs[curTsAlign%maxNum]
if cur.tsAlign < curTsAlign {
{ // update previous record
preTs := curTsAlign - 1
preIdx := (maxNum + preTs) % maxNum
pre := &profs[preIdx]
pre.ratio = 0
if pre.tsAlign == preTs && pre.quota > 0 {
if pre.heap > 0 {
pre.ratio = calcRatio(pre.heap, pre.quota)
}
updatedPreProf = pre
}
}
v := int64(0)
// check the memory profile in the last 60s
for _, tsAlign := range []int64{curTsAlign - 2, curTsAlign - 1} {
tar := &profs[(maxNum+tsAlign)%maxNum]
if tar.tsAlign != tsAlign ||
tar.heap >= m.oomRisk() { // calculate the magnification only when the heap is safe
v = 0
break
}
if tar.ratio <= 0 {
break // if any record is not valid,
}
v = max(v, tar.ratio)
}
updated := false
var oriRatio, newRatio int64
if v != 0 && m.avoidance.memMagnif.TryLock() {
if oriRatio = m.memMagnif(); oriRatio != 0 && v < oriRatio-10 /* 1 percent */ {
newRatio = (oriRatio + v) / 2
if newRatio <= kilo {
newRatio = 0
}
m.doSetMemMagnif(newRatio)
updated = true
}
m.avoidance.memMagnif.Unlock()
}
if updated {
m.actions.Info("Update mem quota magnification ratio",
zap.Int64("ori-ratio(‰)", oriRatio),
zap.Int64("new-ratio(‰)", newRatio),
)
if lastMemState := m.lastMemState(); lastMemState != nil && newRatio < lastMemState.Magnif {
memState := RuntimeMemStateV1{
Version: 1,
Magnif: newRatio,
PoolMediumCap: m.poolMediumQuota(),
}
_ = m.recordMemState(&memState, "new magnification ratio")
}
}
*cur = memProfile{
tsAlign: curTsAlign,
startUtimeMilli: utimeMilli,
}
}
if cur.tsAlign == curTsAlign {
if ut := m.heapController.lastGC.utime.Load(); curTsAlign == ut/int64(time.Second)/defUpdateMemMagnifUtimeAlign {
cur.heap = max(cur.heap, m.heapController.lastGC.heapAlloc.Load())
}
if blockedSize, utimeSec := m.lastBlockedAt(); utimeSec/defUpdateMemMagnifUtimeAlign == curTsAlign {
cur.quota = max(cur.quota, blockedSize)
}
}
return
}
func (m *MemArbitrator) doSetMemMagnif(ratio int64) {
m.avoidance.memMagnif.ratio.Store(ratio)
}
func (m *MemArbitrator) memMagnif() int64 {
return m.avoidance.memMagnif.ratio.Load()
}
//go:norace
func (m *MemArbitrator) awaitFreePoolCap() int64 {
if m.awaitFree.pool == nil {
return 0
}
return m.awaitFree.pool.capacity()
}
type memPoolQuotaUsage struct{ trackedHeap, quota int64 }
//go:norace
func (m *MemArbitrator) awaitFreePoolUsed() (res memPoolQuotaUsage) {
for i := range m.awaitFree.budget.shards {
if d := m.awaitFree.budget.shards[i].Used.Load(); d > 0 {
res.quota += d
}
if d := m.awaitFree.budget.shards[i].HeapInuse.Load(); d > 0 {
res.trackedHeap += d
}
}
m.awaitFree.lastQuotaUsage = res
return
}
//go:norace
func (m *MemArbitrator) approxAwaitFreePoolUsed() memPoolQuotaUsage {
return m.awaitFree.lastQuotaUsage
}
func (m *MemArbitrator) executeTick(utimeMilli int64) bool { // exec batch tasks every 1s
if m.atMemRisk() { // skip if oom check is running because mem state is not safe
return false
}
if m.tickTask.lastTickUtimeMilli.Load()+defTickDurMilli > utimeMilli {
return false
}
m.tickTask.Lock()
defer m.tickTask.Unlock()
m.tickTask.lastTickUtimeMilli.Store(utimeMilli)
// mem magnification
if updatedPreProf := m.updateMemMagnification(utimeMilli); updatedPreProf != nil {
pre := updatedPreProf
profile := m.recordDebugProfile()
profile.append(
zap.Int64("last-blocked-heap", pre.heap), zap.Int64("last-blocked-quota", pre.quota),
zap.Int64("last-magnification-ratio(‰)", pre.ratio),
zap.Time("last-prof-start-time", time.UnixMilli(pre.startUtimeMilli)),
)
m.actions.Info("Mem profile timeline",
profile.fields[:profile.n]...,
)
}
// suggest pool cap
m.updatePoolMediumCapacity(utimeMilli)
// shrink mem profile cache
m.shrinkDigestProfile(utimeMilli/kilo, m.digestProfileCache.limit, m.digestProfileCache.limit/2)
return true
}
func (d *DebugFields) append(f ...zap.Field) {
n := min(len(f), len(d.fields)-d.n)
for i := range n {
d.fields[d.n] = f[i]
d.n++
}
}
func (m *MemArbitrator) recordDebugProfile() (f DebugFields) {
taskNumByMode := m.TaskNumByPattern()
memMagnif := m.memMagnif()
if memMagnif == 0 {
memMagnif = -1
}
f.append(
zap.Int64("heap-inuse", m.heapController.heapInuse.Load()),
zap.Int64("heap-alloc", m.heapController.heapAlloc.Load()),
zap.Int64("mem-off-heap", m.heapController.memOffHeap.Load()),
zap.Int64("hard-limit", m.limit()),
zap.Int64("quota-allocated", m.allocated()),
zap.Int64("quota-softlimit", m.softLimit()),
zap.Int64("mem-magnification-ratio(‰)", memMagnif),
zap.Int64("root-pool-num", m.RootPoolNum()),
zap.Int64("awaitfree-pool-cap", m.awaitFreePoolCap()),
zap.Int64("awaitfree-pool-used", m.approxAwaitFreePoolUsed().quota),
zap.Int64("awaitfree-pool-heapinuse", m.approxAwaitFreePoolUsed().trackedHeap),
zap.Int64("tracked-heapinuse", m.avoidance.heapTracked.Load()),
zap.Int64("out-of-control", m.OutOfControl()),
zap.Int64("buffer", m.buffer.size.Load()),
zap.Int64("task-num", m.TaskNum()),
zap.Int64("task-priority-low", taskNumByMode[ArbitrationPriorityLow]),
zap.Int64("task-priority-medium", taskNumByMode[ArbitrationPriorityMedium]),
zap.Int64("task-priority-high", taskNumByMode[ArbitrationPriorityHigh]),
zap.Int64("pending-alloc-size", m.WaitingAllocSize()),
zap.Int64("digest-cache-num", m.digestProfileCache.num.Load()),
)
if t := m.heapController.memRisk.startTime.unixMilli.Load(); t != 0 {
f.append(zap.Time("mem-risk-start", time.UnixMilli(t)))
}
return
}
type memStats struct {
HeapAlloc, HeapInuse, TotalFree, MemOffHeap, LastGC int64
}
// HandleRuntimeStats handles the runtime memory statistics
func (m *MemArbitrator) HandleRuntimeStats(s memStats) {
// shrink fast alloc pool
m.tryShrinkAwaitFreePool(defPoolReservedQuota, nowUnixMilli())
// update tracked mem stats
m.tryUpdateTrackedMemStats(nowUnixMilli())
// set runtime mem stats & update avoidance size
m.trySetRuntimeMemStats(s)
m.executeTick(nowUnixMilli())
m.weakWake()
}
func (m *MemArbitrator) tryUpdateTrackedMemStats(utimeMilli int64) bool {
if m.avoidance.heapTracked.lastUpdateUtimeMilli.Load()+defTrackMemStatsDurMilli <= utimeMilli {
m.updateTrackedHeapStats()
return true
}
return false
}
func (m *MemArbitrator) updateTrackedHeapStats() {
totalTrackedHeap := int64(0)
if m.entryMap.contextCache.num.Load() != 0 {
maxMemUsed := int64(0)
m.entryMap.contextCache.Range(func(_, value any) bool {
e := value.(*rootPoolEntry)
if e.notRunning() {
return true
}
if ctx := e.ctx.Load(); ctx.available() {
if memUsed := ctx.arbitrateHelper.HeapInuse(); memUsed > 0 {
totalTrackedHeap += memUsed
maxMemUsed = max(maxMemUsed, memUsed)
}
}
return true
})
if m.buffer.size.Load() < maxMemUsed {
m.tryToUpdateBuffer(maxMemUsed, m.approxUnixTimeSec())
}
}
totalTrackedHeap += m.awaitFreePoolUsed().trackedHeap
m.avoidance.heapTracked.Store(totalTrackedHeap)
m.avoidance.heapTracked.lastUpdateUtimeMilli.Store(nowUnixMilli())
}
func (m *MemArbitrator) tryShrinkAwaitFreePool(minRemain int64, utimeMilli int64) bool {
if m.awaitFree.lastShrinkUtimeMilli.Load()+defAwaitFreePoolShrinkDurMilli <= utimeMilli {
m.shrinkAwaitFreePool(minRemain, utimeMilli)
return true
}
return false
}
func (m *MemArbitrator) shrinkAwaitFreePool(minRemain int64, utimeMilli int64) {
if m.awaitFree.pool.allocated() <= 0 {
return
}
poolReleased := int64(0)
reclaimed := int64(0)
for i := range m.awaitFree.budget.shards {
b := &m.awaitFree.budget.shards[i]
if used := b.Used.Load(); used > 0 {
if b.approxCapacity()-(used+minRemain) >= b.Pool.allocAlignSize && b.TryLock() {
if used = b.Used.Load(); used > 0 {
toReclaim := b.Capacity - (used + minRemain)
if toReclaim >= b.Pool.allocAlignSize {
b.Capacity -= toReclaim
reclaimed += toReclaim
}
}
b.Unlock()
}
} else {
if b.approxCapacity() > 0 && b.getLastUsedTimeSec()*kilo+defAwaitFreePoolShrinkDurMilli <= utimeMilli && b.TryLock() {
if toReclaim := b.Capacity; b.Used.Load() <= 0 && toReclaim > 0 {
b.Capacity -= toReclaim
reclaimed += toReclaim
}
b.Unlock()
}
}
}
if reclaimed > 0 {
poolReleased = m.awaitFree.pool.releasePopBudget(reclaimed)
}
if poolReleased > 0 {
m.release(poolReleased)
atomic.AddUint64(&m.mu.released, uint64(poolReleased))
atomic.AddInt64(&m.execMetrics.AwaitFree.Shrink, 1)
m.weakWake()
}
m.awaitFree.lastShrinkUtimeMilli.Store(utimeMilli)
}
func (m *MemArbitrator) isMemSafe() bool {
return m.heapController.memInuse.Load() < m.oomRisk()
}
func (m *MemArbitrator) isMemNoRisk() bool {
return m.isMemSafe() && m.heapController.heapAlloc.Load() < m.memRisk()
}
func (m *MemArbitrator) calcMemRisk() *RuntimeMemStateV1 {
if m.mu.softLimit.mode != SoftLimitModeAuto {
return nil
}
memState := RuntimeMemStateV1{
Version: 1,
LastRisk: LastRisk{
HeapAlloc: m.heapController.heapAlloc.Load(),
QuotaAlloc: m.allocated(),
},
PoolMediumCap: m.poolMediumQuota(),
}
if memState.LastRisk.QuotaAlloc == 0 || memState.LastRisk.HeapAlloc <= memState.LastRisk.QuotaAlloc {
return nil
}
memState.Magnif = calcRatio(memState.LastRisk.HeapAlloc, memState.LastRisk.QuotaAlloc) + 100 /* 10 percent */
if p := m.lastMemState(); p != nil {
memState.Magnif = max(memState.Magnif, p.Magnif)
}
return &memState
}
// return `true` is memory state is safe
func (m *MemArbitrator) handleMemIssues() (isSafe bool) {
if m.atMemRisk() {
gcExecuted := m.tryRuntimeGC()
if !gcExecuted {
m.refreshRuntimeMemStats()
}
if m.isMemNoRisk() {
m.updateTrackedHeapStats()
m.updateAvoidSize() // no need to refresh runtime mem stats
{ // warning
profile := m.recordDebugProfile()
m.actions.Info("Memory is safe", profile.fields[:profile.n]...)
}
m.setMemSafe()
return true
}
m.doReclaimNonBlockingTasks()
m.handleMemRisk(gcExecuted)
return false
} else if !m.isMemSafe() {
m.doReclaimNonBlockingTasks()
m.intoMemRisk()
return false
}
return true
}
func (*MemArbitrator) innerTime() time.Time {
if intest.InTest {
if mockNow != nil {
return mockNow()
}
}
return now()
}
func (m *MemArbitrator) handleMemRisk(gcExecuted bool) {
now := m.innerTime()
oomRisk := m.heapController.memInuse.Load() > m.limit()
dur := now.Sub(m.heapController.memRisk.lastMemStats.startTime)
if !oomRisk && dur < defHeapReclaimCheckDuration {
return
}
heapUseBPS := int64(0)
if dur > 0 {
heapFrees := m.heapController.heapTotalFree.Load() - m.heapController.memRisk.lastMemStats.heapTotalFree
heapUseBPS = int64(float64(heapFrees) / dur.Seconds())
}
if oomRisk || memHangRisk(heapUseBPS, m.minHeapFreeBPS(), now, m.heapController.memRisk.startTime.t) {
m.intoOOMRisk()
memToReclaim := m.heapController.memInuse.Load() - m.memRisk()
{ // warning
profile := m.recordDebugProfile()
profile.append(
zap.Float64("heap-use-speed(MiB/s)", float64(heapUseBPS*100/byteSizeMB)/100),
zap.Float64("required-speed(MiB/s)", float64(m.minHeapFreeBPS())/float64(byteSizeMB)),
zap.Int64("quota-to-reclaim", max(0, memToReclaim)),
)
m.actions.Warn("`OOM RISK`: try to `KILL` running root pool", profile.fields[:profile.n]...)
}
if newKillNum, reclaiming := m.killTopnEntry(memToReclaim); newKillNum != 0 {
m.heapController.memRisk.startTime.t = m.innerTime() // restart oom check
m.heapController.memRisk.startTime.unixMilli.Store(m.heapController.memRisk.startTime.t.UnixMilli())
{ // warning
profile := m.recordDebugProfile()
profile.append(
zap.Int64("pool-under-kill-num", m.underKill.num),
zap.Int("new-kill-num", newKillNum),
zap.Int64("quota-under-reclaim", reclaiming),
zap.Int64("rest-quota-to-reclaim", max(0, memToReclaim-reclaiming)),
)
m.actions.Warn("Restart runtime memory check", profile.fields[:profile.n]...)
}
} else {
underKillNum := 0
for _, entry := range m.underKill.entries {
if !entry.arbitratorMu.underKill.fail {
underKillNum++
}
}
if underKillNum == 0 {
forceKill := 0
for { // make all tasks success
entry := m.frontTaskEntry()
if entry == nil {
break
}
// force kill
if ctx := entry.ctx.Load(); ctx.available() {
ctx.stop(ArbitratorOOMRiskKill)
m.execMetrics.Risk.OOMKill[entry.ctx.memPriority]++
forceKill++
if m.removeTask(entry) {
entry.windUp(0, ArbitrateFail)
}
}
}
if forceKill != 0 {
profile := m.recordDebugProfile()
profile.append(
zap.Int("kill-awaiting-num", forceKill),
zap.Int64("pool-under-kill-num", m.underKill.num),
zap.Int64("quota-under-reclaim", reclaiming),
zap.Int64("rest-quota-to-reclaim", max(0, memToReclaim-reclaiming)),
)
m.actions.Warn("No more running root pool can be killed to resolve `OOM RISK`; KILL all awaiting tasks;",
profile.fields[:profile.n]...,
)
} else {
profile := m.recordDebugProfile()
profile.append(
zap.Int64("pool-under-kill-num", m.underKill.num),
zap.Int64("quota-under-reclaim", reclaiming),
zap.Int64("rest-quota-to-reclaim", max(0, memToReclaim-reclaiming)),
)
m.actions.Warn("No more running root pool or awaiting task can be terminated to resolve `OOM RISK`",
profile.fields[:profile.n]...,
)
}
}
}
} else {
{ // warning
profile := m.recordDebugProfile()
profile.append(zap.Float64("heap-use-speed(MiB/s)",
float64(heapUseBPS*100/byteSizeMB)/100),
zap.Float64("required-speed(MiB/s)", float64(m.minHeapFreeBPS())/float64(byteSizeMB)))
m.actions.Warn("Runtime memory free speed meets require, start re-check", profile.fields[:profile.n]...)
}
}
if dur >= defHeapReclaimCheckDuration {
m.heapController.memRisk.lastMemStats.heapTotalFree = m.heapController.heapTotalFree.Load()
m.heapController.memRisk.lastMemStats.startTime = m.innerTime()
}
if !gcExecuted {
m.gc()
}
}
func memHangRisk(freeSpeedBPS, minHeapFreeSpeedBPS int64, now, startTime time.Time) bool {
return freeSpeedBPS < minHeapFreeSpeedBPS || now.Sub(startTime) > defHeapReclaimCheckMaxDuration
}
func (m *MemArbitrator) killTopnEntry(required int64) (newKillNum int, reclaimed int64) {
if m.underKill.num > 0 {
now := m.innerTime()
for uid, entry := range m.underKill.entries {
ctx := &entry.arbitratorMu.underKill
if ctx.fail {
continue
}
if deadline := ctx.startTime.Add(defKillCancelCheckTimeout); now.Compare(deadline) >= 0 {
m.actions.Error("Failed to `KILL` root pool due to timeout",
zap.Uint64("uid", uid),
zap.String("name", entry.pool.name),
zap.Int64("mem-to-reclaim", ctx.reclaim),
zap.String("mem-priority", entry.ctx.memPriority.String()),
zap.Time("start-time", ctx.startTime),
zap.Time("deadline", deadline),
)
ctx.fail = true
continue
}
reclaimed += ctx.reclaim
}
}
if reclaimed >= required {
return
}
for prio := minArbitrationPriority; prio < maxArbitrationPriority; prio++ {
for pos := m.entryMap.maxQuotaShardIndex - 1; pos >= m.entryMap.minQuotaShardIndexToCheck; pos-- {
for uid, entry := range m.entryMap.quotaShards[prio][pos].entries {
if entry.arbitratorMu.underKill.start || entry.notRunning() {
continue
}
if ctx := entry.ctx.Load(); ctx.available() {
memoryUsed := ctx.arbitrateHelper.HeapInuse()
if memoryUsed <= 0 {
continue
}
m.addUnderKill(entry, memoryUsed, m.innerTime())
reclaimed += memoryUsed
ctx.stop(ArbitratorOOMRiskKill)
newKillNum++
m.execMetrics.Risk.OOMKill[prio]++
{ // warning
m.actions.Warn("Start to `KILL` root pool",
zap.Uint64("uid", uid),
zap.String("name", entry.pool.name),
zap.Int64("mem-used", memoryUsed),
zap.String("mem-priority", ctx.memPriority.String()),
zap.Int64("rest-to-reclaim", max(0, required-reclaimed)))
}
if m.removeTask(entry) {
{ // warning
m.actions.Warn("Make the mem quota subscription failed",
zap.Uint64("uid", uid), zap.String("name", entry.pool.name))
}
entry.windUp(0, ArbitrateFail)
}
if reclaimed >= required {
return
}
}
}
}
}
return
}
// LastRisk represents the last risk state of memory
type LastRisk struct {
HeapAlloc int64 `json:"heap"`
QuotaAlloc int64 `json:"quota"`
}
// RuntimeMemStateV1 represents the runtime memory state
type RuntimeMemStateV1 struct {
Version int64 `json:"version"`
LastRisk LastRisk `json:"last-risk"`
// magnification ratio of heap-alloc/quota
Magnif int64 `json:"magnif"`
// medium quota usage of root pools
PoolMediumCap int64 `json:"pool-medium-cap"`
// TODO: top-n profiles by digest
// topNProfiles [3][2]int64 `json:"top-n-profiles"`
}
func (m *MemArbitrator) recordMemState(s *RuntimeMemStateV1, reason string) error {
m.heapController.memStateRecorder.Lock()
defer m.heapController.memStateRecorder.Unlock()
m.heapController.memStateRecorder.lastMemState.Store(s)
if err := m.heapController.memStateRecorder.Store(s); err != nil {
m.execMetrics.Action.RecordMemState.Fail++
return err
}
m.execMetrics.Action.RecordMemState.Succ++
m.actions.Info("Record mem state",
zap.String("reason", reason),
zap.String("data", fmt.Sprintf("%+v", s)),
)
return nil
}
// GetAwaitFreeBudgets returns the concurrent budget shard by the given uid
func (m *MemArbitrator) GetAwaitFreeBudgets(uid uint64) *TrackedConcurrentBudget {
index := shardIndexByUID(uid, m.awaitFree.budget.sizeMask)
return &m.awaitFree.budget.shards[index]
}
func (m *MemArbitrator) initAwaitFreePool(allocAlignSize, shardNum int64) {
if allocAlignSize <= 0 {
allocAlignSize = defAwaitFreePoolAllocAlignSize
}
p := &ResourcePool{
name: "awaitfree-pool",
uid: 0,
limit: DefMaxLimit,
allocAlignSize: allocAlignSize,
maxUnusedBlocks: 0,
}
p.SetOutOfCapacityAction(func(s OutOfCapacityActionArgs) error {
if m.heapController.heapAlloc.Load() > m.oomRisk()-s.Request ||
m.allocated() > m.limit()-m.OutOfControl()-s.Request {
m.updateBlockedAt()
m.execMetrics.AwaitFree.Fail++
return errArbitrateFailError
}
m.alloc(s.Request)
p.forceAddCap(s.Request)
m.execMetrics.AwaitFree.Succ++
return nil
})
m.awaitFree.pool = p
{
cnt := nextPow2(uint64(shardNum))
m.awaitFree.budget.shards = make([]TrackedConcurrentBudget, cnt)
m.awaitFree.budget.sizeMask = cnt - 1
for i := range m.awaitFree.budget.shards {
m.awaitFree.budget.shards[i].Pool = p
}
}
}
// ArbitratorStopReason represents the reason why the arbitrate helper will be stopped
type ArbitratorStopReason int
// ArbitrateHelperReason values
const (
ArbitratorOOMRiskKill ArbitratorStopReason = iota
ArbitratorWaitAverseCancel
ArbitratorStandardCancel
ArbitratorPriorityCancel
)
// String returns the string representation of the ArbitratorStopReason
func (r ArbitratorStopReason) String() (desc string) {
switch r {
case ArbitratorOOMRiskKill:
desc = "KILL(out-of-memory)"
case ArbitratorWaitAverseCancel:
desc = "CANCEL(out-of-quota & wait-averse)"
case ArbitratorStandardCancel:
desc = "CANCEL(out-of-quota & standard-mode)"
case ArbitratorPriorityCancel:
desc = "CANCEL(out-of-quota & priority-mode)"
default:
desc = "UNKNOWN"
}
return
}
// ArbitrateHelper is an interface for the arbitrate helper
type ArbitrateHelper interface {
Stop(ArbitratorStopReason) bool // kill by arbitrator only when meeting oom risk; cancel by arbitrator;
HeapInuse() int64 // track heap usage
Finish()
}
// ArbitrationContext represents the context & properties of the root pool which is accessible for the global mem-arbitrator
type ArbitrationContext struct {
arbitrateHelper ArbitrateHelper
cancelCh <-chan struct{}
memPriority ArbitrationPriority
stopped atomic.Bool
waitAverse bool
preferPrivilege bool
}
func (ctx *ArbitrationContext) available() bool {
if ctx != nil && ctx.arbitrateHelper != nil && !ctx.stopped.Load() {
return true
}
return false
}
func (ctx *ArbitrationContext) stop(reason ArbitratorStopReason) {
if ctx.stopped.Swap(true) {
return
}
ctx.arbitrateHelper.Stop(reason)
}
// NewArbitrationContext creates a new arbitration context
func NewArbitrationContext(
cancelCh <-chan struct{},
arbitrateHelper ArbitrateHelper,
memPriority ArbitrationPriority,
waitAverse bool,
preferPrivilege bool,
) *ArbitrationContext {
return &ArbitrationContext{
cancelCh: cancelCh,
arbitrateHelper: arbitrateHelper,
memPriority: memPriority,
waitAverse: waitAverse,
preferPrivilege: preferPrivilege,
}
}
// NumByPattern represents the number of tasks by 4 pattern: priority(low, medium, high), wait-averse
type NumByPattern [maxArbitrateMode]int64
// TaskNumByPattern returns the number of tasks by pattern and there may be overlap
func (m *MemArbitrator) TaskNumByPattern() (res NumByPattern) {
for i := minArbitrationPriority; i < maxArbitrationPriority; i++ {
res[i] = m.taskNumByPriority(i)
}
res[ArbitrationWaitAverse] = m.taskNumOfWaitAverse()
return
}
// ConsumeQuotaFromAwaitFreePool consumes quota from the awaitfree-pool by the given uid
func (m *MemArbitrator) ConsumeQuotaFromAwaitFreePool(uid uint64, req int64) bool {
return m.GetAwaitFreeBudgets(uid).ConsumeQuota(m.approxUnixTimeSec(), req) == nil
}
// ConsumeQuota consumes quota from the concurrent budget
// req > 0: alloc quota; try to pull from upstream;
// req <= 0: release quota
func (b *ConcurrentBudget) ConsumeQuota(utimeSec int64, req int64) error {
if req > 0 {
if b.getLastUsedTimeSec() != utimeSec {
b.setLastUsedTimeSec(utimeSec)
}
if b.Used.Add(req) > b.approxCapacity() {
if err := b.PullFromUpstream(); err != nil {
return err
}
}
} else {
b.Used.Add(req)
}
return nil
}
// ReportHeapInuseToAwaitFreePool reports the heap inuse to the awaitfree-pool by the given uid
func (m *MemArbitrator) ReportHeapInuseToAwaitFreePool(uid uint64, req int64) {
m.GetAwaitFreeBudgets(uid).ReportHeapInuse(req)
}
// ReportHeapInuse reports the heap inuse to the concurrent budget
// req > 0: consume
// req < 0: release
func (b *TrackedConcurrentBudget) ReportHeapInuse(req int64) {
b.HeapInuse.Add(req)
}
func (m *MemArbitrator) stop() bool {
m.controlMu.Lock()
defer m.controlMu.Unlock()
if !m.controlMu.running.Load() {
return false
}
m.controlMu.running.Store(false)
m.wake()
<-m.controlMu.finishCh
m.runOneRound()
return true
}
// AtMemRisk checks if the memory is under risk
func (m *MemArbitrator) AtMemRisk() bool {
return m.atMemRisk()
}
// AtOOMRisk checks if the memory is under risk
//
//go:norace
func (m *MemArbitrator) AtOOMRisk() bool {
return m.heapController.memRisk.oomRisk
}
func (m *MemArbitrator) atMemRisk() bool {
return m.heapController.memRisk.startTime.unixMilli.Load() != 0
}
func (m *MemArbitrator) intoOOMRisk() {
m.heapController.memRisk.oomRisk = true
m.execMetrics.Risk.OOM++
}
//go:norace
func (m *MemArbitrator) oomRisk() int64 {
return m.mu.threshold.oomRisk
}
//go:norace
func (m *MemArbitrator) memRisk() int64 {
return m.mu.threshold.risk
}
func (m *MemArbitrator) intoMemRisk() {
now := m.innerTime()
m.heapController.memRisk.startTime.t = now
m.heapController.memRisk.startTime.unixMilli.Store(now.UnixMilli())
m.heapController.memRisk.lastMemStats.heapTotalFree = m.heapController.heapTotalFree.Load()
m.heapController.memRisk.lastMemStats.startTime = now
m.execMetrics.Risk.Mem++
{
profile := m.recordDebugProfile()
profile.append(zap.Int64("threshold", m.mu.threshold.oomRisk))
m.actions.Warn("Memory inuse reach threshold", profile.fields[:profile.n]...)
}
{ // GC
m.reclaimHeap()
}
if memState := m.calcMemRisk(); memState != nil {
if memState.Magnif > defMaxMagnif {
// There may be extreme memory leak issues. It's recommended to set soft limit manually.
m.actions.Warn("Memory pressure is abnormally high",
zap.Int64("mem-magnification-ratio(‰)", memState.Magnif),
zap.Int64("upper-limit-ratio(‰)", defMaxMagnif))
memState.Magnif = defMaxMagnif
}
{
m.avoidance.memMagnif.Lock()
m.doSetMemMagnif(memState.Magnif)
m.avoidance.memMagnif.Unlock()
}
if err := m.recordMemState(memState, "oom risk"); err != nil {
m.actions.Error("Failed to save mem-risk", zap.Error(err))
}
}
if m.isMemNoRisk() {
m.wake()
}
}
func (m *MemArbitrator) setMemSafe() {
m.heapController.memRisk.startTime.unixMilli.Store(0)
m.heapController.memRisk.oomRisk = false
}
//go:norace
func (m *MemArbitrator) setUnixTimeSec(s int64) {
m.UnixTimeSec = s
}
func (m *MemArbitrator) approxUnixTimeSec() int64 {
return m.UnixTimeSec
}
// Copyright 2025 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package memory
import (
"encoding/json"
"fmt"
"os"
"path/filepath"
"runtime"
"strconv"
"strings"
"sync"
"sync/atomic"
"github.com/pingcap/tidb/pkg/config"
"github.com/pingcap/tidb/pkg/metrics"
"github.com/pingcap/tidb/pkg/util/intest"
"github.com/pingcap/tidb/pkg/util/logutil"
)
const (
memStateVer = "v1"
memStateStoreNamePrefix = "mem-state."
memStateStoreNameSuffix = ".json"
)
var (
globalArbitrator struct {
softLimit struct {
originText atomic.Value
sync.Mutex
}
workMode struct {
originText atomic.Value
sync.Mutex
}
v struct {
atomic.Pointer[MemArbitrator]
sync.Mutex
}
enable struct { // register callbacks after the global memory arbitrator is enabled
callbacks []func()
atomic.Bool
sync.Mutex
}
metrics struct {
last struct {
updateUtimeSec atomic.Int64
execMetricsCounter
}
pools struct {
internal atomic.Int64
internalSession atomic.Int64
small atomic.Int64
big atomic.Int64
intoBig atomic.Int64
}
init atomic.Bool
reset atomic.Bool
sync.Mutex
}
}
mockinitGlobalMemArbitrator func() *MemArbitrator
)
func reportGlobalMemArbitratorMetrics() {
m := globalArbitrator.v.Load()
if m == nil {
return
}
curUtimeSec := nowUnixSec()
if curUtimeSec < globalArbitrator.metrics.last.updateUtimeSec.Load()+1 { // every 1 second
return
}
globalArbitrator.metrics.Lock()
defer globalArbitrator.metrics.Unlock()
globalArbitrator.metrics.last.updateUtimeSec.Store(curUtimeSec)
{ // waiting task
setWaitingTask := func(label string, value int64) {
metrics.SetGlobalMemArbitratorGauge(metrics.GlobalMemArbitratorWaitingTask, label, value)
}
p := m.TaskNumByPattern()
setWaitingTask("total", m.TaskNum())
setWaitingTask("priority-low", p[ArbitrationPriorityLow])
setWaitingTask("priority-medium", p[ArbitrationPriorityMedium])
setWaitingTask("priority-high", p[ArbitrationPriorityHigh])
setWaitingTask("wait-averse", p[ArbitrationWaitAverse])
}
{ // quota
setQuota := func(label string, value int64) {
metrics.SetGlobalMemArbitratorGauge(metrics.GlobalMemArbitratorQuota, label, value)
}
setQuota("allocated", m.allocated())
setQuota("out-of-control", m.OutOfControl())
setQuota("buffer", m.reservedBuffer())
setQuota("available", m.available())
setQuota("tracked-heap", m.avoidance.heapTracked.Load())
setQuota("awaitfree-pool-cap", m.awaitFreePoolCap())
setQuota("awaitfree-pool-used", m.approxAwaitFreePoolUsed().quota)
setQuota("awaitfree-pool-tracked-heap", m.approxAwaitFreePoolUsed().trackedHeap)
setQuota("mem-inuse", m.heapController.memInuse.Load())
setQuota("soft-limit", m.softLimit())
setQuota("wait-alloc", m.WaitingAllocSize())
{
blockedAt := int64(0)
if blockedSize, utimeSec := m.lastBlockedAt(); curUtimeSec <= utimeSec+5 { // within 5 seconds
blockedAt = blockedSize
}
setQuota("blocked-at", blockedAt)
}
setQuota("medium-pool", m.poolMediumQuota())
}
{ // memory magnification
memMagnif := float64(0)
if quota := m.allocated(); quota > 0 {
f := min(calcRatio(m.heapController.lastGC.heapAlloc.Load(), quota), defMaxMagnif)
memMagnif = float64(f) / kilo
}
metrics.GlobalMemArbitratorRuntimeMemMagnifi.Set(memMagnif)
}
{ // root pool
setRootPool := func(label string, value int64) {
metrics.SetGlobalMemArbitratorGauge(metrics.GlobalMemArbitratorRootPool, label, value)
}
setRootPool("rootpool-total", m.RootPoolNum())
setRootPool("rootpool-internal", globalArbitrator.metrics.pools.internalSession.Load())
setRootPool("under-kill", m.underKill.approxSize())
setRootPool("under-cancel", m.underCancel.approxSize())
setRootPool("digest-cache", m.digestProfileCache.num.Load())
setRootPool("sql-total-big", globalArbitrator.metrics.pools.big.Load())
setRootPool("sql-total-small", globalArbitrator.metrics.pools.small.Load())
setRootPool("sql-internal", globalArbitrator.metrics.pools.internal.Load())
setRootPool("sql-total-intobig", globalArbitrator.metrics.pools.intoBig.Load())
}
{ // counter
newExecMetrics := m.ExecMetrics()
doReportGlobalMemArbitratorCounter(&globalArbitrator.metrics.last.execMetricsCounter, &newExecMetrics, false)
globalArbitrator.metrics.last.execMetricsCounter = newExecMetrics
}
}
func doReportGlobalMemArbitratorCounter(oriExecMetrics, newExecMetrics *execMetricsCounter, init bool) {
addTaskExecCount := func(label string, value int64) {
if value <= 0 && !init {
return
}
metrics.AddGlobalMemArbitratorCounter(metrics.GlobalMemArbitratorTaskExecCounter, label, value)
}
addEventCount := func(label string, value int64) {
if value <= 0 && !init {
return
}
metrics.AddGlobalMemArbitratorCounter(metrics.GlobalMemArbitratorEventCounter, label, value)
}
addTaskExecCount("success", (newExecMetrics.Task.Succ - oriExecMetrics.Task.Succ))
addTaskExecCount("fail", (newExecMetrics.Task.Fail - oriExecMetrics.Task.Fail))
addTaskExecCount("success-prio-low", (newExecMetrics.Task.SuccByPriority[ArbitrationPriorityLow] - oriExecMetrics.Task.SuccByPriority[ArbitrationPriorityLow]))
addTaskExecCount("success-prio-medium", (newExecMetrics.Task.SuccByPriority[ArbitrationPriorityMedium] - oriExecMetrics.Task.SuccByPriority[ArbitrationPriorityMedium]))
addTaskExecCount("success-prio-high", (newExecMetrics.Task.SuccByPriority[ArbitrationPriorityHigh] - oriExecMetrics.Task.SuccByPriority[ArbitrationPriorityHigh]))
addTaskExecCount("cancel-standard-mode", (newExecMetrics.Cancel.StandardMode - oriExecMetrics.Cancel.StandardMode))
addTaskExecCount("cancel-wait-averse", (newExecMetrics.Cancel.WaitAverse - oriExecMetrics.Cancel.WaitAverse))
addTaskExecCount("cancel-prio-low", (newExecMetrics.Cancel.PriorityMode[ArbitrationPriorityLow] - oriExecMetrics.Cancel.PriorityMode[ArbitrationPriorityLow]))
addTaskExecCount("cancel-prio-medium", (newExecMetrics.Cancel.PriorityMode[ArbitrationPriorityMedium] - oriExecMetrics.Cancel.PriorityMode[ArbitrationPriorityMedium]))
addTaskExecCount("cancel-prio-high", (newExecMetrics.Cancel.PriorityMode[ArbitrationPriorityHigh] - oriExecMetrics.Cancel.PriorityMode[ArbitrationPriorityHigh]))
addTaskExecCount("kill-prio-low", (newExecMetrics.Risk.OOMKill[ArbitrationPriorityLow] - oriExecMetrics.Risk.OOMKill[ArbitrationPriorityLow]))
addTaskExecCount("kill-prio-medium", (newExecMetrics.Risk.OOMKill[ArbitrationPriorityMedium] - oriExecMetrics.Risk.OOMKill[ArbitrationPriorityMedium]))
addTaskExecCount("kill-prio-high", (newExecMetrics.Risk.OOMKill[ArbitrationPriorityHigh] - oriExecMetrics.Risk.OOMKill[ArbitrationPriorityHigh]))
addEventCount("mem-risk", (newExecMetrics.Risk.Mem - oriExecMetrics.Risk.Mem))
addEventCount("oom-risk", (newExecMetrics.Risk.OOM - oriExecMetrics.Risk.OOM))
addEventCount("awaitfree-pool-grow-succ", (newExecMetrics.AwaitFree.Succ - oriExecMetrics.AwaitFree.Succ))
addEventCount("awaitfree-pool-grow-fail", (newExecMetrics.AwaitFree.Fail - oriExecMetrics.AwaitFree.Fail))
addEventCount("awaitfree-pool-shrink", (newExecMetrics.AwaitFree.Shrink - oriExecMetrics.AwaitFree.Shrink))
addEventCount("awaitfree-pool-force-shrink", (newExecMetrics.AwaitFree.ForceShrink - oriExecMetrics.AwaitFree.ForceShrink))
addEventCount("gc", (newExecMetrics.Action.GC - oriExecMetrics.Action.GC))
addEventCount("update-memstats", (newExecMetrics.Action.UpdateRuntimeMemStats - oriExecMetrics.Action.UpdateRuntimeMemStats))
addEventCount("record-memstate-succ", (newExecMetrics.Action.RecordMemState.Succ - oriExecMetrics.Action.RecordMemState.Succ))
addEventCount("record-memstate-fail", (newExecMetrics.Action.RecordMemState.Fail - oriExecMetrics.Action.RecordMemState.Fail))
addEventCount("shrink-digest-cache", (newExecMetrics.ShrinkDigest - oriExecMetrics.ShrinkDigest))
}
func readRuntimeMemStats() memStats {
s := SampleRuntimeMemStats()
return memStats{
HeapAlloc: int64(s.HeapAlloc),
HeapInuse: int64(s.HeapInuse),
MemOffHeap: int64(s.MemOffHeap),
TotalFree: int64(s.TotalFree),
LastGC: approxLastGCTime(),
}
}
// HandleGlobalMemArbitratorRuntime is used to handle runtime memory stats.
func HandleGlobalMemArbitratorRuntime() {
m := GlobalMemArbitrator()
if m == nil {
if globalArbitrator.metrics.reset.Load() {
resetGlobalMemArbitratorMetrics()
}
return
}
m.HandleRuntimeStats(readRuntimeMemStats())
reportGlobalMemArbitratorMetrics()
}
func resetGlobalMemArbitratorMetrics() {
if !globalArbitrator.metrics.reset.Swap(false) {
return
}
globalArbitrator.metrics.Lock()
defer globalArbitrator.metrics.Unlock()
metrics.ResetGlobalMemArbitratorGauge()
metrics.GlobalMemArbitratorRuntimeMemMagnifi.Set(0)
}
// GetGlobalMemArbitratorSoftLimitText returns the text of the global memory arbitrator soft limit.
func GetGlobalMemArbitratorSoftLimitText() string {
return globalArbitrator.softLimit.originText.Load().(string)
}
func doSetGlobalMemArbitratorSoftLimit() {
globalArbitrator.softLimit.Lock()
defer globalArbitrator.softLimit.Unlock()
var mode SoftLimitMode
str := GetGlobalMemArbitratorSoftLimitText()
softLimit := int64(0)
softLimitRate := float64(0)
switch str {
case ArbitratorSoftLimitModDisableName:
mode = SoftLimitModeDisable
case ArbitratorSoftLimitModeAutoName:
mode = SoftLimitModeAuto
default:
mode = SoftLimitModeSpecified
if intValue, err := strconv.ParseUint(str, 10, 64); err == nil && int64(intValue) > 1 {
softLimit = int64(intValue)
} else if floatValue, err := strconv.ParseFloat(str, 64); err == nil && floatValue > 0 && floatValue <= 1 {
softLimitRate = floatValue
} else {
mode = SoftLimitModeDisable
}
}
globalArbitrator.v.Load().SetSoftLimit(softLimit, softLimitRate, mode)
}
// SetGlobalMemArbitratorSoftLimit sets the soft limit of the global memory arbitrator.
func SetGlobalMemArbitratorSoftLimit(str string) {
if GetGlobalMemArbitratorSoftLimitText() == str {
return
}
{
globalArbitrator.softLimit.Lock()
globalArbitrator.softLimit.originText.Store(str)
globalArbitrator.softLimit.Unlock()
}
m := GlobalMemArbitrator()
if m == nil {
return
}
doSetGlobalMemArbitratorSoftLimit()
}
// GlobalMemArbitrator returns the global memory arbitrator if it is enabled.
func GlobalMemArbitrator() *MemArbitrator {
m := globalArbitrator.v.Load()
if m.WorkMode() == ArbitratorModeDisable {
return nil
}
return m
}
// UsingGlobalMemArbitration returns true if the global memory arbitration policy is used.
// It needs to return true when the work mode of the global memory arbitrator is changeing from disable to other modes.
func UsingGlobalMemArbitration() bool {
return globalArbitrator.enable.Load()
}
// CleanupGlobalMemArbitratorForTest stops the async runner of the global memory arbitrator (suggest to use in tests only).
func CleanupGlobalMemArbitratorForTest() {
SetGlobalMemArbitratorWorkMode(ArbitratorModeDisable.String())
globalArbitrator.v.Lock()
defer globalArbitrator.v.Unlock()
m := globalArbitrator.v.Load()
if m == nil {
return
}
m.stop()
globalArbitrator.v.Store(nil)
mockNow = nil
mockDebugInject = nil
mockWinupCB = nil
mockinitGlobalMemArbitrator = nil
}
// SetupGlobalMemArbitratorForTest sets up the global memory arbitrator for tests.
func SetupGlobalMemArbitratorForTest(baseDir string) {
globalArbitrator.v.Lock()
defer globalArbitrator.v.Unlock()
if globalArbitrator.v.Load() != nil {
panic("the global memory arbitrator is already set up")
}
_ = os.Remove(runtimeMemStateRecorderFilePath(baseDir))
mockinitGlobalMemArbitrator = func() *MemArbitrator {
m := NewMemArbitrator(
0,
4,
defPoolQuotaShards,
64*byteSizeKB, /* 64k ~ */
newMemStateRecorder(baseDir),
)
m.AutoRun(
MemArbitratorActions{
Info: logutil.BgLogger().Info,
Warn: logutil.BgLogger().Warn,
Error: logutil.BgLogger().Error,
UpdateRuntimeMemStats: func() {
},
GC: func() {
},
},
defAwaitFreePoolAllocAlignSize,
4,
defTaskTickDur,
)
globalArbitrator.v.Store(m)
return m
}
}
// GetGlobalMemArbitratorWorkModeText returns the text of the global memory arbitrator work mode.
func GetGlobalMemArbitratorWorkModeText() string {
return globalArbitrator.workMode.originText.Load().(string)
}
func setGlobalMemArbitratorWorkModeText(str string) {
globalArbitrator.workMode.originText.Store(str)
}
// SetGlobalMemArbitratorWorkMode sets the work mode of the global memory arbitrator.
func SetGlobalMemArbitratorWorkMode(str string) bool {
if !globalArbitrator.metrics.init.Load() {
globalArbitrator.metrics.Lock()
if !globalArbitrator.metrics.init.Load() {
for mode := range maxArbitratorMode {
metrics.GlobalMemArbitratorWorkMode.WithLabelValues(mode.String()).Set(0)
}
metrics.GlobalMemArbitratorWorkMode.WithLabelValues(GetGlobalMemArbitratorWorkModeText()).Set(1)
execMetricsCounter := &globalArbitrator.metrics.last.execMetricsCounter
doReportGlobalMemArbitratorCounter(execMetricsCounter, execMetricsCounter, true)
globalArbitrator.metrics.init.Store(true)
}
globalArbitrator.metrics.Unlock()
}
if GetGlobalMemArbitratorWorkModeText() == str {
return false
}
globalArbitrator.workMode.Lock()
defer globalArbitrator.workMode.Unlock()
if GetGlobalMemArbitratorWorkModeText() == str {
return false
}
setGlobalMemArbitratorWorkModeText(str)
newMode := ArbitratorModeDisable
switch str {
case ArbitratorModeStandardName:
newMode = ArbitratorModeStandard
case ArbitratorModePriorityName:
newMode = ArbitratorModePriority
}
m := globalArbitrator.v.Load()
oriMode := m.WorkMode()
if oriMode == newMode {
return false
}
if m == nil {
m = initGlobalMemArbitrator()
}
metrics.GlobalMemArbitratorWorkMode.WithLabelValues(newMode.String()).Set(1)
metrics.GlobalMemArbitratorWorkMode.WithLabelValues(oriMode.String()).Set(0)
// from other modes to disable mode
if newMode == ArbitratorModeDisable {
m.SetWorkMode(newMode)
globalArbitrator.enable.Store(false)
globalArbitrator.metrics.reset.Store(true)
return true
}
globalArbitrator.enable.Store(true) // set before changing the work mode
// from disable mode to other modes
if oriMode == ArbitratorModeDisable {
doSetGlobalMemArbitratorLimit()
doSetGlobalMemArbitratorSoftLimit()
}
m.SetWorkMode(newMode)
return true
}
func doSetGlobalMemArbitratorLimit() {
for _, callback := range globalArbitrator.enable.callbacks {
callback()
}
globalArbitrator.v.Load().SetLimit(ServerMemoryLimit.Load())
}
// AjustGlobalMemArbitratorLimit adjusts the quota limit of the global memory arbitrator through the server memory limit.
func AjustGlobalMemArbitratorLimit() {
m := GlobalMemArbitrator()
if m == nil {
return
}
if m.limit() == int64(ServerMemoryLimit.Load()) {
return
}
doSetGlobalMemArbitratorLimit()
}
// RegisterCallbackForGlobalMemArbitrator registers a callback to be called after the global memory arbitrator is enabled.
func RegisterCallbackForGlobalMemArbitrator(f func()) {
globalArbitrator.enable.Lock()
globalArbitrator.enable.callbacks = append(globalArbitrator.enable.callbacks, f)
globalArbitrator.enable.Unlock()
}
func initGlobalMemArbitrator() (m *MemArbitrator) {
if intest.InTest {
return mockinitGlobalMemArbitrator()
}
globalArbitrator.v.Lock()
defer globalArbitrator.v.Unlock()
if m = globalArbitrator.v.Load(); m != nil {
return
}
cfg := config.GetGlobalConfig()
baseDir := filepath.Join(cfg.TempDir, fmt.Sprintf("mem_arbitrator-%d", cfg.Port))
limit := ServerMemoryLimit.Load()
if limit == 0 {
limit = GetMemTotalIgnoreErr()
}
m = NewMemArbitrator(
int64(limit),
defPoolStatusShards,
defPoolQuotaShards,
64*byteSizeKB, /* 64k ~ */
newMemStateRecorder(baseDir),
)
m.AutoRun(
MemArbitratorActions{
Info: logutil.BgLogger().Info,
Warn: logutil.BgLogger().Warn,
Error: logutil.BgLogger().Error,
UpdateRuntimeMemStats: func() {
m.setRuntimeMemStats(readRuntimeMemStats())
},
GC: func() {
runtime.GC() //nolint: revive
},
},
defAwaitFreePoolAllocAlignSize,
defAwaitFreePoolShardNum,
defTaskTickDur,
)
globalArbitrator.v.Store(m)
return
}
// RemovePoolFromGlobalMemArbitrator removes a pool from the global memory arbitrator by its UID.
func RemovePoolFromGlobalMemArbitrator(uid uint64) bool {
m := globalArbitrator.v.Load()
if m == nil {
return false
}
return m.RemoveRootPoolByID(uid)
}
func init() {
workMode := ArbitratorModeDisable
setGlobalMemArbitratorWorkModeText(workMode.String())
globalArbitrator.softLimit.originText.Store(ArbitratorSoftLimitModDisableName)
globalArbitrator.enable.callbacks = make([]func(), 0, 1)
}
type runtimeMemStateRecorder struct {
baseDir string
filePath string
}
func runtimeMemStateRecorderFilePath(baseDir string) string {
return filepath.Join(baseDir, memStateStoreNamePrefix+memStateVer+memStateStoreNameSuffix)
}
func newMemStateRecorder(baseDir string) *runtimeMemStateRecorder {
return &runtimeMemStateRecorder{
baseDir: baseDir,
filePath: runtimeMemStateRecorderFilePath(baseDir),
}
}
func (m *runtimeMemStateRecorder) Store(memState *RuntimeMemStateV1) error {
if _, err := os.Stat(m.baseDir); err != nil && !os.IsExist(err) {
err = os.MkdirAll(m.baseDir, 0750)
if err != nil {
return fmt.Errorf("failed to create dir `%s`, err: %v", m.baseDir, err)
}
}
buff, err := json.Marshal(memState)
if err != nil {
return err
}
f, err := os.CreateTemp(m.baseDir, ".mem_state.*.json")
if err != nil {
return err
}
_, err = f.Write(buff)
f.Close()
if err != nil {
return err
}
return os.Rename(f.Name(), m.filePath)
}
func (m *runtimeMemStateRecorder) Load() (*RuntimeMemStateV1, error) {
entries, err := os.ReadDir(m.baseDir)
if err != nil {
return nil, fmt.Errorf("failed to read dir `%s`: %w", m.baseDir, err)
}
var realPath string
for _, entry := range entries {
if entry.IsDir() {
continue
}
if name := entry.Name(); len(name) >= len(memStateStoreNamePrefix) && name[:len(memStateStoreNamePrefix)] == memStateStoreNamePrefix {
suffix := name[len(memStateStoreNamePrefix):]
suffixes := strings.Split(suffix, ".")
if len(suffixes) < 2 {
continue
}
if suffixes[0] == memStateVer { // v1
realPath = filepath.Join(m.baseDir, name)
break
}
}
}
if realPath == "" {
return nil, nil
}
buff, err := os.ReadFile(realPath)
if err != nil {
return nil, fmt.Errorf("failed to read file `%s`: %w", realPath, err)
}
memState := RuntimeMemStateV1{}
err = json.Unmarshal(buff, &memState)
if err != nil {
return nil, fmt.Errorf("failed to unmarshal mem state: %w", err)
}
return &memState, nil
}
// Copyright 2018 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package memory
import (
"sync"
"time"
"github.com/pingcap/failpoint"
"github.com/pingcap/sysutil"
"github.com/pingcap/tidb/pkg/parser/terror"
"github.com/pingcap/tidb/pkg/util/cgroup"
"github.com/pingcap/tidb/pkg/util/logutil"
"github.com/shirou/gopsutil/v3/mem"
"go.uber.org/zap"
)
// MemTotal returns the total amount of RAM on this system
var MemTotal func() (uint64, error)
// MemUsed returns the total used amount of RAM on this system
var MemUsed func() (uint64, error)
// GetMemTotalIgnoreErr returns the total amount of RAM on this system/container. If error occurs, return 0.
func GetMemTotalIgnoreErr() uint64 {
if memTotal, err := MemTotal(); err == nil {
failpoint.Inject("GetMemTotalError", func(val failpoint.Value) {
if val, ok := val.(bool); val && ok {
memTotal = 0
}
})
return memTotal
}
return 0
}
// MemTotalNormal returns the total amount of RAM on this system in non-container environment.
func MemTotalNormal() (uint64, error) {
total, t := memLimit.get()
if time.Since(t) < 60*time.Second {
return total, nil
}
return memTotalNormal()
}
func memTotalNormal() (uint64, error) {
v, err := mem.VirtualMemory()
if err != nil {
return 0, err
}
memLimit.set(v.Total, time.Now())
return v.Total, nil
}
// MemUsedNormal returns the total used amount of RAM on this system in non-container environment.
func MemUsedNormal() (uint64, error) {
used, t := memUsage.get()
if time.Since(t) < 500*time.Millisecond {
return used, nil
}
v, err := mem.VirtualMemory()
if err != nil {
return 0, err
}
memUsage.set(v.Used, time.Now())
return v.Used, nil
}
type memInfoCache struct {
updateTime time.Time
mu *sync.RWMutex
mem uint64
}
func (c *memInfoCache) get() (memo uint64, t time.Time) {
c.mu.RLock()
defer c.mu.RUnlock()
memo, t = c.mem, c.updateTime
return
}
func (c *memInfoCache) set(memo uint64, t time.Time) {
c.mu.Lock()
defer c.mu.Unlock()
c.mem, c.updateTime = memo, t
}
// expiration time is 60s
var memLimit *memInfoCache
// expiration time is 500ms
var memUsage *memInfoCache
// expiration time is 500ms
// save the memory usage of the server process
var serverMemUsage *memInfoCache
// MemTotalCGroup returns the total amount of RAM on this system in container environment.
func MemTotalCGroup() (uint64, error) {
memo, t := memLimit.get()
if time.Since(t) < 60*time.Second {
return memo, nil
}
memo, err := cgroup.GetMemoryLimit()
if err != nil {
return memo, err
}
v, err := mem.VirtualMemory()
if err != nil {
return 0, err
}
memo = min(v.Total, memo)
memLimit.set(memo, time.Now())
return memo, nil
}
// MemUsedCGroup returns the total used amount of RAM on this system in container environment.
func MemUsedCGroup() (uint64, error) {
memo, t := memUsage.get()
if time.Since(t) < 500*time.Millisecond {
return memo, nil
}
memo, err := cgroup.GetMemoryUsage()
if err != nil {
return memo, err
}
v, err := mem.VirtualMemory()
if err != nil {
return 0, err
}
memo = min(v.Used, memo)
memUsage.set(memo, time.Now())
return memo, nil
}
// it is for test and init.
func init() {
if cgroup.InContainer() {
MemTotal = MemTotalCGroup
MemUsed = MemUsedCGroup
sysutil.RegisterGetMemoryCapacity(MemTotalCGroup)
} else {
MemTotal = MemTotalNormal
MemUsed = MemUsedNormal
}
memLimit = &memInfoCache{
mu: &sync.RWMutex{},
}
memUsage = &memInfoCache{
mu: &sync.RWMutex{},
}
serverMemUsage = &memInfoCache{
mu: &sync.RWMutex{},
}
_, err := MemTotal()
terror.MustNil(err)
_, err = MemUsed()
terror.MustNil(err)
}
// InitMemoryHook initializes the memory hook.
// It is to solve the problem that tidb cannot read cgroup in the systemd.
// so if we are not in the container, we compare the cgroup memory limit and the physical memory,
// the cgroup memory limit is smaller, we use the cgroup memory hook.
func InitMemoryHook() error {
if cgroup.InContainer() {
logutil.BgLogger().Info("use cgroup memory hook because TiDB is in the container")
return nil
}
cgroupValue, err := cgroup.GetMemoryLimit()
if err != nil {
return err
}
physicalValue, err := memTotalNormal()
if err != nil {
return err
}
if physicalValue > cgroupValue && cgroupValue != 0 {
MemTotal = MemTotalCGroup
MemUsed = MemUsedCGroup
sysutil.RegisterGetMemoryCapacity(MemTotalCGroup)
logutil.BgLogger().Info("use cgroup memory hook", zap.Int64("cgroupMemorySize", int64(cgroupValue)), zap.Int64("physicalMemorySize", int64(physicalValue)))
} else {
logutil.BgLogger().Info("use physical memory hook", zap.Int64("cgroupMemorySize", int64(cgroupValue)), zap.Int64("physicalMemorySize", int64(physicalValue)))
}
_, err = MemTotal()
if err != nil {
return err
}
_, err = MemUsed()
return err
}
// InstanceMemUsed returns the memory usage of this TiDB server
func InstanceMemUsed() (uint64, error) {
used, t := serverMemUsage.get()
if time.Since(t) < 500*time.Millisecond {
return used, nil
}
var memoryUsage uint64
instanceStats := ReadMemStats()
memoryUsage = instanceStats.HeapAlloc
serverMemUsage.set(memoryUsage, time.Now())
return memoryUsage, nil
}
// Copyright 2018 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package memory
import (
"runtime"
"sync/atomic"
"time"
"github.com/pingcap/failpoint"
)
var stats atomic.Pointer[globalMstats]
// ReadMemInterval controls the interval to read memory stats.
const ReadMemInterval = 300 * time.Millisecond
// ReadMemStats read the mem stats from runtime.ReadMemStats
func ReadMemStats() (memStats *runtime.MemStats) {
s := stats.Load()
if s != nil {
memStats = &s.m
} else {
memStats = ForceReadMemStats()
}
failpoint.Inject("ReadMemStats", func(val failpoint.Value) {
injectedSize := val.(int)
memStats = &runtime.MemStats{HeapInuse: memStats.HeapInuse + uint64(injectedSize)}
})
return
}
// ForceReadMemStats is to force read memory stats.
func ForceReadMemStats() *runtime.MemStats {
var g globalMstats
g.ts = time.Now()
runtime.ReadMemStats(&g.m)
stats.Store(&g)
return &g.m
}
type globalMstats struct {
ts time.Time
m runtime.MemStats
}
// Copyright 2025 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package memory
import (
"fmt"
"sync"
"sync/atomic"
)
var resourcePoolID = int64(-1)
// DefPoolAllocAlignSize indicates the default allocation alignment size
const DefPoolAllocAlignSize int64 = 10 * 1024
// DefMaxUnusedBlocks indicates the default maximum unused blocks*alloc-align-size of the resource pool
const DefMaxUnusedBlocks int64 = 10
// ResourcePool manages a set of resource quota
type ResourcePool struct {
actions PoolActions // actions to be taken when the pool meets certain conditions
parentMu struct{ prevChildren, nextChildren *ResourcePool } // accessible by parent pool only
name string // name of pool
mu struct {
headChildren *ResourcePool // head of the children pools chain
budget Budget // budget of the resource quota
allocated int64 // allocated bytes of the resource quota
maxAllocated int64 // maximum allocated bytes
numChildren int // number of children pools
sync.Mutex
stopped bool
}
uid uint64 // unique ID of the resource pool: uid <= 0 indicates that it is a internal pool
reserved int64 // quota from other sources
limit int64 // limit of the resource quota
allocAlignSize int64 // each allocation size must be a multiple of it
maxUnusedBlocks int64 // max unused-blocks*alloc-align size before shrinking budget
}
// OutOfCapacityActionArgs wraps the arguments for out of capacity action
type OutOfCapacityActionArgs struct {
Pool *ResourcePool
Request int64
}
// PoolActions represents the actions to be taken when the resource pool meets certain conditions
type PoolActions struct {
OutOfCapacityActionCB func(OutOfCapacityActionArgs) error // Called when the resource pool is out of capacity
OutOfLimitActionCB func(*ResourcePool) error // Called when the resource pool is out of limit
}
// ResourcePoolState represents the state of a resource pool
type ResourcePoolState struct {
Name string
Level int
ID uint64
ParentID uint64
Used int64
Reserved int64
Budget int64
}
// Traverse the resource pool and calls the callback function
func (p *ResourcePool) Traverse(stateCb func(ResourcePoolState) error) error {
return p.traverse(0, stateCb)
}
func (p *ResourcePool) traverse(level int, stateCb func(ResourcePoolState) error) error {
p.mu.Lock()
if p.mu.stopped {
p.mu.Unlock()
return nil
}
monitorState := ResourcePoolState{
Level: level,
Name: p.name,
ID: p.uid,
ParentID: p.mu.budget.pool.UID(),
Used: p.mu.allocated,
Reserved: p.reserved,
Budget: p.mu.budget.cap,
}
children := make([]*ResourcePool, 0, p.mu.numChildren)
for c := p.mu.headChildren; c != nil; c = c.parentMu.nextChildren {
children = append(children, c)
}
p.mu.Unlock()
if err := stateCb(monitorState); err != nil {
return err
}
for _, c := range children {
if err := c.traverse(level+1, stateCb); err != nil {
return err
}
}
return nil
}
// NewResourcePoolDefault creates a new resource pool
func NewResourcePoolDefault(
name string,
allocAlignSize int64,
) *ResourcePool {
return NewResourcePool(
newPoolUID(),
name,
0,
allocAlignSize,
DefMaxUnusedBlocks,
PoolActions{},
)
}
func newPoolUID() uint64 {
return uint64(atomic.AddInt64(&resourcePoolID, -1))
}
// NewResourcePool creates a new resource pool
func NewResourcePool(
uid uint64,
name string,
limit int64,
allocAlignSize int64,
maxUnusedBlocks int64,
actions PoolActions,
) *ResourcePool {
if allocAlignSize <= 0 {
allocAlignSize = DefPoolAllocAlignSize
}
if limit <= 0 {
limit = DefMaxLimit
}
m := &ResourcePool{
name: name,
uid: uid,
limit: limit,
allocAlignSize: allocAlignSize,
actions: actions,
maxUnusedBlocks: maxUnusedBlocks,
}
return m
}
// SetAllocAlignSize sets the allocation alignment size and returns the original value of allocAlignSize
func (p *ResourcePool) SetAllocAlignSize(size int64) (ori int64) {
p.mu.Lock()
ori = p.allocAlignSize
p.allocAlignSize = size
p.mu.Unlock()
return
}
// NewResourcePoolInheritWithLimit creates a new resource pool inheriting from the parent pool
func (p *ResourcePool) NewResourcePoolInheritWithLimit(
name string, limit int64,
) *ResourcePool {
return NewResourcePool(
newPoolUID(),
name,
limit,
p.allocAlignSize,
p.maxUnusedBlocks,
p.actions,
)
}
// StartNoReserved creates a new resource pool with no reserved quota
func (p *ResourcePool) StartNoReserved(pool *ResourcePool) {
p.Start(pool, 0)
}
// UID returns the unique ID of the resource pool
func (p *ResourcePool) UID() uint64 {
if p == nil {
return 0
}
return p.uid
}
// Start starts the resource pool with a parent pool and reserved quota
func (p *ResourcePool) Start(parentPool *ResourcePool, reserved int64) {
if p.mu.allocated != 0 {
panic(fmt.Errorf("%s: started with %d bytes left over", p.name, p.mu.allocated))
}
if p.mu.budget.pool != nil {
panic(fmt.Errorf("%s: already started with pool %s", p.name, p.mu.budget.pool.name))
}
p.mu.allocated = 0
p.mu.maxAllocated = 0
p.mu.budget = parentPool.CreateBudget()
p.mu.stopped = false
p.reserved = reserved
if parentPool != nil {
parentPool.mu.Lock()
if s := parentPool.mu.headChildren; s != nil {
s.parentMu.prevChildren = p
p.parentMu.nextChildren = s
}
parentPool.mu.headChildren = p
parentPool.mu.numChildren++
parentPool.mu.Unlock()
}
}
// Name returns the name of the resource pool
func (p *ResourcePool) Name() string {
return p.name
}
// Limit returns the limit of the resource pool
func (p *ResourcePool) Limit() int64 {
return p.limit
}
// IsStopped checks if the resource pool is stopped
func (p *ResourcePool) IsStopped() (res bool) {
p.mu.Lock()
res = p.mu.stopped
p.mu.Unlock()
return
}
// Stop stops the resource pool and releases the budget & returns the quota released
func (p *ResourcePool) Stop() (released int64) {
p.mu.Lock()
p.mu.stopped = true
if p.mu.allocated != 0 {
p.doRelease(p.mu.allocated)
}
released = p.mu.budget.cap
p.releaseBudget()
if parent := p.mu.budget.pool; parent != nil {
func() {
parent.mu.Lock()
defer parent.mu.Unlock()
prev, next := p.parentMu.prevChildren, p.parentMu.nextChildren
if parent.mu.headChildren == p {
parent.mu.headChildren = next
}
if prev != nil {
prev.parentMu.nextChildren = next
}
if next != nil {
next.parentMu.prevChildren = prev
}
parent.mu.numChildren--
}()
}
p.mu.budget.pool = nil
p.mu.Unlock()
return released
}
// MaxAllocated returns the maximum allocated bytes
func (p *ResourcePool) MaxAllocated() (res int64) {
p.mu.Lock()
res = p.mu.maxAllocated
p.mu.Unlock()
return
}
// Allocated returns the allocated bytes
func (p *ResourcePool) Allocated() (res int64) {
p.mu.Lock()
res = p.allocated()
p.mu.Unlock()
return
}
// Budget represents the budget of a resource pool
type Budget struct {
pool *ResourcePool // source pool
cap int64 // capacity of the budget
used int64 // used bytes
explicitReserved int64 // explicit reserved size which can not be shrunk
}
// Used returns the used bytes of the budget
func (b *Budget) Used() int64 {
if b == nil {
return 0
}
return b.used
}
// Pool returns the resource pool of the budget
func (b *Budget) Pool() *ResourcePool {
if b == nil {
return nil
}
return b.pool
}
// Capacity returns the capacity of the budget
func (b *Budget) Capacity() int64 {
if b == nil {
return 0
}
return b.cap
}
func (b *Budget) available() int64 {
return b.cap - b.used
}
// CreateBudget creates a new budget from the resource pool
func (p *ResourcePool) CreateBudget() Budget {
return Budget{pool: p}
}
// Reserve reserves the budget through the allocate aligned given size; update the explicit reserved size;
func (b *Budget) Reserve(request int64) error {
if b == nil {
return nil
}
minExtra := b.pool.roundSize(request)
if err := b.pool.allocate(minExtra); err != nil {
return err
}
b.cap += minExtra
b.explicitReserved += request
return nil
}
// Empty releases the used budget
func (b *Budget) Empty() {
if b == nil {
return
}
b.used = 0
if release := b.available() - b.pool.allocAlignSize; release > 0 {
b.pool.release(release)
b.cap -= release
}
}
// Clear releases the budget and resets
func (b *Budget) Clear() {
if b == nil {
return
}
release := b.cap
b.used = 0
b.cap = 0
if b.pool == nil {
return
}
if release > 0 {
b.pool.release(release)
}
}
func (b *Budget) resize(oldSz, newSz int64) error {
if b == nil {
return nil
}
delta := newSz - oldSz
switch {
case delta > 0:
return b.Grow(delta)
case delta < 0:
b.Shrink(-delta)
}
return nil
}
// ResizeTo resizes the budget to the new size
func (b *Budget) ResizeTo(newSz int64) error {
if b == nil {
return nil
}
if newSz == b.used {
return nil
}
return b.resize(b.used, newSz)
}
// Grow the budget by the given size
func (b *Budget) Grow(request int64) error {
if b == nil {
return nil
}
if extra := request - b.available(); extra > 0 {
minExtra := b.pool.roundSize(extra)
if err := b.pool.allocate(minExtra); err != nil {
return err
}
b.cap += minExtra
}
b.used += request
return nil
}
// Shrink the budget and reduce the given size
func (b *Budget) Shrink(delta int64) {
if b == nil || delta == 0 {
return
}
if b.used < delta {
delta = b.used
}
b.used -= delta
if b.pool == nil {
return
}
if release := b.available() - b.pool.allocAlignSize; release > 0 && (b.explicitReserved == 0 || b.used+b.pool.allocAlignSize > b.explicitReserved) {
b.pool.release(release)
b.cap -= release
}
}
func (p *ResourcePool) doAlloc(request int64) error {
if p.mu.allocated > p.limit-request {
if p.actions.OutOfLimitActionCB == nil {
return newBudgetExceededError("out of limit", p, request, p.mu.allocated, p.limit)
}
if err := p.actions.OutOfLimitActionCB(p); err != nil {
return err
}
}
// Check whether we need to request an increase of our budget.
if delta := request + p.mu.allocated - p.mu.budget.used - p.reserved; delta > 0 {
if err := p.increaseBudget(delta); err != nil {
return err
}
}
p.mu.allocated += request
if p.mu.maxAllocated < p.mu.allocated {
p.mu.maxAllocated = p.mu.allocated
}
return nil
}
// ExplicitReserve reserves the budget explicitly
func (p *ResourcePool) ExplicitReserve(request int64) (err error) {
p.mu.Lock()
err = p.mu.budget.Reserve(request)
p.mu.Unlock()
return
}
func (p *ResourcePool) allocate(request int64) error {
p.mu.Lock()
err := p.doAlloc(request)
p.mu.Unlock()
return err
}
func (p *ResourcePool) allocated() int64 {
return p.mu.allocated
}
func (p *ResourcePool) capacity() int64 {
return p.mu.budget.cap
}
// ApproxCap returns the approximate capacity of the resource pool
func (p *ResourcePool) ApproxCap() int64 {
return p.capacity()
}
// Capacity returns the capacity of the resource pool
func (p *ResourcePool) Capacity() (res int64) {
p.mu.Lock()
res = p.capacity()
p.mu.Unlock()
return
}
// SetLimit sets the limit of the resource pool
func (p *ResourcePool) SetLimit(newLimit int64) {
p.mu.Lock()
p.limit = newLimit
p.mu.Unlock()
}
func (p *ResourcePool) release(sz int64) {
p.mu.Lock()
p.doRelease(sz)
p.mu.Unlock()
}
func (p *ResourcePool) doRelease(sz int64) {
if p.mu.allocated < sz {
sz = p.mu.allocated
}
p.mu.allocated -= sz
p.doAdjustBudget()
}
// SetOutOfCapacityAction sets the out of capacity action
// It is called when the resource pool is out of capacity
func (p *ResourcePool) SetOutOfCapacityAction(f func(OutOfCapacityActionArgs) error) {
p.mu.Lock()
p.doSetOutOfCapacityAction(f)
p.mu.Unlock()
}
func (p *ResourcePool) doSetOutOfCapacityAction(f func(OutOfCapacityActionArgs) error) {
p.actions.OutOfCapacityActionCB = f
}
// SetOutOfLimitAction sets the out of limit action
// It is called when the resource pool is out of limit
func (p *ResourcePool) SetOutOfLimitAction(f func(*ResourcePool) error) {
p.mu.Lock()
p.actions.OutOfLimitActionCB = f
p.mu.Unlock()
}
func (p *ResourcePool) increaseBudget(request int64) error {
if p.mu.budget.pool == nil { // Root Pool
need := request - p.mu.budget.available()
if need <= 0 {
p.mu.budget.used += request
return nil
}
if p.actions.OutOfCapacityActionCB != nil {
if err := p.actions.OutOfCapacityActionCB(OutOfCapacityActionArgs{
Pool: p,
Request: need,
}); err != nil {
return err
}
p.mu.budget.used += request
return nil
}
return newBudgetExceededError("out of quota",
p,
request,
p.mu.budget.used,
p.mu.budget.cap,
)
}
return p.mu.budget.Grow(request)
}
func (p *ResourcePool) roundSize(sz int64) int64 {
alignSize := p.allocAlignSize
if alignSize <= 1 {
return sz
}
return (sz + alignSize - 1) / alignSize * alignSize
}
func (p *ResourcePool) releaseBudget() {
p.mu.budget.Clear()
}
// AdjustBudget adjusts the budget of the resource pool
func (p *ResourcePool) AdjustBudget() {
p.mu.Lock()
p.doAdjustBudget()
p.mu.Unlock()
}
func (p *ResourcePool) doAdjustBudget() {
needed := p.mu.allocated - p.reserved
if needed <= 0 {
needed = 0
} else {
needed = p.roundSize(needed)
}
if p.allocAlignSize*p.maxUnusedBlocks <= p.mu.budget.used-needed {
delta := p.mu.budget.used - needed
p.mu.budget.Shrink(delta)
}
}
func (p *ResourcePool) forceAddCap(c int64) {
if c == 0 {
return
}
p.mu.budget.cap += c
}
func newBudgetExceededError(
reason string,
root *ResourcePool,
requestedBytes int64, allocatedBytes int64, limitBytes int64,
) error {
return fmt.Errorf(
"resource pool `%s` meets `%s`: requested(%d) + allocated(%d) > limit(%d)",
root.name,
reason,
requestedBytes,
allocatedBytes,
limitBytes,
)
}
// Copyright 2018 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package memory
import (
"bytes"
"fmt"
"runtime"
"slices"
"strconv"
"sync"
"sync/atomic"
"time"
"github.com/pingcap/tidb/pkg/metrics"
"github.com/pingcap/tidb/pkg/util/intest"
"github.com/pingcap/tidb/pkg/util/sqlkiller"
atomicutil "go.uber.org/atomic"
)
// TrackMemWhenExceeds is the threshold when memory usage needs to be tracked.
const TrackMemWhenExceeds = 104857600 // 100MB
// DefMemQuotaQuery is default memory quota for query.
const DefMemQuotaQuery = 1073741824 // 1GB
// Process global variables for memory limit.
var (
ServerMemoryLimitOriginText = atomicutil.NewString("0")
ServerMemoryLimit = atomicutil.NewUint64(0)
ServerMemoryLimitSessMinSize = atomicutil.NewUint64(128 << 20)
QueryForceDisk = atomicutil.NewInt64(0)
TriggerMemoryLimitGC = atomicutil.NewBool(false)
MemoryLimitGCLast = atomicutil.NewTime(time.Time{})
MemoryLimitGCTotal = atomicutil.NewInt64(0)
)
// Tracker is used to track the memory usage during query execution.
// It contains an optional limit and can be arranged into a tree structure
// such that the consumption tracked by a Tracker is also tracked by
// its ancestors. The main idea comes from Apache Impala:
//
// https://github.com/cloudera/Impala/blob/cdh5-trunk/be/src/runtime/mem-tracker.h
//
// By default, memory consumption is tracked via calls to "Consume()", either to
// the tracker itself or to one of its descendents. A typical sequence of calls
// for a single Tracker is:
// 1. tracker.SetLabel() / tracker.SetActionOnExceed() / tracker.AttachTo()
// 2. tracker.Consume() / tracker.ReplaceChild() / tracker.BytesConsumed()
//
// NOTE: We only protect concurrent access to "bytesConsumed" and "children",
// that is to say:
// 1. Only "BytesConsumed()", "Consume()" and "AttachTo()" are thread-safe.
// 2. Other operations of a Tracker tree is not thread-safe.
//
// We have two limits for the memory quota: soft limit and hard limit.
// If the soft limit is exceeded, we will trigger the action that alleviates the
// speed of memory growth. The soft limit is hard-coded as `0.8*hard limit`.
// The actions that could be triggered are: AggSpillDiskAction.
//
// If the hard limit is exceeded, we will trigger the action that immediately
// reduces memory usage. The hard limit is set by the system variable `tidb_mem_query_quota`.
// The actions that could be triggered are: SpillDiskAction, SortAndSpillDiskAction, rateLimitAction,
// PanicOnExceed, globalPanicOnExceed, LogOnExceed.
type Tracker struct {
parent atomic.Pointer[Tracker]
MemArbitrator *memArbitrator
Killer *sqlkiller.SQLKiller
bytesLimit atomic.Pointer[bytesLimits]
actionMuForHardLimit actionMu
actionMuForSoftLimit actionMu
mu struct {
// The children memory trackers. If the Tracker is the Global Tracker, like executor.GlobalDiskUsageTracker,
// we wouldn't maintain its children in order to avoiding mutex contention.
children map[int][]*Tracker
sync.Mutex
}
label int // Label of this "Tracker".
// following fields are used with atomic operations, so make them 64-byte aligned.
bytesReleased int64 // Released bytes.
maxConsumed atomicutil.Int64 // max number of bytes consumed during execution.
SessionID atomicutil.Uint64 // SessionID indicates the sessionID the tracker is bound.
bytesConsumed int64 // Consumed bytes.
IsRootTrackerOfSess bool // IsRootTrackerOfSess indicates whether this tracker is bound for session
isGlobal bool // isGlobal indicates whether this tracker is global tracker
}
type actionMu struct {
actionOnExceed ActionOnExceed
sync.Mutex
}
// EnableGCAwareMemoryTrack is used to turn on/off the GC-aware memory track
var EnableGCAwareMemoryTrack = atomicutil.NewBool(false)
// https://golang.google.cn/pkg/runtime/#SetFinalizer
// It is not guaranteed that a finalizer will run if the size of *obj is zero bytes.
type finalizerRef struct {
_ byte //nolint:unused
}
// softScale means the scale of the soft limit to the hard limit.
const softScale = 0.8
// bytesLimits holds limit config atomically.
type bytesLimits struct {
bytesHardLimit int64 // bytesHardLimit <= 0 means no limit, used for actionMuForHardLimit.
bytesSoftLimit int64 // bytesSoftLimit <= 0 means no limit, used for actionMuForSoftLimit.
}
var unlimitedBytesLimit = bytesLimits{
bytesHardLimit: -1,
bytesSoftLimit: -1,
}
var defaultQueryQuota = bytesLimits{
bytesHardLimit: DefMemQuotaQuery,
bytesSoftLimit: DefMemQuotaQuery * 8 / 10,
}
// MemUsageTop1Tracker record the use memory top1 session's tracker for kill.
var MemUsageTop1Tracker atomic.Pointer[Tracker]
var mockDebugInject func()
// InitTracker initializes a memory tracker.
// 1. "label" is the label used in the usage string.
// 2. "bytesLimit <= 0" means no limit.
//
// For the common tracker, isGlobal is default as false
func InitTracker(t *Tracker, label int, bytesLimit int64, action ActionOnExceed) {
t.mu.children = nil
t.actionMuForHardLimit.actionOnExceed = action
t.actionMuForSoftLimit.actionOnExceed = nil
t.parent.Store(nil)
t.label = label
if bytesLimit <= 0 {
t.bytesLimit.Store(&unlimitedBytesLimit)
} else if bytesLimit == DefMemQuotaQuery {
t.bytesLimit.Store(&defaultQueryQuota)
} else {
t.bytesLimit.Store(&bytesLimits{
bytesHardLimit: bytesLimit,
bytesSoftLimit: int64(float64(bytesLimit) * softScale),
})
}
t.maxConsumed.Store(0)
t.isGlobal = false
}
// NewTracker creates a memory tracker.
// 1. "label" is the label used in the usage string.
// 2. "bytesLimit <= 0" means no limit.
//
// For the common tracker, isGlobal is default as false
func NewTracker(label int, bytesLimit int64) *Tracker {
t := &Tracker{
label: label,
}
t.bytesLimit.Store(&bytesLimits{
bytesHardLimit: bytesLimit,
bytesSoftLimit: int64(float64(bytesLimit) * softScale),
})
t.actionMuForHardLimit.actionOnExceed = &LogOnExceed{}
t.isGlobal = false
return t
}
// NewGlobalTracker creates a global tracker, its isGlobal is default as true
func NewGlobalTracker(label int, bytesLimit int64) *Tracker {
t := &Tracker{
label: label,
}
t.bytesLimit.Store(&bytesLimits{
bytesHardLimit: bytesLimit,
bytesSoftLimit: int64(float64(bytesLimit) * softScale),
})
t.actionMuForHardLimit.actionOnExceed = &LogOnExceed{}
t.isGlobal = true
return t
}
// CheckBytesLimit check whether the bytes limit of the tracker is equal to a value.
// Only used in test.
func (t *Tracker) CheckBytesLimit(val int64) bool {
return t.bytesLimit.Load().bytesHardLimit == val
}
// SetBytesLimit sets the bytes limit for this tracker.
// "bytesHardLimit <= 0" means no limit.
func (t *Tracker) SetBytesLimit(bytesLimit int64) {
if bytesLimit <= 0 {
t.bytesLimit.Store(&unlimitedBytesLimit)
} else if bytesLimit == DefMemQuotaQuery {
t.bytesLimit.Store(&defaultQueryQuota)
} else {
t.bytesLimit.Store(&bytesLimits{
bytesHardLimit: bytesLimit,
bytesSoftLimit: int64(float64(bytesLimit) * softScale),
})
}
}
// GetBytesLimit gets the bytes limit for this tracker.
// "bytesHardLimit <= 0" means no limit.
func (t *Tracker) GetBytesLimit() int64 {
return t.bytesLimit.Load().bytesHardLimit
}
// CheckExceed checks whether the consumed bytes is exceed for this tracker.
func (t *Tracker) CheckExceed() bool {
bytesHardLimit := t.bytesLimit.Load().bytesHardLimit
return atomic.LoadInt64(&t.bytesConsumed) >= bytesHardLimit && bytesHardLimit > 0
}
// SetActionOnExceed sets the action when memory usage exceeds bytesHardLimit.
func (t *Tracker) SetActionOnExceed(a ActionOnExceed) {
t.actionMuForHardLimit.Lock()
defer t.actionMuForHardLimit.Unlock()
t.actionMuForHardLimit.actionOnExceed = a
}
// FallbackOldAndSetNewAction sets the action when memory usage exceeds bytesHardLimit
// and set the original action as its fallback.
func (t *Tracker) FallbackOldAndSetNewAction(a ActionOnExceed) {
t.actionMuForHardLimit.Lock()
defer t.actionMuForHardLimit.Unlock()
t.actionMuForHardLimit.actionOnExceed = reArrangeFallback(a, t.actionMuForHardLimit.actionOnExceed)
}
// FallbackOldAndSetNewActionForSoftLimit sets the action when memory usage exceeds bytesSoftLimit
// and set the original action as its fallback.
func (t *Tracker) FallbackOldAndSetNewActionForSoftLimit(a ActionOnExceed) {
t.actionMuForSoftLimit.Lock()
defer t.actionMuForSoftLimit.Unlock()
t.actionMuForSoftLimit.actionOnExceed = reArrangeFallback(a, t.actionMuForSoftLimit.actionOnExceed)
}
// GetFallbackForTest get the oom action used by test.
func (t *Tracker) GetFallbackForTest(ignoreFinishedAction bool) ActionOnExceed {
t.actionMuForHardLimit.Lock()
defer t.actionMuForHardLimit.Unlock()
if t.actionMuForHardLimit.actionOnExceed != nil && t.actionMuForHardLimit.actionOnExceed.IsFinished() && ignoreFinishedAction {
t.actionMuForHardLimit.actionOnExceed = t.actionMuForHardLimit.actionOnExceed.GetFallback()
}
return t.actionMuForHardLimit.actionOnExceed
}
// UnbindActions unbinds actionForHardLimit and actionForSoftLimit.
func (t *Tracker) UnbindActions() {
t.actionMuForSoftLimit.Lock()
defer t.actionMuForSoftLimit.Unlock()
t.actionMuForSoftLimit.actionOnExceed = nil
t.actionMuForHardLimit.Lock()
defer t.actionMuForHardLimit.Unlock()
// Currently this method is only called by ResetContextOfStmt, which then always calls SetActionOnExceed to set
// actionForHardLimit.actionOnExceed properly, thus it's safe to set it nil here.
t.actionMuForHardLimit.actionOnExceed = nil
}
// UnbindActionFromHardLimit unbinds action from hardLimit.
func (t *Tracker) UnbindActionFromHardLimit(actionToUnbind ActionOnExceed) {
t.actionMuForHardLimit.Lock()
defer t.actionMuForHardLimit.Unlock()
var prev ActionOnExceed
for current := t.actionMuForHardLimit.actionOnExceed; current != nil; current = current.GetFallback() {
if current == actionToUnbind {
if prev == nil {
// actionToUnbind is the first element
t.actionMuForHardLimit.actionOnExceed = current.GetFallback()
} else {
// actionToUnbind is not the first element
prev.SetFallback(current.GetFallback())
}
break
}
prev = current
}
}
// reArrangeFallback merge two action chains and rearrange them by priority in descending order.
func reArrangeFallback(a ActionOnExceed, b ActionOnExceed) ActionOnExceed {
if a == nil {
return b
}
if b == nil {
return a
}
if a.GetPriority() < b.GetPriority() {
a, b = b, a
}
a.SetFallback(reArrangeFallback(a.GetFallback(), b))
return a
}
// SetLabel sets the label of a Tracker.
func (t *Tracker) SetLabel(label int) {
parent := t.getParent()
t.Detach()
t.label = label
if parent != nil {
t.AttachTo(parent)
}
}
// Label gets the label of a Tracker.
func (t *Tracker) Label() int {
return t.label
}
// AttachTo attaches this memory tracker as a child to another Tracker. If it
// already has a parent, this function will remove it from the old parent.
// Its consumed memory usage is used to update all its ancestors.
func (t *Tracker) AttachTo(parent *Tracker) {
if parent.isGlobal {
t.AttachToGlobalTracker(parent)
return
}
oldParent := t.getParent()
if oldParent != nil {
oldParent.remove(t)
}
parent.mu.Lock()
if parent.mu.children == nil {
parent.mu.children = make(map[int][]*Tracker)
}
parent.mu.children[t.label] = append(parent.mu.children[t.label], t)
parent.mu.Unlock()
t.setParent(parent)
parent.Consume(t.BytesConsumed())
}
// Detach de-attach the tracker child from its parent, then set its parent property as nil
func (t *Tracker) Detach() {
if t == nil {
return
}
parent := t.getParent()
if parent == nil {
return
}
if parent.isGlobal {
t.DetachFromGlobalTracker()
return
}
exception := false // record whether the session is killed before resetting the killer
if m := t.MemArbitrator; m != nil && m.killer != nil {
exception = m.killer.Signal != 0
}
if parent.IsRootTrackerOfSess && t.label != LabelForMemDB {
parent.actionMuForHardLimit.Lock()
parent.actionMuForHardLimit.actionOnExceed = nil
parent.actionMuForHardLimit.Unlock()
parent.actionMuForSoftLimit.Lock()
parent.actionMuForSoftLimit.actionOnExceed = nil
parent.actionMuForSoftLimit.Unlock()
parent.Killer.Reset()
}
parent.remove(t)
t.setParent(nil) //atomic operator
t.DetachMemArbitrator(exception)
}
func (t *Tracker) remove(oldChild *Tracker) {
found := false
label := oldChild.label
t.mu.Lock()
if t.mu.children != nil {
children := t.mu.children[label]
for i, child := range children {
if child == oldChild {
children = slices.Delete(children, i, i+1)
if len(children) > 0 {
t.mu.children[label] = children
} else {
delete(t.mu.children, label)
}
found = true
break
}
}
}
t.mu.Unlock()
if found {
oldChild.setParent(nil)
t.Consume(-oldChild.BytesConsumed())
}
}
// ReplaceChild removes the old child specified in "oldChild" and add a new
// child specified in "newChild". old child's memory consumption will be
// removed and new child's memory consumption will be added.
func (t *Tracker) ReplaceChild(oldChild, newChild *Tracker) {
if newChild == nil {
t.remove(oldChild)
return
}
if oldChild.label != newChild.label {
t.remove(oldChild)
newChild.AttachTo(t)
return
}
newConsumed := newChild.BytesConsumed()
newChild.setParent(t)
label := oldChild.label
t.mu.Lock()
if t.mu.children != nil {
children := t.mu.children[label]
for i, child := range children {
if child != oldChild {
continue
}
newConsumed -= oldChild.BytesConsumed()
oldChild.setParent(nil)
children[i] = newChild
t.mu.children[label] = children
break
}
}
t.mu.Unlock()
t.Consume(newConsumed)
}
// Consume is used to consume a memory usage. "bytes" can be a negative value,
// which means this is a memory release operation. When memory usage of a tracker
// exceeds its bytesSoftLimit/bytesHardLimit, the tracker calls its action, so does each of its ancestors.
func (t *Tracker) Consume(bs int64) {
if bs == 0 {
return
}
var rootExceed, rootExceedForSoftLimit, sessionRootTracker *Tracker
for tracker := t; tracker != nil; tracker = tracker.getParent() {
if tracker.IsRootTrackerOfSess {
sessionRootTracker = tracker
}
if m := tracker.MemArbitrator; m != nil {
if bs > 0 {
if m.useBigBudget() {
if m.addBigBudgetUsed(bs) > m.bigBudgetGrowThreshold() {
m.growBigBudget()
}
} else { // fast path for small budget
if m.addSmallBudget(bs) > m.budget.smallLimit {
m.intoBigBudget()
} else {
b := m.smallBudget()
if t := m.approxUnixTimeSec(); b.getLastUsedTimeSec() != t {
b.setLastUsedTimeSec(t)
}
if b.Used.Load() > b.approxCapacity() && b.PullFromUpstream() != nil {
m.intoBigBudget()
}
}
}
} else if m.useBigBudget() { // delta <= 0 && use big budget
m.addBigBudgetUsed(bs)
} else { // delta <= 0 && use small budget
m.addSmallBudget(bs)
}
}
bytesConsumed := atomic.AddInt64(&tracker.bytesConsumed, bs)
bytesReleased := atomic.LoadInt64(&tracker.bytesReleased)
limits := tracker.bytesLimit.Load()
if bytesConsumed+bytesReleased >= limits.bytesHardLimit && limits.bytesHardLimit > 0 {
rootExceed = tracker
}
if bytesConsumed+bytesReleased >= limits.bytesSoftLimit && limits.bytesSoftLimit > 0 {
rootExceedForSoftLimit = tracker
}
for {
maxNow := tracker.maxConsumed.Load()
consumed := atomic.LoadInt64(&tracker.bytesConsumed)
if consumed > maxNow && !tracker.maxConsumed.CompareAndSwap(maxNow, consumed) {
continue
}
if tracker.label == LabelForGlobalAnalyzeMemory {
// `LabelForGlobalAnalyzeMemory` represents in-use memory, which should never be negative.
intest.Assert(consumed >= 0, fmt.Sprintf("global analyze memory usage negative: %d", consumed))
}
if label, ok := MetricsTypes[tracker.label]; ok {
metrics.MemoryUsage.WithLabelValues(label[0], label[1]).Set(float64(consumed))
}
break
}
}
tryAction := func(mu *actionMu, tracker *Tracker) {
mu.Lock()
defer mu.Unlock()
for mu.actionOnExceed != nil && mu.actionOnExceed.IsFinished() {
mu.actionOnExceed = mu.actionOnExceed.GetFallback()
}
if mu.actionOnExceed != nil {
mu.actionOnExceed.Action(tracker)
}
}
if bs > 0 && !UsingGlobalMemArbitration() && sessionRootTracker != nil {
// Update the Top1 session
memUsage := sessionRootTracker.BytesConsumed()
limitSessMinSize := ServerMemoryLimitSessMinSize.Load()
if uint64(memUsage) >= limitSessMinSize {
oldTracker := MemUsageTop1Tracker.Load()
for oldTracker.LessThan(sessionRootTracker) {
if MemUsageTop1Tracker.CompareAndSwap(oldTracker, sessionRootTracker) {
break
}
oldTracker = MemUsageTop1Tracker.Load()
}
}
}
if bs > 0 && sessionRootTracker != nil {
err := sessionRootTracker.Killer.HandleSignal()
if err != nil {
panic(err)
}
}
if bs > 0 && rootExceed != nil {
tryAction(&rootExceed.actionMuForHardLimit, rootExceed)
}
if bs > 0 && rootExceedForSoftLimit != nil {
tryAction(&rootExceedForSoftLimit.actionMuForSoftLimit, rootExceedForSoftLimit)
}
}
// HandleKillSignal checks if a kill signal has been sent to the session root tracker.
// If a kill signal is detected, it panics with the error returned by the signal handler.
func (t *Tracker) HandleKillSignal() {
var sessionRootTracker *Tracker
for tracker := t; tracker != nil; tracker = tracker.getParent() {
if tracker.IsRootTrackerOfSess {
sessionRootTracker = tracker
}
}
if sessionRootTracker != nil {
err := sessionRootTracker.Killer.HandleSignal()
if err != nil {
panic(err)
}
}
}
// BufferedConsume is used to buffer memory usage and do late consume
// not thread-safe, should be called in one goroutine
func (t *Tracker) BufferedConsume(bufferedMemSize *int64, bytes int64) {
*bufferedMemSize += bytes
if *bufferedMemSize >= int64(TrackMemWhenExceeds) {
t.Consume(*bufferedMemSize)
*bufferedMemSize = int64(0)
}
}
// Release is used to release memory tracked, track the released memory until GC triggered if needed
// If you want your track to be GC-aware, please use Release(bytes) instead of Consume(-bytes), and pass the memory size of the real object.
// Only Analyze is integrated with Release so far.
func (t *Tracker) Release(bytes int64) {
if bytes == 0 {
return
}
defer t.Consume(-bytes)
for tracker := t; tracker != nil; tracker = tracker.getParent() {
if tracker.shouldRecordRelease() {
// use fake ref instead of obj ref, otherwise obj will be reachable again and gc in next cycle
newRef := &finalizerRef{}
finalizer := func(tracker *Tracker) func(ref *finalizerRef) {
return func(*finalizerRef) {
tracker.release(bytes) // finalizer func is called async
}
}
runtime.SetFinalizer(newRef, finalizer(tracker))
tracker.recordRelease(bytes)
return
}
}
}
// BufferedRelease is used to buffer memory release and do late release
// not thread-safe, should be called in one goroutine
func (t *Tracker) BufferedRelease(bufferedMemSize *int64, bytes int64) {
*bufferedMemSize += bytes
if *bufferedMemSize >= int64(TrackMemWhenExceeds) {
t.Release(*bufferedMemSize)
*bufferedMemSize = int64(0)
}
}
func (t *Tracker) shouldRecordRelease() bool {
return EnableGCAwareMemoryTrack.Load() && t.label == LabelForGlobalAnalyzeMemory
}
func (t *Tracker) recordRelease(bytes int64) {
for tracker := t; tracker != nil; tracker = tracker.getParent() {
bytesReleased := atomic.AddInt64(&tracker.bytesReleased, bytes)
if label, ok := MetricsTypes[tracker.label]; ok {
metrics.MemoryUsage.WithLabelValues(label[0], label[2]).Set(float64(bytesReleased))
}
}
}
func (t *Tracker) release(bytes int64) {
for tracker := t; tracker != nil; tracker = tracker.getParent() {
bytesReleased := atomic.AddInt64(&tracker.bytesReleased, -bytes)
if label, ok := MetricsTypes[tracker.label]; ok {
metrics.MemoryUsage.WithLabelValues(label[0], label[2]).Set(float64(bytesReleased))
}
}
}
// BytesConsumed returns the consumed memory usage value in bytes.
func (t *Tracker) BytesConsumed() int64 {
return atomic.LoadInt64(&t.bytesConsumed)
}
// BytesReleased returns the released memory value in bytes.
func (t *Tracker) BytesReleased() int64 {
return atomic.LoadInt64(&t.bytesReleased)
}
// MaxConsumed returns max number of bytes consumed during execution.
// Note: Don't make this method return -1 for special meanings in the future. Because binary plan has used -1 to
// distinguish between "0 bytes" and "N/A". ref: binaryOpFromFlatOp()
func (t *Tracker) MaxConsumed() int64 {
return t.maxConsumed.Load()
}
// ResetMaxConsumed should be invoked before executing a new statement in a session.
func (t *Tracker) ResetMaxConsumed() {
t.maxConsumed.Store(t.BytesConsumed())
}
// SearchTrackerWithoutLock searches the specific tracker under this tracker without lock.
func (t *Tracker) SearchTrackerWithoutLock(label int) *Tracker {
if t.label == label {
return t
}
children := t.mu.children[label]
if len(children) > 0 {
return children[0]
}
return nil
}
// SearchTrackerConsumedMoreThanNBytes searches the specific tracker that consumes more than NBytes.
func (t *Tracker) SearchTrackerConsumedMoreThanNBytes(limit int64) (res []*Tracker) {
t.mu.Lock()
defer t.mu.Unlock()
for _, childSlice := range t.mu.children {
for _, tracker := range childSlice {
if tracker.BytesConsumed() > limit {
res = append(res, tracker)
}
}
}
return
}
// String returns the string representation of this Tracker tree.
func (t *Tracker) String() string {
buffer := bytes.NewBufferString("\n")
t.toString("", buffer)
return buffer.String()
}
func (t *Tracker) toString(indent string, buffer *bytes.Buffer) {
fmt.Fprintf(buffer, "%s\"%d\"{\n", indent, t.label)
bytesLimit := t.GetBytesLimit()
if bytesLimit > 0 {
fmt.Fprintf(buffer, "%s \"quota\": %s\n", indent, t.FormatBytes(bytesLimit))
}
fmt.Fprintf(buffer, "%s \"consumed\": %s\n", indent, t.FormatBytes(t.BytesConsumed()))
t.mu.Lock()
labels := make([]int, 0, len(t.mu.children))
for label := range t.mu.children {
labels = append(labels, label)
}
slices.Sort(labels)
for _, label := range labels {
children := t.mu.children[label]
for _, child := range children {
child.toString(indent+" ", buffer)
}
}
t.mu.Unlock()
buffer.WriteString(indent + "}\n")
}
// FormatBytes uses to format bytes, this function will prune precision before format bytes.
func (*Tracker) FormatBytes(numBytes int64) string {
return FormatBytes(numBytes)
}
// LessThan indicates whether t byteConsumed is less than t2 byteConsumed.
func (t *Tracker) LessThan(t2 *Tracker) bool {
if t == nil {
return true
}
if t2 == nil {
return false
}
return t.BytesConsumed() < t2.BytesConsumed()
}
// BytesToString converts the memory consumption to a readable string.
func BytesToString(numBytes int64) string {
gb := float64(numBytes) / float64(byteSizeGB)
if gb > 1 {
return fmt.Sprintf("%v GB", gb)
}
mb := float64(numBytes) / float64(byteSizeMB)
if mb > 1 {
return fmt.Sprintf("%v MB", mb)
}
kb := float64(numBytes) / float64(byteSizeKB)
if kb > 1 {
return fmt.Sprintf("%v KB", kb)
}
return fmt.Sprintf("%v Bytes", numBytes)
}
// FormatBytes uses to format bytes, this function will prune precision before format bytes.
func FormatBytes(numBytes int64) string {
if numBytes <= byteSizeKB {
return BytesToString(numBytes)
}
unit, unitStr := getByteUnit(numBytes)
if unit == byteSize {
return BytesToString(numBytes)
}
v := float64(numBytes) / float64(unit)
decimal := 1
if numBytes%unit == 0 {
decimal = 0
} else if v < 10 {
decimal = 2
}
return fmt.Sprintf("%v %s", strconv.FormatFloat(v, 'f', decimal, 64), unitStr)
}
func getByteUnit(b int64) (int64, string) {
if b > byteSizeGB {
return byteSizeGB, "GB"
} else if b > byteSizeMB {
return byteSizeMB, "MB"
} else if b > byteSizeKB {
return byteSizeKB, "KB"
}
return byteSize, "Bytes"
}
// AttachToGlobalTracker attach the tracker to the global tracker
// AttachToGlobalTracker should be called at the initialization for the session executor's tracker
func (t *Tracker) AttachToGlobalTracker(globalTracker *Tracker) {
if globalTracker == nil {
return
}
if !globalTracker.isGlobal {
panic("Attach to a non-GlobalTracker")
}
parent := t.getParent()
if parent != nil {
if parent.isGlobal {
parent.Consume(-t.BytesConsumed())
} else {
parent.remove(t)
}
}
t.setParent(globalTracker)
globalTracker.Consume(t.BytesConsumed())
}
// DetachFromGlobalTracker detach itself from its parent
// Note that only the parent of this tracker is Global Tracker could call this function
// Otherwise it should use Detach
func (t *Tracker) DetachFromGlobalTracker() {
parent := t.getParent()
if parent == nil {
return
}
if !parent.isGlobal {
panic("Detach from a non-GlobalTracker")
}
parent.Consume(-t.BytesConsumed())
t.setParent(nil)
}
// ReplaceBytesUsed replace bytesConsume for the tracker
func (t *Tracker) ReplaceBytesUsed(bytes int64) {
t.Consume(bytes - t.BytesConsumed())
}
// Reset detach the tracker from the old parent and clear the old children. The label and byteLimit would not be reset.
func (t *Tracker) Reset() {
t.Detach()
t.ReplaceBytesUsed(0)
t.mu.children = nil
}
func (t *Tracker) getParent() *Tracker {
return t.parent.Load()
}
func (t *Tracker) setParent(parent *Tracker) {
t.parent.Store(parent)
}
// CountAllChildrenMemUse return memory used tree for the tracker
func (t *Tracker) CountAllChildrenMemUse() map[string]int64 {
trackerMemUseMap := make(map[string]int64, 1024)
countChildMem(t, "", trackerMemUseMap)
return trackerMemUseMap
}
// GetChildrenForTest returns children trackers
func (t *Tracker) GetChildrenForTest() []*Tracker {
t.mu.Lock()
defer t.mu.Unlock()
trackers := make([]*Tracker, 0)
for _, list := range t.mu.children {
trackers = append(trackers, list...)
}
return trackers
}
func countChildMem(t *Tracker, familyTreeName string, trackerMemUseMap map[string]int64) {
if len(familyTreeName) > 0 {
familyTreeName += " <- "
}
familyTreeName += "[" + strconv.Itoa(t.Label()) + "]"
trackerMemUseMap[familyTreeName] += t.BytesConsumed()
t.mu.Lock()
defer t.mu.Unlock()
for _, sli := range t.mu.children {
for _, tracker := range sli {
countChildMem(tracker, familyTreeName, trackerMemUseMap)
}
}
}
const (
// LabelForSQLText represents the label of the SQL Text
LabelForSQLText int = -1
// LabelForIndexWorker represents the label of the index worker
LabelForIndexWorker int = -2
// LabelForInnerList represents the label of the inner list
LabelForInnerList int = -3
// LabelForInnerTable represents the label of the inner table
LabelForInnerTable int = -4
// LabelForOuterTable represents the label of the outer table
LabelForOuterTable int = -5
// LabelForCoprocessor represents the label of the coprocessor
LabelForCoprocessor int = -6
// LabelForChunkList represents the label of the chunk list
LabelForChunkList int = -7
// LabelForGlobalSimpleLRUCache represents the label of the Global SimpleLRUCache
LabelForGlobalSimpleLRUCache int = -8
// LabelForChunkDataInDiskByRows represents the label of the chunk list in disk
LabelForChunkDataInDiskByRows int = -9
// LabelForRowContainer represents the label of the row container
LabelForRowContainer int = -10
// LabelForGlobalStorage represents the label of the Global Storage
LabelForGlobalStorage int = -11
// LabelForGlobalMemory represents the label of the Global Memory
LabelForGlobalMemory int = -12
// LabelForBuildSideResult represents the label of the BuildSideResult
LabelForBuildSideResult int = -13
// LabelForRowChunks represents the label of the row chunks
LabelForRowChunks int = -14
// LabelForStatsCache represents the label of the stats cache
LabelForStatsCache int = -15
// LabelForOuterList represents the label of the outer list
LabelForOuterList int = -16
// LabelForApplyCache represents the label of the apply cache
LabelForApplyCache int = -17
// LabelForSimpleTask represents the label of the simple task
LabelForSimpleTask int = -18
// LabelForCTEStorage represents the label of CTE storage
LabelForCTEStorage int = -19
// LabelForIndexJoinInnerWorker represents the label of IndexJoin InnerWorker
LabelForIndexJoinInnerWorker int = -20
// LabelForIndexJoinOuterWorker represents the label of IndexJoin OuterWorker
LabelForIndexJoinOuterWorker int = -21
// LabelForBindCache represents the label of the bind cache
LabelForBindCache int = -22
// LabelForNonTransactionalDML represents the label of the non-transactional DML
LabelForNonTransactionalDML = -23
// LabelForAnalyzeMemory represents the label of the memory of each analyze job
LabelForAnalyzeMemory int = -24
// LabelForGlobalAnalyzeMemory represents the label of the global memory of all analyze jobs
LabelForGlobalAnalyzeMemory int = -25
// LabelForPreparedPlanCache represents the label of the prepared plan cache memory usage
LabelForPreparedPlanCache int = -26
// LabelForSession represents the label of a session.
LabelForSession int = -27
// LabelForMemDB represents the label of the MemDB
LabelForMemDB int = -28
// LabelForCursorFetch represents the label of the execution of cursor fetch
LabelForCursorFetch int = -29
// LabelForChunkDataInDiskByChunks represents the label of the chunk list in disk
LabelForChunkDataInDiskByChunks int = -30
// LabelForSortPartition represents the label of the sort partition
LabelForSortPartition int = -31
// LabelForHashTableInHashJoinV2 represents the label of the hash join v2's hash table
LabelForHashTableInHashJoinV2 int = -32
)
// MetricsTypes is used to get label for metrics
// string[0] is LblModule, string[1] is heap-in-use type, string[2] is released type
var MetricsTypes = map[int][]string{
LabelForGlobalAnalyzeMemory: {"analyze", "inuse", "released"},
}
const (
memArbitratorStateSmallBudget int32 = iota // using small budget
memArbitratorStateIntoBigBudget // initializing big budget from small budget
memArbitratorStateBigBudget // using big budget
memArbitratorStateDown // down
)
type memArbitrator struct {
*MemArbitrator
ctx *ArbitrationContext
killer *sqlkiller.SQLKiller
budget struct {
smallB *TrackedConcurrentBudget
mu struct {
bigB ConcurrentBudget // bigB.Used (aks growThreshold): threshold to pull from upstream (95% * bigB.Capacity)
bigUsed atomic.Int64 // bigUsed <= growThreshold <= bigB.Capacity
smallUsed atomic.Int64
_ cpuCacheLinePad
}
smallLimit int64
useBig struct {
sync.Mutex
atomic.Bool
}
}
uid uint64
digestID uint64 // identify the digest profile of root-pool / SQL
reserveSize int64
isInternal bool
state atomic.Int32 // states: the current state of memArbitrator
prevMaxMem int64
AwaitAlloc struct {
TotalDur atomic.Int64 // total time spent waiting for memory allocation in nanoseconds
StartUtime int64 // start time of the last allocation attempt in nanoseconds.
Size int64 // size of the last allocation attempt in bytes. 0 means no allocation attempt is in progress.
}
}
func (m *memArbitrator) bigBudget() *ConcurrentBudget {
return &m.budget.mu.bigB
}
func (m *memArbitrator) smallBudget() *TrackedConcurrentBudget {
return m.budget.smallB
}
func (m *memArbitrator) bigBudgetGrowThreshold() int64 {
return m.bigBudget().Used.Load()
}
func (m *memArbitrator) bigBudgetCap() int64 {
return m.bigBudget().approxCapacity()
}
func (m *memArbitrator) bigBudgetUsed() int64 {
return m.budget.mu.bigUsed.Load()
}
func (m *memArbitrator) setBigBudgetGrowThreshold(x int64) {
m.bigBudget().Used.Store(x)
}
func (m *memArbitrator) doSetBigBudgetCap(x int64) {
m.bigBudget().Capacity = x
}
func (m *memArbitrator) addBigBudgetUsed(d int64) int64 {
return m.budget.mu.bigUsed.Add(d)
}
func (m *memArbitrator) smallBudgetUsed() int64 {
return m.budget.mu.smallUsed.Load()
}
func (m *memArbitrator) addSmallBudget(d int64) int64 {
m.smallBudget().HeapInuse.Add(d)
m.smallBudget().Used.Add(d)
return m.budget.mu.smallUsed.Add(d)
}
func (m *memArbitrator) cleanSmallBudget() (res int64) {
res = m.budget.mu.smallUsed.Swap(0)
if res != 0 {
m.smallBudget().HeapInuse.Add(-res)
m.smallBudget().Used.Add(-res)
}
return res
}
func (m *memArbitrator) useBigBudget() bool {
return m.budget.useBig.Load()
}
// MemArbitration returns the time cost of memory arbitration in nanoseconds
func (t *Tracker) MemArbitration() time.Duration {
if t == nil {
return 0
}
m := t.MemArbitrator
if m == nil {
return 0
}
return time.Duration(m.AwaitAlloc.TotalDur.Load())
}
// WaitArbitrate returns the start time and size of the last memory allocation attempt.
func (t *Tracker) WaitArbitrate() (ts time.Time, size int64) {
if t == nil {
return
}
m := t.MemArbitrator
if m == nil {
return
}
return time.Unix(0, m.AwaitAlloc.StartUtime), m.AwaitAlloc.Size
}
func (m *memArbitrator) growBigBudget() {
duration := int64(0)
{
upper := m.bigBudget()
upper.Lock()
used, growThreshold, capacity := m.bigBudgetUsed(), m.bigBudgetGrowThreshold(), m.bigBudgetCap()
if used > growThreshold {
// expect next cap := used * 2.718
extra := max(((used*2783)>>10)-capacity, upper.Pool.allocAlignSize)
extra = min(extra, m.poolAllocStats.MaxPoolAllocUnit)
extra = max(extra, used-capacity)
m.AwaitAlloc.StartUtime = time.Now().UnixNano()
m.AwaitAlloc.Size = extra
if err := upper.Pool.allocate(extra); err == nil {
capacity += extra
m.doSetBigBudgetCap(capacity)
m.setBigBudgetGrowThreshold(max(capacity*95/100, used))
}
duration = time.Now().UnixNano() - m.AwaitAlloc.StartUtime
m.AwaitAlloc.StartUtime = 0
m.AwaitAlloc.Size = 0
}
upper.Unlock()
}
if duration > 0 {
m.AwaitAlloc.TotalDur.Add(duration)
metrics.GlobalMemArbitrationDuration.Observe(time.Duration(duration).Seconds())
}
}
func (m *memArbitrator) intoBigBudget() bool {
m.budget.useBig.Lock()
defer m.budget.useBig.Unlock()
if m.useBigBudget() {
return false
}
root, err := m.EmplaceRootPool(m.uid)
if err != nil {
panic(err)
}
{ // internal session stats
delta := int64(0)
if oriCtx := root.entry.ctx.Load(); oriCtx != nil {
if oriHelper, ok := oriCtx.arbitrateHelper.(*memArbitrator); ok && oriHelper.isInternal {
delta--
}
}
if m.isInternal {
delta++
}
if delta != 0 {
globalArbitrator.metrics.pools.internalSession.Add(delta)
}
}
smallUsed := max(0, m.smallBudgetUsed())
if !m.RestartEntryByContext(root, m.ctx) || !m.state.CompareAndSwap(memArbitratorStateSmallBudget, memArbitratorStateIntoBigBudget) {
panic("failed to init mem pool")
}
if maxMemHint := max(m.prevMaxMem, smallUsed); maxMemHint > m.buffer.size.Load() {
m.tryToUpdateBuffer(maxMemHint, m.approxUnixTimeSec())
}
{
globalArbitrator.metrics.pools.small.Add(-1)
globalArbitrator.metrics.pools.intoBig.Add(1)
}
if intest.InTest {
if mockDebugInject != nil {
mockDebugInject()
}
}
m.addBigBudgetUsed(smallUsed)
m.bigBudget().Pool = root.entry.pool
if m.reserveSize > 0 {
m.reserveBigBudget(m.reserveSize)
metrics.GlobalMemArbitratorSubEvents.PoolInitReserve.Inc()
} else if m.prevMaxMem > 0 {
metrics.GlobalMemArbitratorSubEvents.PoolInitHitDigest.Inc()
m.reserveBigBudget(m.prevMaxMem)
} else if m.bigBudgetUsed() > m.poolAllocStats.SmallPoolLimit {
if initCap := m.SuggestPoolInitCap(); initCap != 0 {
m.reserveBigBudget(initCap)
metrics.GlobalMemArbitratorSubEvents.PoolInitMediumQuota.Inc()
}
}
if m.bigBudgetCap() == 0 {
metrics.GlobalMemArbitratorSubEvents.PoolInitNone.Inc()
}
if m.bigBudgetUsed() > m.bigBudgetGrowThreshold() {
m.growBigBudget()
}
m.addBigBudgetUsed(m.cleanSmallBudget() - smallUsed)
m.budget.useBig.Store(true)
if m.state.CompareAndSwap(memArbitratorStateIntoBigBudget, memArbitratorStateBigBudget) {
globalArbitrator.metrics.pools.intoBig.Add(-1)
globalArbitrator.metrics.pools.big.Add(1)
}
return true
}
func (m *memArbitrator) reserveBigBudget(newCap int64) {
duration := int64(0)
{
upper := m.bigBudget()
upper.Lock()
capacity := m.bigBudgetCap()
extra := max(newCap*1053/1000, m.bigBudgetGrowThreshold(), capacity, m.bigBudgetUsed()*1053/1000) - capacity
m.AwaitAlloc.StartUtime = time.Now().UnixNano()
m.AwaitAlloc.Size = extra
if err := upper.Pool.allocate(extra); err == nil {
capacity += extra
m.doSetBigBudgetCap(capacity)
m.setBigBudgetGrowThreshold(capacity * 95 / 100)
}
duration = time.Now().UnixNano() - m.AwaitAlloc.StartUtime
m.AwaitAlloc.StartUtime = 0
m.AwaitAlloc.Size = 0
upper.Unlock()
}
if duration > 0 {
m.AwaitAlloc.TotalDur.Add(duration)
metrics.GlobalMemArbitrationDuration.Observe(time.Duration(duration).Seconds())
}
}
// DetachMemArbitrator detaches the mem arbitrator from the tracker and cleans up related resources.
func (t *Tracker) DetachMemArbitrator(exception bool) bool {
if t == nil {
return false
}
m := t.MemArbitrator
if m == nil {
return false
}
return m.reset(exception, t.MaxConsumed())
}
func (m *memArbitrator) reset(exception bool, maxConsumed int64) bool {
if m.smallBudgetUsed() != 0 {
m.cleanSmallBudget()
}
if m.state.Load() == memArbitratorStateDown {
return false
}
switch oriState := m.state.Swap(memArbitratorStateDown); oriState {
case memArbitratorStateSmallBudget:
globalArbitrator.metrics.pools.small.Add(-1)
case memArbitratorStateIntoBigBudget, memArbitratorStateBigBudget:
if oriState == memArbitratorStateIntoBigBudget { // wait for intoBigBudget to finish
m.budget.useBig.Lock()
globalArbitrator.metrics.pools.intoBig.Add(-1)
m.budget.useBig.Unlock()
} else {
globalArbitrator.metrics.pools.big.Add(-1)
}
default:
return false
}
if m.isInternal {
globalArbitrator.metrics.pools.internal.Add(-1)
}
if !exception {
m.UpdateDigestProfileCache(m.digestID, maxConsumed, m.approxUnixTimeSec())
}
if m.useBigBudget() {
m.bigBudget().Stop()
m.ResetRootPoolByID(m.uid, maxConsumed, !exception)
}
return true
}
// InitMemArbitratorForTest is a simplified version of InitMemArbitrator for test usage.
func (t *Tracker) InitMemArbitratorForTest() bool {
return t.InitMemArbitrator(GlobalMemArbitrator(), nil, "", ArbitrationPriorityMedium, false, 0, false)
}
// InitMemArbitrator attaches (not thread-safe) to the mem arbitrator and initializes the context
// "m" is the mem-arbitrator.
// "killer" is the sql killer.
// "digestKey" is the digest key.
// "memPriority" is the memory priority for arbitration.
// "waitAverse" represents the wait averse property.
// "explicitReserveSize" is the explicit mem quota size to be reserved.
// "isInternal" indicates whether the tracker is for internal session.
func (t *Tracker) InitMemArbitrator(
g *MemArbitrator,
killer *sqlkiller.SQLKiller,
digestKey string,
memPriority ArbitrationPriority,
waitAverse bool,
explicitReserveSize int64,
isInternal bool,
) bool {
if g == nil || t == nil {
return false
}
if m := t.MemArbitrator; m != nil {
m.reset(true, 0)
t.MemArbitrator = nil
}
uid := t.SessionID.Load()
digestID := HashStr(digestKey)
var cancelChan <-chan struct{}
if killer != nil {
cancelChan = killer.GetKillEventChan()
}
ctx := NewArbitrationContext(
cancelChan,
nil,
memPriority,
waitAverse,
true,
)
m := &memArbitrator{
MemArbitrator: g,
uid: uid,
killer: killer,
digestID: digestID,
reserveSize: explicitReserveSize,
ctx: ctx,
isInternal: isInternal,
}
t.MemArbitrator = m
ctx.arbitrateHelper = m
if explicitReserveSize == 0 && len(digestKey) > 0 {
if maxMem, found := g.GetDigestProfileCache(digestID, g.approxUnixTimeSec()); found {
m.prevMaxMem = maxMem
}
}
globalArbitrator.metrics.pools.small.Add(1)
if m.isInternal {
globalArbitrator.metrics.pools.internal.Add(1)
}
if explicitReserveSize > 0 || m.prevMaxMem > g.poolAllocStats.SmallPoolLimit {
m.intoBigBudget()
} else {
m.budget.smallB = g.GetAwaitFreeBudgets(uid)
m.budget.smallLimit = g.poolAllocStats.SmallPoolLimit
}
return true
}
func (m *memArbitrator) Finish() {
if m.isInternal { // internal session stats
globalArbitrator.metrics.pools.internalSession.Add(-1)
}
}
func (m *memArbitrator) Stop(reason ArbitratorStopReason) bool {
if m.killer != nil {
m.killer.SendKillSignalWithKillEventReason(sqlkiller.KilledByMemArbitrator, reason.String())
}
return true
}
func (m *memArbitrator) HeapInuse() int64 {
if m.useBigBudget() {
return m.bigBudgetUsed()
}
return 0
}
// Copyright 2025 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package memory
import (
"container/list"
"math/bits"
"runtime"
"runtime/metrics"
"sync/atomic"
"time"
"golang.org/x/sys/cpu"
)
const (
byteSize = 1
byteSizeKB = 1 << 10
byteSizeMB = 1 << 20
byteSizeGB = 1 << 30
kilo = 1000
)
// list with cache to avoid the cost of allocating and deallocating list elements.
type wrapList[V any] struct {
end wrapListElement
base list.List
num int64
}
type wrapListElement struct {
base *list.Element
}
func (w *wrapListElement) valid() bool {
return w.base != nil
}
func (w *wrapListElement) reset() {
w.base = nil
}
func (l *wrapList[V]) init() {
l.base.Init()
l.base.PushBack(nil)
l.end = wrapListElement{l.base.Back()}
}
func (l *wrapList[V]) moveToFront(e wrapListElement) {
l.base.MoveToFront(e.base)
}
func (l *wrapList[V]) doAddNum(x int64) {
l.num += x
}
func (l *wrapList[V]) remove(e wrapListElement) {
e.base.Value = nil
l.base.MoveToBack(e.base)
l.doAddNum(-1)
}
func (l *wrapList[V]) front() (res V) {
if l.empty() {
return
}
return l.base.Front().Value.(V)
}
func (l *wrapList[V]) popFront() (res V) {
if l.empty() {
return
}
e := l.base.Front()
res = e.Value.(V)
l.remove(wrapListElement{e})
return
}
func (l *wrapList[V]) size() int64 {
return l.num
}
func (l *wrapList[V]) empty() bool {
return l.size() == 0
}
//go:norace
func (l *wrapList[V]) approxSize() int64 {
return l.size()
}
//go:norace
func (l *wrapList[V]) approxEmpty() bool {
return l.empty()
}
func (l *wrapList[V]) pushBack(v V) wrapListElement {
var x *list.Element
if l.size()+1 == int64(l.base.Len()) {
x = l.base.InsertBefore(v, l.end.base)
} else {
x = l.base.Back()
l.base.MoveBefore(x, l.end.base)
x.Value = v
}
l.doAddNum(1)
return wrapListElement{x}
}
// Notifer works as the multiple producer & single consumer mode.
type Notifer struct {
C chan struct{}
awake int32
}
// NewNotifer creates a new Notifer instance.
func NewNotifer() Notifer {
return Notifer{
C: make(chan struct{}, 1),
}
}
// return previous awake status
func (n *Notifer) clear() bool {
return atomic.SwapInt32(&n.awake, 0) != 0
}
// Wait for signal synchronously (consumer)
func (n *Notifer) Wait() {
<-n.C
n.clear()
}
// Wake the consumer
func (n *Notifer) Wake() {
n.wake()
}
func (n *Notifer) wake() {
// 1 -> 1: do nothing
// 0 -> 1: send signal
if atomic.SwapInt32(&n.awake, 1) == 0 {
n.C <- struct{}{}
}
}
func (n *Notifer) isAwake() bool {
return atomic.LoadInt32(&n.awake) != 0
}
// WeakWake wakes the consumer if it is not awake (may loose signal under concurrent scenarios).
func (n *Notifer) WeakWake() {
if n.isAwake() {
return
}
n.wake()
}
// HashStr hashes a string to a uint64 value
func HashStr(key string) uint64 {
hashKey := initHashKey
for _, c := range key {
hashKey *= prime64
hashKey ^= uint64(c)
}
return hashKey
}
// HashEvenNum hashes a uint64 even number to a uint64 value
func HashEvenNum(key uint64) uint64 {
const step = 8
const stepMask uint64 = uint64(1)<<step - 1
hashKey := initHashKey
{
// handle significant last 8 bits
hashKey ^= (key & stepMask)
hashKey *= prime64
key >>= step
}
{
hashKey ^= key
hashKey *= prime64
}
return hashKey
}
func shardIndexByUID(key uint64, shardsMask uint64) uint64 {
return HashEvenNum(key) & shardsMask
}
func getQuotaShard(quota int64, maxQuotaShard int) int {
p := uint64(quota) / uint64(baseQuotaUnit)
pos := bits.Len64(p)
pos = min(pos, maxQuotaShard-1)
return pos
}
func nowUnixMilli() int64 {
return now().UnixMilli()
}
func nowUnixSec() int64 {
return now().Unix()
}
func now() time.Time {
return time.Now()
}
func nextPow2(n uint64) uint64 {
if n == 0 {
return 1
}
n--
n |= n >> 1
n |= n >> 2
n |= n >> 4
n |= n >> 8
n |= n >> 16
n |= n >> 32
n++
return n
}
func calcRatio(x, y int64) (zMilli int64) {
zMilli = x * kilo / y
return
}
func multiRatio(x, yMilli int64) int64 {
return x * yMilli / kilo
}
func intoRatio(x float64) (zMilli int64) {
zMilli = int64(x * kilo)
return
}
type cpuCacheLinePad cpu.CacheLinePad
// RuntimeMemStats represents the runtime memory statistics
type RuntimeMemStats struct {
HeapAlloc, HeapInuse, TotalFree, MemOffHeap, NumGC uint64
}
var gcTracker struct {
lastGCTime atomic.Int64 // approximate time of last GC in unix nano
lastNumGC atomic.Uint64
}
func approxLastGCTime() int64 {
return gcTracker.lastGCTime.Load()
}
// SampleRuntimeMemStats samples the runtime memory statistics efficiently without STW
func SampleRuntimeMemStats() (s RuntimeMemStats) {
heapSample := [7]metrics.Sample{
// heap alloc
{Name: "/memory/classes/heap/objects:bytes"},
// heap available
{Name: "/memory/classes/heap/unused:bytes"}, // unused
{Name: "/memory/classes/heap/free:bytes"},
{Name: "/memory/classes/heap/released:bytes"},
// memory total
{Name: "/memory/classes/total:bytes"},
// total free
{Name: "/gc/heap/frees:bytes"},
// total GC cycles
{Name: "/gc/cycles/total:gc-cycles"},
}
metrics.Read(heapSample[:])
s = RuntimeMemStats{
HeapAlloc: heapSample[0].Value.Uint64(),
HeapInuse: heapSample[0].Value.Uint64() + heapSample[1].Value.Uint64(), // inuse = alloc + unused
TotalFree: heapSample[5].Value.Uint64(),
NumGC: heapSample[6].Value.Uint64(),
}
total := heapSample[4].Value.Uint64()
heap := heapSample[0].Value.Uint64() + heapSample[1].Value.Uint64() + heapSample[2].Value.Uint64() + heapSample[3].Value.Uint64()
if total > heap {
s.MemOffHeap = total - heap
}
if s.NumGC > gcTracker.lastNumGC.Load() {
gcTracker.lastGCTime.Store(now().UnixNano())
gcTracker.lastNumGC.Store(s.NumGC)
}
return s
}
// IntoRuntimeMemStats converts runtime.MemStats to RuntimeMemStats
func IntoRuntimeMemStats(s *runtime.MemStats) RuntimeMemStats {
return RuntimeMemStats{
HeapAlloc: s.HeapAlloc,
HeapInuse: s.HeapInuse,
TotalFree: s.TotalAlloc - s.Alloc,
MemOffHeap: s.Sys - s.HeapSys,
NumGC: uint64(s.NumGC),
}
}
// Copyright 2024 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package naming
import (
"fmt"
"regexp"
)
const (
// mostly we use an uint64 as the keyspace name, the max value is 20 characters.
// And there are at most 16,777,215 keyspace ID in a single physical cluster,
// as keyspace ID is encoded into KV, it's very hard to extend its length, so
// current keyspace name limit is more than enough for current usage and later
// extension.
maxKeyspaceNameLength = 20
)
// Check if the name is valid.
// Valid name must be 64 characters or fewer and consist only of letters (a-z, A-Z),
// numbers (0-9), hyphens (-), and underscores (_).
// currently, we enforce this rule to tidb_service_scope and keyspace_name
func Check(name string) error {
return CheckWithMaxLen(name, 64)
}
// CheckKeyspaceName checks if the keyspace name is valid.
func CheckKeyspaceName(name string) error {
return CheckWithMaxLen(name, maxKeyspaceNameLength)
}
// CheckWithMaxLen checks if the name is valid with the specified maximum length.
func CheckWithMaxLen(name string, maxLen int) error {
namePattern := fmt.Sprintf(`^[a-zA-Z0-9_-]{0,%d}$`, maxLen)
nameRe := regexp.MustCompile(namePattern)
if !nameRe.MatchString(name) {
return fmt.Errorf("the value '%s' is invalid. It must be %d characters or fewer and consist only of letters (a-z, A-Z), numbers (0-9), hyphens (-), and underscores (_)", name, maxLen)
}
return nil
}
// Copyright 2020 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package parser
import (
"strings"
"github.com/pingcap/tidb/pkg/parser/ast"
"github.com/pingcap/tidb/pkg/parser/format"
"github.com/pingcap/tidb/pkg/util/logutil"
"go.uber.org/zap"
)
// GetDefaultDB checks if all tables in the AST have explicit DBName. If not, return specified DBName.
func GetDefaultDB(sel ast.StmtNode, dbName string) string {
implicitDB := &implicitDatabase{}
sel.Accept(implicitDB)
if implicitDB.hasImplicit {
return dbName
}
return ""
}
type implicitDatabase struct {
hasImplicit bool
}
func (i *implicitDatabase) Enter(in ast.Node) (out ast.Node, skipChildren bool) {
switch x := in.(type) {
case *ast.TableName:
if x.Schema.L == "" {
i.hasImplicit = true
}
return in, true
default:
return in, i.hasImplicit
}
}
func (*implicitDatabase) Leave(in ast.Node) (out ast.Node, ok bool) {
return in, true
}
func findTablePos(s, t string) int {
l := 0
for i := range s {
if s[i] == ' ' || s[i] == ',' {
if len(t) == i-l && strings.Compare(s[l:i], t) == 0 {
return l
}
l = i + 1
}
}
if len(t) == len(s)-l && strings.Compare(s[l:], t) == 0 {
return l
}
return -1
}
// SimpleCases captures simple SQL statements and uses string replacement instead of `restore` to improve performance.
// See https://github.com/pingcap/tidb/issues/22398.
func SimpleCases(node ast.StmtNode, defaultDB, origin string) (s string, ok bool) {
if len(origin) == 0 {
return "", false
}
insert, ok := node.(*ast.InsertStmt)
if !ok {
return "", false
}
if insert.Select != nil || insert.Setlist || insert.OnDuplicate != nil || len(insert.TableHints) != 0 {
return "", false
}
join := insert.Table.TableRefs
if join.Tp != 0 || join.Right != nil {
return "", false
}
ts, ok := join.Left.(*ast.TableSource)
if !ok {
return "", false
}
tn, ok := ts.Source.(*ast.TableName)
if !ok {
return "", false
}
parenPos := strings.Index(origin, "(")
if parenPos == -1 {
return "", false
}
if strings.Contains(origin[:parenPos], ".") {
return origin, true
}
lower := strings.ToLower(origin[:parenPos])
pos := findTablePos(lower, tn.Name.L)
if pos == -1 {
return "", false
}
var builder strings.Builder
builder.WriteString(origin[:pos])
if tn.Schema.String() != "" {
builder.WriteString(tn.Schema.String())
} else {
builder.WriteString(defaultDB)
}
builder.WriteString(".")
builder.WriteString(origin[pos:])
return builder.String(), true
}
// Three flags for restore with default DB:
// 1. RestoreStringSingleQuotes specifies to use single quotes to surround the string;
// 2. RestoreSpacesAroundBinaryOperation specifies to add space around binary operation;
// 3. RestoreStringWithoutCharset specifies to not print charset before string;
// 4. RestoreNameBackQuotes specifies to use back quotes to surround the name;
const defaultRestoreFlag = format.RestoreStringSingleQuotes | format.RestoreSpacesAroundBinaryOperation | format.RestoreStringWithoutCharset | format.RestoreNameBackQuotes
// RestoreWithDefaultDB returns restore strings for StmtNode with defaultDB
// This function is customized for SQL bind usage.
func RestoreWithDefaultDB(node ast.StmtNode, defaultDB, origin string) string {
if s, ok := SimpleCases(node, defaultDB, origin); ok {
return s
}
var sb strings.Builder
ctx := format.NewRestoreCtx(defaultRestoreFlag, &sb)
ctx.DefaultDB = defaultDB
if err := node.Restore(ctx); err != nil {
logutil.BgLogger().Debug("restore SQL failed", zap.String("category", "sql-bind"), zap.Error(err))
return ""
}
return sb.String()
}
// RestoreWithoutDB returns restore strings for StmtNode without schema name.
// This function is customized for universal SQL binding.
func RestoreWithoutDB(node ast.StmtNode) string {
var sb strings.Builder
ctx := format.NewRestoreCtx(defaultRestoreFlag|format.RestoreWithoutSchemaName, &sb)
if err := node.Restore(ctx); err != nil {
logutil.BgLogger().Debug("restore SQL failed", zap.String("category", "sql-bind"), zap.Error(err))
return ""
}
return sb.String()
}
// Copyright 2019 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package parser
import (
"strconv"
"sync"
"unicode"
"github.com/pingcap/errors"
"github.com/pingcap/tidb/pkg/parser"
)
var (
// ErrPatternNotMatch represents an error that patterns doesn't match.
ErrPatternNotMatch = errors.New("Pattern not match")
// Pool is a pool of parser.Parser
pool = &sync.Pool{New: func() any { return parser.New() }}
)
// GetParser gets a parser from the pool
func GetParser() *parser.Parser {
return pool.Get().(*parser.Parser)
}
// DestroyParser resets the parser and puts it back to the pool
func DestroyParser(p *parser.Parser) {
p.Reset()
pool.Put(p)
}
// Match matches the `pat` at least `times`, and returns the match, the rest and the error
func Match(buf string, pat func(byte) bool, times int) (match string, rest string, err error) {
var i int
for i < len(buf) && pat(buf[i]) {
i++
}
if i < times {
return "", buf, ErrPatternNotMatch
}
return buf[:i], buf[i:], nil
}
// MatchOne matches only one time with pat
func MatchOne(buf string, pat func(byte) bool) (string, error) {
if len(buf) == 0 || !pat(buf[0]) {
return buf, ErrPatternNotMatch
}
return buf[1:], nil
}
// AnyPunct matches an arbitrary punctuation
func AnyPunct(buf string) (string, error) {
return MatchOne(buf, func(b byte) bool {
return unicode.IsPunct(rune(b))
})
}
// AnyChar matches an arbitrary character
func AnyChar(buf string) (string, error) {
return MatchOne(buf, func(byte) bool {
return true
})
}
// Char matches a character: c
func Char(buf string, c byte) (string, error) {
return MatchOne(buf, func(x byte) bool {
return x == c
})
}
// Space matches at least `times` spaces
func Space(buf string, times int) (string, error) {
_, rest, err := Match(buf, func(c byte) bool {
return unicode.IsSpace(rune(c))
}, times)
return rest, err
}
// Space0 matches at least 0 space.
func Space0(buf string) string {
rest, err := Space(buf, 0)
if err != nil {
panic(err)
}
return rest
}
// Digit matches at least `times` digits
func Digit(buf string, times int) (match string, rest string, err error) {
return Match(buf, func(c byte) bool {
return unicode.IsDigit(rune(c))
}, times)
}
// Number matches a series of digits and convert it to an int
func Number(str string) (int, string, error) {
digits, rest, err := Digit(str, 1)
if err != nil {
return 0, str, err
}
num, err := strconv.Atoi(digits)
return num, rest, err
}
// Copyright 2022 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package promutil
import (
"github.com/prometheus/client_golang/prometheus"
)
// Factory is the interface to create some native prometheus metric.
type Factory interface {
// NewCounter creates a new Counter based on the provided CounterOpts.
NewCounter(opts prometheus.CounterOpts) prometheus.Counter
// NewCounterVec creates a new CounterVec based on the provided CounterOpts and
// partitioned by the given label names.
NewCounterVec(opts prometheus.CounterOpts, labelNames []string) *prometheus.CounterVec
// NewGauge creates a new Gauge based on the provided GaugeOpts.
NewGauge(opts prometheus.GaugeOpts) prometheus.Gauge
// NewGaugeVec creates a new GaugeVec based on the provided GaugeOpts and
// partitioned by the given label names.
NewGaugeVec(opts prometheus.GaugeOpts, labelNames []string) *prometheus.GaugeVec
// NewHistogram creates a new Histogram based on the provided HistogramOpts. It
// panics if the buckets in HistogramOpts are not in strictly increasing order.
NewHistogram(opts prometheus.HistogramOpts) prometheus.Histogram
// NewHistogramVec creates a new HistogramVec based on the provided HistogramOpts and
// partitioned by the given label names.
NewHistogramVec(opts prometheus.HistogramOpts, labelNames []string) *prometheus.HistogramVec
}
var _ Factory = defaultFactory{}
type defaultFactory struct{}
func (defaultFactory) NewCounter(opts prometheus.CounterOpts) prometheus.Counter {
return prometheus.NewCounter(opts)
}
func (defaultFactory) NewCounterVec(opts prometheus.CounterOpts, labelNames []string) *prometheus.CounterVec {
return prometheus.NewCounterVec(opts, labelNames)
}
func (defaultFactory) NewGauge(opts prometheus.GaugeOpts) prometheus.Gauge {
return prometheus.NewGauge(opts)
}
func (defaultFactory) NewGaugeVec(opts prometheus.GaugeOpts, labelNames []string) *prometheus.GaugeVec {
return prometheus.NewGaugeVec(opts, labelNames)
}
func (defaultFactory) NewHistogram(opts prometheus.HistogramOpts) prometheus.Histogram {
return prometheus.NewHistogram(opts)
}
func (defaultFactory) NewHistogramVec(opts prometheus.HistogramOpts, labelNames []string) *prometheus.HistogramVec {
return prometheus.NewHistogramVec(opts, labelNames)
}
// NewDefaultFactory returns a default implementation of Factory.
func NewDefaultFactory() Factory {
return defaultFactory{}
}
// Copyright 2022 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package promutil
import "github.com/prometheus/client_golang/prometheus"
// Registry is the interface to register or unregister metrics.
type Registry = prometheus.Registerer
var _ Registry = noopRegistry{}
type noopRegistry struct{}
func (noopRegistry) Register(_ prometheus.Collector) error {
return nil
}
func (noopRegistry) MustRegister(_ ...prometheus.Collector) {}
func (noopRegistry) Unregister(_ prometheus.Collector) bool {
return true
}
// NewNoopRegistry returns a Registry that does nothing.
// It is used for the case where metrics have been registered
// in factory automatically.
func NewNoopRegistry() Registry {
return noopRegistry{}
}
// NewDefaultRegistry returns a default implementation of Registry.
func NewDefaultRegistry() Registry {
return prometheus.NewRegistry()
}
// Copyright 2023 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package sqlkiller
import (
"math/rand"
"sync"
"sync/atomic"
"time"
"github.com/pingcap/failpoint"
"github.com/pingcap/tidb/pkg/util/dbterror/exeerrors"
"github.com/pingcap/tidb/pkg/util/intest"
"github.com/pingcap/tidb/pkg/util/logutil"
"go.uber.org/zap"
)
type killSignal = uint32
// KillSignal types.
const (
UnspecifiedKillSignal killSignal = iota
QueryInterrupted
MaxExecTimeExceeded
QueryMemoryExceeded
ServerMemoryExceeded
RunawayQueryExceeded
KilledByMemArbitrator
// When you add a new signal, you should also modify store/driver/error/ToTiDBErr,
// so that errors in client can be correctly converted to tidb errors.
)
// SQLKiller is used to kill a query.
type SQLKiller struct {
Finish func()
killEvent struct {
ch chan struct{}
desc string
sync.Mutex
triggered bool
}
ConnID atomic.Uint64
// FinishFuncLock is used to ensure that Finish is not called and modified at the same time.
// An external call to the Finish function only allows when the main goroutine to be in the writeResultSet process.
// When the main goroutine exits the writeResultSet process, the Finish function will be cleared.
FinishFuncLock sync.Mutex
Signal killSignal
// InWriteResultSet is used to indicate whether the query is currently calling clientConn.writeResultSet().
// If the query is in writeResultSet and Finish() can acquire rs.finishLock, we can assume the query is waiting for the client to receive data from the server over network I/O.
InWriteResultSet atomic.Bool
lastCheckTime atomic.Pointer[time.Time]
IsConnectionAlive atomic.Pointer[func() bool]
}
// GetKillEventChan returns a recv chan which will be closed when the kill signal is sent.
func (killer *SQLKiller) GetKillEventChan() <-chan struct{} {
killer.killEvent.Lock()
defer killer.killEvent.Unlock()
if killer.killEvent.ch != nil {
return killer.killEvent.ch
}
killer.killEvent.ch = make(chan struct{})
if killer.killEvent.triggered {
close(killer.killEvent.ch)
}
return killer.killEvent.ch
}
func (killer *SQLKiller) triggerKillEvent() {
killer.killEvent.Lock()
defer killer.killEvent.Unlock()
if killer.killEvent.triggered {
return
}
if killer.killEvent.ch != nil {
close(killer.killEvent.ch)
}
killer.killEvent.triggered = true
}
func (killer *SQLKiller) resetKillEvent() {
killer.killEvent.Lock()
defer killer.killEvent.Unlock()
if !killer.killEvent.triggered && killer.killEvent.ch != nil {
close(killer.killEvent.ch)
}
killer.killEvent.ch = nil
killer.killEvent.triggered = false
killer.killEvent.desc = ""
}
// SendKillSignalWithKillEventReason sets the reason for the kill event and sends a kill signal.
func (killer *SQLKiller) SendKillSignalWithKillEventReason(killSignal killSignal, desc string) {
{
killer.killEvent.Lock()
killer.killEvent.desc = desc
killer.killEvent.Unlock()
}
killer.sendKillSignal(killSignal)
killer.triggerKillEvent()
}
func (killer *SQLKiller) sendKillSignal(reason killSignal) {
if atomic.CompareAndSwapUint32(&killer.Signal, 0, reason) {
status := atomic.LoadUint32(&killer.Signal)
err := killer.getKillError(status)
logutil.BgLogger().Warn("kill initiated", zap.Uint64("connection ID", killer.ConnID.Load()), zap.String("reason", err.Error()))
}
}
// SendKillSignal sends a kill signal to the query.
func (killer *SQLKiller) SendKillSignal(reason killSignal) {
killer.sendKillSignal(reason)
killer.triggerKillEvent()
}
// GetKillSignal gets the kill signal.
func (killer *SQLKiller) GetKillSignal() killSignal {
return atomic.LoadUint32(&killer.Signal)
}
func (killer *SQLKiller) getKillEventReason() (res string) {
killer.killEvent.Lock()
//
res = killer.killEvent.desc
//
killer.killEvent.Unlock()
return res
}
// getKillError gets the error according to the kill signal.
func (killer *SQLKiller) getKillError(status killSignal) error {
switch status {
case QueryInterrupted:
return exeerrors.ErrQueryInterrupted.GenWithStackByArgs()
case MaxExecTimeExceeded:
return exeerrors.ErrMaxExecTimeExceeded.GenWithStackByArgs()
case QueryMemoryExceeded:
return exeerrors.ErrMemoryExceedForQuery.GenWithStackByArgs(killer.ConnID.Load())
case ServerMemoryExceeded:
return exeerrors.ErrMemoryExceedForInstance.GenWithStackByArgs(killer.ConnID.Load())
case RunawayQueryExceeded:
return exeerrors.ErrResourceGroupQueryRunawayInterrupted.FastGenByArgs("runaway exceed tidb side")
case KilledByMemArbitrator:
return exeerrors.ErrQueryExecStopped.GenWithStackByArgs(killer.getKillEventReason(), killer.ConnID.Load())
default:
}
return nil
}
// FinishResultSet is used to close the result set.
// If a kill signal is sent but the SQL query is stuck in the network stack while writing packets to the client,
// encountering some bugs that cause it to hang, or failing to detect the kill signal, we can call Finish to release resources used during the SQL execution process.
func (killer *SQLKiller) FinishResultSet() {
killer.FinishFuncLock.Lock()
defer killer.FinishFuncLock.Unlock()
if killer.Finish != nil {
killer.Finish()
}
}
// SetFinishFunc sets the finish function.
func (killer *SQLKiller) SetFinishFunc(fn func()) {
killer.FinishFuncLock.Lock()
defer killer.FinishFuncLock.Unlock()
killer.Finish = fn
}
// ClearFinishFunc clears the finish function.1
func (killer *SQLKiller) ClearFinishFunc() {
killer.FinishFuncLock.Lock()
defer killer.FinishFuncLock.Unlock()
killer.Finish = nil
}
// HandleSignal handles the kill signal and return the error.
func (killer *SQLKiller) HandleSignal() error {
failpoint.Inject("randomPanic", func(val failpoint.Value) {
if p, ok := val.(int); ok {
if rand.Float64() > (float64)(p)/1000 {
if killer.ConnID.Load() != 0 {
targetStatus := rand.Int31n(5)
atomic.StoreUint32(&killer.Signal, uint32(targetStatus))
}
}
}
})
// Checks if the connection is alive.
// For performance reasons, the check interval should be at least `checkConnectionAliveDur`(1 second).
fn := killer.IsConnectionAlive.Load()
lastCheckTime := killer.lastCheckTime.Load()
if fn != nil {
var checkConnectionAliveDur time.Duration = time.Second
now := time.Now()
if intest.InTest {
checkConnectionAliveDur = time.Millisecond
}
if lastCheckTime == nil {
killer.lastCheckTime.Store(&now)
} else if now.Sub(*lastCheckTime) > checkConnectionAliveDur {
killer.lastCheckTime.Store(&now)
if !(*fn)() {
killer.sendKillSignal(QueryInterrupted)
}
}
}
status := atomic.LoadUint32(&killer.Signal)
err := killer.getKillError(status)
if status == ServerMemoryExceeded {
logutil.BgLogger().Warn("global memory controller, NeedKill signal is received successfully",
zap.Uint64("conn", killer.ConnID.Load()))
}
return err
}
// CheckConnectionAlive checks whether the connection is alive immediately.
func (killer *SQLKiller) CheckConnectionAlive() {
fn := killer.IsConnectionAlive.Load()
if fn != nil && !(*fn)() {
killer.sendKillSignal(QueryInterrupted)
}
}
// Reset resets the SqlKiller.
func (killer *SQLKiller) Reset() {
if atomic.LoadUint32(&killer.Signal) != 0 {
logutil.BgLogger().Warn("kill finished", zap.Uint64("conn", killer.ConnID.Load()))
}
atomic.StoreUint32(&killer.Signal, 0)
killer.resetKillEvent()
killer.lastCheckTime.Store(nil)
}
// Copyright 2015 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package stringutil
import (
"bytes"
"fmt"
"regexp"
"slices"
"strings"
"unicode/utf8"
"github.com/pingcap/errors"
"github.com/pingcap/tidb/pkg/parser/mysql"
"github.com/pingcap/tidb/pkg/util/hack"
)
// ErrSyntax indicates that a value does not have the right syntax for the target type.
var ErrSyntax = errors.New("invalid syntax")
// UnquoteChar decodes the first character or byte in the escaped string
// or character literal represented by the string s.
// It returns four values:
//
// 1) value, the decoded Unicode code point or byte value;
// 2) multibyte, a boolean indicating whether the decoded character requires a multibyte UTF-8 representation;
// 3) tail, the remainder of the string after the character; and
// 4) an error that will be nil if the character is syntactically valid.
//
// The second argument, quote, specifies the type of literal being parsed
// and therefore which escaped quote character is permitted.
// If set to a single quote, it permits the sequence \' and disallows unescaped '.
// If set to a double quote, it permits \" and disallows unescaped ".
// If set to zero, it does not permit either escape and allows both quote characters to appear unescaped.
// Different with strconv.UnquoteChar, it permits unnecessary backslash.
func UnquoteChar(s string, quote byte) (value []byte, tail string, err error) {
// easy cases
switch c := s[0]; {
case c == quote:
err = errors.Trace(ErrSyntax)
return
case c >= utf8.RuneSelf:
r, size := utf8.DecodeRuneInString(s)
if r == utf8.RuneError {
value = append(value, c)
return value, s[1:], nil
}
value = append(value, string(r)...)
return value, s[size:], nil
case c != '\\':
value = append(value, c)
return value, s[1:], nil
}
// hard case: c is backslash
if len(s) <= 1 {
err = errors.Trace(ErrSyntax)
return
}
c := s[1]
s = s[2:]
switch c {
case 'b':
value = append(value, '\b')
case 'n':
value = append(value, '\n')
case 'r':
value = append(value, '\r')
case 't':
value = append(value, '\t')
case 'Z':
value = append(value, '\032')
case '0':
value = append(value, '\000')
case '_', '%':
value = append(value, '\\')
value = append(value, c)
case '\\':
value = append(value, '\\')
case '\'', '"':
value = append(value, c)
default:
value = append(value, c)
}
tail = s
return
}
// Unquote interprets s as a single-quoted, double-quoted,
// or backquoted Go string literal, returning the string value
// that s quotes. For example: test=`"\"\n"` (hex: 22 5c 22 5c 6e 22)
// should be converted to `"\n` (hex: 22 0a).
func Unquote(s string) (t string, err error) {
n := len(s)
if n < 2 {
return "", errors.Trace(ErrSyntax)
}
quote := s[0]
if quote != s[n-1] {
return "", errors.Trace(ErrSyntax)
}
s = s[1 : n-1]
if quote != '"' && quote != '\'' {
return "", errors.Trace(ErrSyntax)
}
// Avoid allocation. No need to convert if there is no '\'
if strings.IndexByte(s, '\\') == -1 && strings.IndexByte(s, quote) == -1 {
return s, nil
}
buf := make([]byte, 0, 3*len(s)/2) // Try to avoid more allocations.
for len(s) > 0 {
mb, ss, err := UnquoteChar(s, quote)
if err != nil {
return "", errors.Trace(err)
}
s = ss
buf = append(buf, mb...)
}
return string(buf), nil
}
const (
// PatMatch is the enumeration value for per-character match.
PatMatch = iota + 1
// PatOne is the enumeration value for '_' match.
PatOne
// PatAny is the enumeration value for '%' match.
PatAny
)
// CompilePatternBinary is used for binary strings.
func CompilePatternBinary(pattern string, escape byte) (patChars, patTypes []byte) {
return CompilePatternInnerBinary(pattern, escape)
}
// CompilePattern is an adapter for `CompilePatternInner`, `pattern` can be any unicode string.
func CompilePattern(pattern string, escape byte) (patWeights []rune, patTypes []byte) {
return CompilePatternInner(pattern, escape)
}
// CompilePatternInner handles escapes and wild cards convert pattern characters and
// pattern types.
// Note: if anything changes in this method, please double-check CompilePatternInnerBytes
func CompilePatternInner(pattern string, escape byte) (patWeights []rune, patTypes []byte) {
runes := []rune(pattern)
escapeRune := rune(escape)
lenRunes := len(runes)
patWeights = make([]rune, lenRunes)
patTypes = make([]byte, lenRunes)
patLen := 0
for i := 0; i < lenRunes; i++ {
var tp byte
var r = runes[i]
switch r {
case escapeRune:
tp = PatMatch
if i < lenRunes-1 {
i++
r = runes[i]
}
case '_':
// %_ => _%
if patLen > 0 && patTypes[patLen-1] == PatAny {
tp = PatAny
r = '%'
patWeights[patLen-1], patTypes[patLen-1] = '_', PatOne
} else {
tp = PatOne
}
case '%':
// %% => %
if patLen > 0 && patTypes[patLen-1] == PatAny {
continue
}
tp = PatAny
default:
tp = PatMatch
}
patWeights[patLen] = r
patTypes[patLen] = tp
patLen++
}
patWeights = patWeights[:patLen]
patTypes = patTypes[:patLen]
return
}
// CompilePatternInnerBinary handles escapes and wild cards convert pattern characters and
// pattern types in bytes.
// The main algorithm is the same as CompilePatternInner. However, it's not easy to use interface/lambda to hide the different details here.
// Note: if anything changes in this method, please double-check CompilePatternInner
func CompilePatternInnerBinary(pattern string, escape byte) (patWeights, patTypes []byte) {
bytes := []byte(pattern)
lenBytes := len(bytes)
patWeights = make([]byte, lenBytes)
patTypes = make([]byte, lenBytes)
patLen := 0
for i := 0; i < lenBytes; i++ {
var tp byte
var b = bytes[i]
switch b {
case escape:
tp = PatMatch
if i < lenBytes-1 {
i++
b = bytes[i]
}
case '_':
// %_ => _%
if patLen > 0 && patTypes[patLen-1] == PatAny {
tp = PatAny
b = '%'
patWeights[patLen-1], patTypes[patLen-1] = '_', PatOne
} else {
tp = PatOne
}
case '%':
// %% => %
if patLen > 0 && patTypes[patLen-1] == PatAny {
continue
}
tp = PatAny
default:
tp = PatMatch
}
patWeights[patLen] = b
patTypes[patLen] = tp
patLen++
}
patWeights = patWeights[:patLen]
patTypes = patTypes[:patLen]
return
}
func matchRune(a, b rune) bool {
return a == b
// We may reuse below code block when like function go back to case insensitive.
/*
if a == b {
return true
}
if a >= 'a' && a <= 'z' && a-caseDiff == b {
return true
}
return a >= 'A' && a <= 'Z' && a+caseDiff == b
*/
}
// CompileLike2Regexp convert a like `lhs` to a regular expression
func CompileLike2Regexp(str string) string {
patChars, patTypes := CompilePattern(str, '\\')
var result strings.Builder
result.Grow(len(patChars)*2 + 2)
result.WriteByte('^')
for i := range patChars {
switch patTypes[i] {
case PatMatch:
result.WriteString(regexp.QuoteMeta(string(patChars[i])))
case PatOne:
result.WriteByte('.')
case PatAny:
result.WriteString(".*")
}
}
result.WriteByte('$')
return result.String()
}
// DoMatchBinary is an adapter for `DoMatchInner`, `str` is binary strings or ascii string.
func DoMatchBinary(str string, patChars, patTypes []byte) bool {
bytes := []byte(str)
lenBytes := len(bytes)
lenPatWeights := len(patChars)
return doMatchInner(lenPatWeights, lenBytes, patTypes, func(a, b int) bool { return bytes[a] == patChars[b] })
}
// DoMatch is an adapter for `DoMatchCustomized`, `str` can be any unicode string.
func DoMatch(str string, patChars []rune, patTypes []byte) bool {
return DoMatchCustomized(str, patChars, patTypes, matchRune)
}
// DoMatchCustomized is an adapter for `DoMatchInner`, `str` can be any unicode string.
func DoMatchCustomized(str string, patWeights []rune, patTypes []byte, matcher func(a, b rune) bool) bool {
// TODO(bb7133): it is possible to get the rune one by one to avoid the cost of get them as a whole.
runes := []rune(str)
lenRunes := len(runes)
lenPatWeights := len(patWeights)
return doMatchInner(lenPatWeights, lenRunes, patTypes, func(a, b int) bool { return matcher(runes[a], patWeights[b]) })
}
// doMatchInner matches the string with patChars and patTypes.
// The algorithm has linear time complexity.
// https://research.swtch.com/glob
func doMatchInner(lenPatWeights int, lenChars int, patTypes []byte, matcher func(a, b int) bool) bool {
var cIdx, pIdx, nextCIdx, nextPIdx int
for pIdx < lenPatWeights || cIdx < lenChars {
if pIdx < lenPatWeights {
switch patTypes[pIdx] {
case PatMatch:
if cIdx < lenChars && matcher(cIdx, pIdx) {
pIdx++
cIdx++
continue
}
case PatOne:
if cIdx < lenChars {
pIdx++
cIdx++
continue
}
case PatAny:
// Try to match at sIdx.
// If that doesn't work out,
// restart at sIdx+1 next.
nextPIdx = pIdx
nextCIdx = cIdx + 1
pIdx++
continue
}
}
// Mismatch. Maybe restart.
if 0 < nextCIdx && nextCIdx <= lenChars {
pIdx = nextPIdx
cIdx = nextCIdx
continue
}
return false
}
// Matched all of pattern to all of name. Success.
return true
}
// IsExactMatch return true if no wildcard character
func IsExactMatch(patTypes []byte) bool {
for _, pt := range patTypes {
if pt != PatMatch {
return false
}
}
return true
}
// Copy deep copies a string.
func Copy(src string) string {
return string(hack.Slice(src))
}
// StringerFunc defines string func implement fmt.Stringer.
type StringerFunc func() string
// String implements fmt.Stringer
func (l StringerFunc) String() string {
return l()
}
// MemoizeStr returns memoized version of stringFunc. When the result of l is not
// "", it will be cached and returned directly next time.
//
// MemoizeStr is not concurrency safe.
func MemoizeStr(l func() string) fmt.Stringer {
var result string
return StringerFunc(func() string {
if result != "" {
return result
}
result = l()
return result
})
}
// StringerStr defines a alias to normal string.
// implement fmt.Stringer
type StringerStr string
// String implements fmt.Stringer
func (i StringerStr) String() string {
return string(i)
}
// Escape the identifier for pretty-printing.
// For instance, the identifier
/*
"foo `bar`" will become "`foo ``bar```".
*/
// The sqlMode controls whether to escape with backquotes (`) or double quotes
// (`"`) depending on whether mysql.ModeANSIQuotes is enabled.
func Escape(str string, sqlMode mysql.SQLMode) string {
var quote string
if sqlMode&mysql.ModeANSIQuotes != 0 {
quote = `"`
} else {
quote = "`"
}
return quote + strings.ReplaceAll(str, quote, quote+quote) + quote
}
// BuildStringFromLabels construct config labels into string by following format:
// "keyA=valueA,keyB=valueB"
func BuildStringFromLabels(labels map[string]string) string {
if len(labels) < 1 {
return ""
}
s := make([]string, 0, len(labels))
for k := range labels {
s = append(s, k)
}
slices.Sort(s)
var r bytes.Buffer
// visit labels by sorted key in order to make sure that result should be consistency
for _, key := range s {
fmt.Fprintf(&r, "%s=%s,", key, labels[key])
}
returned := r.String()
return returned[:len(returned)-1]
}
// GetTailSpaceCount returns the number of tailed spaces.
func GetTailSpaceCount(str string) int64 {
length := len(str)
for length > 0 && str[length-1] == ' ' {
length--
}
return int64(len(str) - length)
}
// Utf8Len calculates how many bytes the utf8 character takes.
// This b parameter should be the first byte of utf8 character
func Utf8Len(b byte) int {
flag := uint8(128)
if (flag & b) == 0 {
return 1
}
length := 0
for ; (flag & b) != 0; flag >>= 1 {
length++
}
return length
}
// TrimUtf8String needs the string input should always be valid which means
// that it should always return true in utf8.ValidString(str)
func TrimUtf8String(str *string, trimmedNum int64) int64 {
totalLenTrimmed := int64(0)
for ; trimmedNum > 0; trimmedNum-- {
length := Utf8Len((*str)[0]) // character length
*str = (*str)[length:]
totalLenTrimmed += int64(length)
}
return totalLenTrimmed
}
// ConvertPosInUtf8 converts a binary index to the position which shows the occurrence location in the utf8 string
// Take "你好" as example:
//
// binary index for "好" is 3, ConvertPosInUtf8("你好", 3) should return 2
func ConvertPosInUtf8(str *string, pos int64) int64 {
preStr := (*str)[:pos]
preStrNum := utf8.RuneCountInString(preStr)
return int64(preStrNum + 1)
}
func toLowerIfAlphaASCII(c byte) byte {
return c | 0x20
}
func toUpperIfAlphaASCII(c byte) byte {
return c ^ 0x20
}
// IsUpperASCII judges if this is capital alphabet
func IsUpperASCII(c byte) bool {
if c >= 'A' && c <= 'Z' {
return true
}
return false
}
// IsLowerASCII judges if this is lower alphabet
func IsLowerASCII(c byte) bool {
if c >= 'a' && c <= 'z' {
return true
}
return false
}
// LowerOneString lowers the ascii characters in a string
func LowerOneString(str []byte) {
strLen := len(str)
for i := range strLen {
if IsUpperASCII(str[i]) {
str[i] = toLowerIfAlphaASCII(str[i])
}
}
}
// IsNumericASCII judges if a byte is numeric
func IsNumericASCII(c byte) bool {
return (c >= '0' && c <= '9')
}
// LowerOneStringExcludeEscapeChar lowers strings and exclude an escape char
//
// When escape_char is a capital char, we shouldn't lower the escape char.
// For example, 'aaaa' ilike 'AAAA' escape 'A', we should convert 'AAAA' to 'AaAa'.
// If we do not exclude the escape char, 'AAAA' will be lowered to 'aaaa', and we
// can not get the correct result.
//
// When escape_char is a lower char, we need to convert it to the capital char
// Because: when lowering "ABC" with escape 'a', after lower, "ABC" -> "abc",
// then 'a' will be an escape char and it is not expected.
// Morever, when escape char is uppered we need to tell it to the caller.
func LowerOneStringExcludeEscapeChar(str []byte, escapeChar byte) byte {
actualEscapeChar := escapeChar
if IsLowerASCII(escapeChar) {
actualEscapeChar = toUpperIfAlphaASCII(escapeChar)
}
escaped := false
strLen := len(str)
for i := 0; i < strLen; i++ {
if IsUpperASCII(str[i]) {
// Do not lower the escape char, however when a char is equal to
// an escape char and it's after an escape char, we still lower it
// For example: "AA" (escape 'A'), -> "Aa"
if !(str[i] != escapeChar || escaped) {
escaped = true
continue
}
str[i] = toLowerIfAlphaASCII(str[i])
} else {
if str[i] == escapeChar && !escaped {
escaped = true
// It should be `str[i] = toUpperIfAlphaASCII(str[i])`,
// but 'actual_escape_char' is always equal to 'toUpperIfAlphaASCII(str[i])'
str[i] = actualEscapeChar
continue
}
i += Utf8Len(str[i]) - 1
}
escaped = false
}
return actualEscapeChar
}
// EscapeGlobQuestionMark escapes '?' for a glob path pattern.
func EscapeGlobQuestionMark(s string) string {
var buf strings.Builder
buf.Grow(len(s))
for _, c := range s {
if c == '?' {
buf.WriteByte('\\')
}
buf.WriteRune(c)
}
return buf.String()
}
// Copyright 2021 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package tracing
// CETraceRecord records an expression and related cardinality estimation result.
type CETraceRecord struct {
TableName string `json:"table_name"`
Type string `json:"type"`
Expr string `json:"expr"`
TableID int64 `json:"-"`
RowCount uint64 `json:"row_count"`
}
// DedupCETrace deduplicate a slice of *CETraceRecord and return the deduplicated slice
func DedupCETrace(records []*CETraceRecord) []*CETraceRecord {
ret := make([]*CETraceRecord, 0, len(records))
exists := make(map[CETraceRecord]struct{}, len(records))
for _, rec := range records {
if _, ok := exists[*rec]; !ok {
ret = append(ret, rec)
exists[*rec] = struct{}{}
}
}
return ret
}
// OptimizeTracer indicates tracer for optimizer
type OptimizeTracer struct {
}
// Copyright 2018 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package tracing
import (
"context"
"runtime/trace"
"strconv"
"sync/atomic"
"time"
"github.com/opentracing/basictracer-go"
"github.com/opentracing/opentracing-go"
"github.com/pingcap/tidb/pkg/config/kerneltype"
"github.com/pingcap/tidb/pkg/util/intest"
clienttrace "github.com/tikv/client-go/v2/trace"
"go.uber.org/zap"
)
// TiDBTrace is set as Baggage on traces which are used for tidb tracing.
const TiDBTrace = "tr"
type sqlTracingCtxKeyType struct{}
var sqlTracingCtxKey = sqlTracingCtxKeyType{}
// A CallbackRecorder immediately invokes itself on received trace spans.
type CallbackRecorder func(sp basictracer.RawSpan)
// RecordSpan implements basictracer.SpanRecorder.
func (cr CallbackRecorder) RecordSpan(sp basictracer.RawSpan) {
cr(sp)
}
// TraceInfo is the information for trace.
type TraceInfo struct {
// SessionAlias is the alias of session
SessionAlias string `json:"session_alias"`
// TraceID is the trace id for every SQL statement
TraceID []byte `json:"trace_id"`
// ConnectionID is the id of the connection
ConnectionID uint64 `json:"connection_id"`
}
// NewRecordedTrace returns a Span which records directly via the specified
// callback.
func NewRecordedTrace(opName string, callback func(sp basictracer.RawSpan)) opentracing.Span {
tr := basictracer.New(CallbackRecorder(callback))
opentracing.SetGlobalTracer(tr)
sp := tr.StartSpan(opName)
sp.SetBaggageItem(TiDBTrace, "1")
return sp
}
// noopSpan returns a Span which discards all operations.
func noopSpan() opentracing.Span {
return (opentracing.NoopTracer{}).StartSpan("DefaultSpan")
}
// SpanFromContext returns the span obtained from the context or, if none is found, a new one started through tracer.
func SpanFromContext(ctx context.Context) (sp opentracing.Span) {
if sp = opentracing.SpanFromContext(ctx); sp == nil {
return noopSpan()
}
return sp
}
// ChildSpanFromContxt return a non-nil span. If span can be got from ctx, then returned span is
// a child of such span. Otherwise, returned span is a noop span.
func ChildSpanFromContxt(ctx context.Context, opName string) (opentracing.Span, context.Context) {
if sp := opentracing.SpanFromContext(ctx); sp != nil {
if _, ok := sp.Tracer().(opentracing.NoopTracer); !ok {
child := opentracing.StartSpan(opName, opentracing.ChildOf(sp.Context()))
return child, opentracing.ContextWithSpan(ctx, child)
}
}
return noopSpan(), ctx
}
// StartRegionWithNewRootSpan return Region together with the context.
// It create and start a new span by globalTracer and store it into `ctx`.
func StartRegionWithNewRootSpan(ctx context.Context, regionType string) (Region, context.Context) {
span := opentracing.GlobalTracer().StartSpan(regionType)
r := Region{
Region: trace.StartRegion(ctx, regionType),
Span: span,
}
ctx = opentracing.ContextWithSpan(ctx, span)
return r, ctx
}
// Sink records trace events.
type Sink interface {
Record(ctx context.Context, event Event)
}
// FlightRecorder defines the flight recorder interface.
type FlightRecorder interface {
Sink
}
type sinkKeyType struct{}
var sinkKey sinkKeyType = struct{}{}
// WithFlightRecorder creates a context with the given FlightRecorder.
func WithFlightRecorder(ctx context.Context, sink FlightRecorder) context.Context {
return context.WithValue(ctx, sinkKey, sink)
}
// GetSink returns the Sink from the context.
func GetSink(ctx context.Context) any {
return ctx.Value(sinkKey)
}
// ExtractTraceID returns the trace identifier from ctx if present.
// It delegates to client-go's TraceIDFromContext implementation.
func ExtractTraceID(ctx context.Context) []byte {
return clienttrace.TraceIDFromContext(ctx)
}
// StartRegion provides better API, integrating both opentracing and runtime.trace facilities into one.
// Recommended usage is
//
// defer tracing.StartRegion(ctx, "myTracedRegion").End()
func StartRegion(ctx context.Context, regionType string) Region {
r := trace.StartRegion(ctx, regionType)
var span1 opentracing.Span
if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil {
span1 = span.Tracer().StartSpan(regionType, opentracing.ChildOf(span.Context()))
}
ret := Region{
Region: r,
Span: span1,
}
if IsEnabled(General) {
if tmp := GetSink(ctx); tmp != nil {
sink := tmp.(Sink)
event := Event{
Category: General,
Name: regionType,
Phase: PhaseBegin,
Timestamp: time.Now(),
TraceID: ExtractTraceID(ctx),
}
sink.Record(ctx, event)
ret.span.event = &event
ret.span.sink = sink
ret.span.ctx = ctx
}
}
return ret
}
// enabledCategories stores the currently enabled category mask.
var enabledCategories atomic.Uint64
// Enable enables trace events for the specified categories.
func Enable(categories TraceCategory) {
for {
current := enabledCategories.Load()
next := current | uint64(categories)
if enabledCategories.CompareAndSwap(current, next) {
return
}
}
}
// Disable disables trace events for the specified categories.
func Disable(categories TraceCategory) {
for {
current := enabledCategories.Load()
next := current &^ uint64(categories)
if enabledCategories.CompareAndSwap(current, next) {
return
}
}
}
// SetCategories sets the enabled categories to exactly the specified value.
func SetCategories(categories TraceCategory) {
enabledCategories.Store(uint64(categories))
}
// GetEnabledCategories returns the currently enabled categories.
func GetEnabledCategories() TraceCategory {
return TraceCategory(enabledCategories.Load())
}
// IsEnabled returns whether the specified category is enabled.
// This function is inline-friendly for hot paths.
// Trace events only work for next-gen kernel.
func IsEnabled(category TraceCategory) bool {
// Fast path: check kernel type first
if kerneltype.IsClassic() && !intest.InTest {
return false
}
return enabledCategories.Load()&uint64(category) != 0
}
// TraceCategory represents different trace event categories.
type TraceCategory uint64
const (
// TxnLifecycle traces transaction begin/commit/rollback events.
TxnLifecycle TraceCategory = 1 << iota
// Txn2PC traces two-phase commit prewrite and commit phases.
Txn2PC
// TxnLockResolve traces lock resolution and conflict handling.
TxnLockResolve
// StmtLifecycle traces statement start/finish events.
StmtLifecycle
// StmtPlan traces statement plan digest and optimization.
StmtPlan
// KvRequest traces client-go kv request and responses
KvRequest
// UnknownClient is the fallback category for unmapped client-go trace events.
// Used when client-go emits events with categories not yet mapped in adapter.go.
// This provides forward compatibility if client-go adds new categories.
UnknownClient
// General is used by tracing API
General
// DDLJob traces DDL job events.
DDLJob
// DevDebug traces development/debugging events.
DevDebug
// TiKVRequest maps to client-go's FlagTiKVCategoryRequest.
// Controls request-level tracing in TiKV.
TiKVRequest
// TiKVWriteDetails maps to client-go's FlagTiKVCategoryWriteDetails.
// Controls detailed write operation tracing in TiKV.
TiKVWriteDetails
// TiKVReadDetails maps to client-go's FlagTiKVCategoryReadDetails.
// Controls detailed read operation tracing in TiKV.
TiKVReadDetails
// RegionCache traces region cache events.
RegionCache
traceCategorySentinel
)
// AllCategories can be used to enable every known trace category.
const AllCategories = traceCategorySentinel - 1
const defaultEnabledCategories = 0
func init() {
enabledCategories.Store(uint64(defaultEnabledCategories))
}
// String returns the string representation of a TraceCategory.
func (c TraceCategory) String() string {
return getCategoryName(c)
}
// ParseTraceCategory parses a trace category string representation and returns the corresponding TraceCategory.
func ParseTraceCategory(category string) TraceCategory {
for i := 0; (1 << i) < traceCategorySentinel; i++ {
if getCategoryName(1<<i) == category {
return TraceCategory(1 << i)
}
}
return TraceCategory(0) // invalid
}
// getCategoryName returns the string name for a category.
func getCategoryName(category TraceCategory) string {
switch category {
case TxnLifecycle:
return "txn_lifecycle"
case Txn2PC:
return "txn_2pc"
case TxnLockResolve:
return "txn_lock_resolve"
case StmtLifecycle:
return "stmt_lifecycle"
case StmtPlan:
return "stmt_plan"
case KvRequest:
return "kv_request"
case UnknownClient:
return "unknown_client"
case General:
return "general"
case DDLJob:
return "ddl_job"
case DevDebug:
return "dev_debug"
case TiKVRequest:
return "tikv_request"
case TiKVWriteDetails:
return "tikv_write_details"
case TiKVReadDetails:
return "tikv_read_details"
case RegionCache:
return "region_cache"
default:
return "unknown(" + strconv.FormatUint(uint64(category), 10) + ")"
}
}
// Constants used in event fields.
// See https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU
// for more details.
// Phase represents the phase of an event.
type Phase string
// The value definition for Phase.
const (
PhaseBegin Phase = "B"
PhaseEnd Phase = "E"
PhaseAsyncBegin Phase = "b"
PhaseAsyncEnd Phase = "e"
PhaseFlowBegin Phase = "s"
PhaseFlowEnd Phase = "f"
PhaseInstant Phase = "i"
)
// Event represents a traced event.
// INVARIANT: Event.Fields must be treated as immutable once created, as the
// underlying array may be shared across multiple goroutines (e.g., flight
// recorder, log sink, context-specific sinks). Modifications to Fields must
// allocate a new slice to avoid data races.
type Event struct {
Timestamp time.Time
Name string
Phase
TraceID []byte
Fields []zap.Field
Category TraceCategory
}
// StartRegionEx returns Region together with the context.
// Recommended usage is
//
// r, ctx := tracing.StartRegionEx(ctx, "myTracedRegion")
// defer r.End()
func StartRegionEx(ctx context.Context, regionType string) (Region, context.Context) {
r := StartRegion(ctx, regionType)
if r.Span != nil {
ctx = opentracing.ContextWithSpan(ctx, r.Span)
}
return r, ctx
}
// Region is a region of code whose execution time interval is traced.
type Region struct {
*trace.Region
opentracing.Span
span struct {
event *Event
sink Sink
ctx context.Context
}
}
// End marks the end of the traced code region.
func (r Region) End() {
if r.Span != nil {
r.Span.Finish()
}
r.Region.End()
if r.span.event != nil {
r.span.event.Phase = PhaseEnd
r.span.event.Timestamp = time.Now()
r.span.sink.Record(r.span.ctx, *r.span.event)
}
}
// TraceInfoFromContext returns the `model.TraceInfo` in context
func TraceInfoFromContext(ctx context.Context) *TraceInfo {
val := ctx.Value(sqlTracingCtxKey)
if info, ok := val.(*TraceInfo); ok {
return info
}
return nil
}
// ContextWithTraceInfo creates a new `model.TraceInfo` for context
func ContextWithTraceInfo(ctx context.Context, info *TraceInfo) context.Context {
if info == nil {
return ctx
}
return context.WithValue(ctx, sqlTracingCtxKey, info)
}